@etus/ui 0.4.0-beta.17 → 0.4.0-beta.18
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/{chunk-U6EOAIPK.js → chunk-2X35C55E.js} +3 -3
- package/dist/chunk-2X35C55E.js.map +1 -0
- package/dist/{chunk-UYC7M3FM.js → chunk-34WNJNPL.js} +5 -5
- package/dist/{chunk-UYC7M3FM.js.map → chunk-34WNJNPL.js.map} +1 -1
- package/dist/{chunk-N4UTBJRY.js → chunk-3NHH7VPI.js} +3 -3
- package/dist/{chunk-N4UTBJRY.js.map → chunk-3NHH7VPI.js.map} +1 -1
- package/dist/{chunk-OEXQ2MOY.js → chunk-45YJLE4R.js} +3 -3
- package/dist/{chunk-OEXQ2MOY.js.map → chunk-45YJLE4R.js.map} +1 -1
- package/dist/{chunk-66TBTTZO.js → chunk-46SUPGQV.js} +14 -14
- package/dist/chunk-46SUPGQV.js.map +1 -0
- package/dist/{chunk-3W7FXRO5.js → chunk-56TC4CPT.js} +4 -4
- package/dist/{chunk-3W7FXRO5.js.map → chunk-56TC4CPT.js.map} +1 -1
- package/dist/{chunk-NCT5WXKG.js → chunk-5ACHKT35.js} +3 -3
- package/dist/{chunk-NCT5WXKG.js.map → chunk-5ACHKT35.js.map} +1 -1
- package/dist/{chunk-GGUWEAYD.js → chunk-5E44I7PB.js} +3 -3
- package/dist/{chunk-GGUWEAYD.js.map → chunk-5E44I7PB.js.map} +1 -1
- package/dist/{chunk-T6XRYT6Q.js → chunk-5K2SOCOX.js} +3 -3
- package/dist/{chunk-T6XRYT6Q.js.map → chunk-5K2SOCOX.js.map} +1 -1
- package/dist/{chunk-VT4IMHGE.js → chunk-5TABQJDW.js} +4 -4
- package/dist/chunk-5TABQJDW.js.map +1 -0
- package/dist/{chunk-4GVOOXYD.js → chunk-6ABGMOE2.js} +5 -5
- package/dist/chunk-6ABGMOE2.js.map +1 -0
- package/dist/{chunk-Q43KJP5A.js → chunk-6F5NWXZF.js} +7 -7
- package/dist/{chunk-Q43KJP5A.js.map → chunk-6F5NWXZF.js.map} +1 -1
- package/dist/{chunk-4RSHPKHB.js → chunk-6KMRMXR6.js} +3 -3
- package/dist/{chunk-4RSHPKHB.js.map → chunk-6KMRMXR6.js.map} +1 -1
- package/dist/{chunk-7J5OM4ZD.js → chunk-7CMOCWFX.js} +4 -4
- package/dist/{chunk-7J5OM4ZD.js.map → chunk-7CMOCWFX.js.map} +1 -1
- package/dist/{chunk-G7PBPX3K.js → chunk-7VGF6ZVE.js} +4 -4
- package/dist/{chunk-G7PBPX3K.js.map → chunk-7VGF6ZVE.js.map} +1 -1
- package/dist/{chunk-E2TI5V67.js → chunk-A4O3USMA.js} +3 -3
- package/dist/{chunk-E2TI5V67.js.map → chunk-A4O3USMA.js.map} +1 -1
- package/dist/{chunk-UPK5B2FL.js → chunk-AKRVZ2YW.js} +6 -6
- package/dist/chunk-AKRVZ2YW.js.map +1 -0
- package/dist/{chunk-VBJ26PZJ.js → chunk-AP3T3KMY.js} +3 -3
- package/dist/{chunk-VBJ26PZJ.js.map → chunk-AP3T3KMY.js.map} +1 -1
- package/dist/{chunk-X3AXEE3S.js → chunk-AR7K7Y4L.js} +3 -3
- package/dist/{chunk-X3AXEE3S.js.map → chunk-AR7K7Y4L.js.map} +1 -1
- package/dist/{chunk-WKWLKGNI.js → chunk-ARYBNQNS.js} +4 -4
- package/dist/chunk-ARYBNQNS.js.map +1 -0
- package/dist/{chunk-P27ERD6W.js → chunk-B2OCNHUW.js} +8 -8
- package/dist/{chunk-P27ERD6W.js.map → chunk-B2OCNHUW.js.map} +1 -1
- package/dist/{chunk-3NLWCX2F.js → chunk-DI3AISAZ.js} +3 -3
- package/dist/{chunk-3NLWCX2F.js.map → chunk-DI3AISAZ.js.map} +1 -1
- package/dist/{chunk-W3JVNX35.js → chunk-DSCLJ3GK.js} +4 -4
- package/dist/{chunk-W3JVNX35.js.map → chunk-DSCLJ3GK.js.map} +1 -1
- package/dist/{chunk-3KOLK3OB.js → chunk-EC5YEK3C.js} +3 -3
- package/dist/{chunk-3KOLK3OB.js.map → chunk-EC5YEK3C.js.map} +1 -1
- package/dist/{chunk-YUHPTV2A.js → chunk-EDSDAX56.js} +3 -3
- package/dist/{chunk-YUHPTV2A.js.map → chunk-EDSDAX56.js.map} +1 -1
- package/dist/{chunk-IRIIK3BU.js → chunk-F4EX3622.js} +10 -10
- package/dist/chunk-F4EX3622.js.map +1 -0
- package/dist/{chunk-XYYOV5GW.js → chunk-F5X2BBGU.js} +4 -4
- package/dist/{chunk-XYYOV5GW.js.map → chunk-F5X2BBGU.js.map} +1 -1
- package/dist/{chunk-BS5XDYOE.js → chunk-FLERVSKG.js} +5 -5
- package/dist/{chunk-BS5XDYOE.js.map → chunk-FLERVSKG.js.map} +1 -1
- package/dist/{chunk-TAZPML2P.js → chunk-G2CMEHW6.js} +3 -3
- package/dist/{chunk-TAZPML2P.js.map → chunk-G2CMEHW6.js.map} +1 -1
- package/dist/{chunk-TQBUBD3E.js → chunk-H7JHFBFD.js} +3 -3
- package/dist/{chunk-TQBUBD3E.js.map → chunk-H7JHFBFD.js.map} +1 -1
- package/dist/{chunk-Y4RKKQMB.js → chunk-HA5YVDHW.js} +3 -3
- package/dist/chunk-HA5YVDHW.js.map +1 -0
- package/dist/{chunk-ZKK7L7H7.js → chunk-HP7LEQJR.js} +3 -3
- package/dist/{chunk-ZKK7L7H7.js.map → chunk-HP7LEQJR.js.map} +1 -1
- package/dist/{chunk-W7S7GPU5.js → chunk-HV2ZZXFN.js} +4 -4
- package/dist/{chunk-W7S7GPU5.js.map → chunk-HV2ZZXFN.js.map} +1 -1
- package/dist/{chunk-K45MMHLA.js → chunk-HVFACGNK.js} +4 -4
- package/dist/{chunk-K45MMHLA.js.map → chunk-HVFACGNK.js.map} +1 -1
- package/dist/{chunk-R3HUGCGR.js → chunk-HZ47LQFJ.js} +4 -4
- package/dist/{chunk-R3HUGCGR.js.map → chunk-HZ47LQFJ.js.map} +1 -1
- package/dist/{chunk-4KOJTZVU.js → chunk-IA24GUNV.js} +25 -25
- package/dist/chunk-IA24GUNV.js.map +1 -0
- package/dist/{chunk-D6TH3EGA.js → chunk-IQKKPOI7.js} +4 -4
- package/dist/{chunk-D6TH3EGA.js.map → chunk-IQKKPOI7.js.map} +1 -1
- package/dist/{chunk-WXBC3D2N.js → chunk-IRFAIJLV.js} +4 -4
- package/dist/{chunk-WXBC3D2N.js.map → chunk-IRFAIJLV.js.map} +1 -1
- package/dist/{chunk-SXPBKGLT.js → chunk-J62NPPDO.js} +3 -3
- package/dist/{chunk-SXPBKGLT.js.map → chunk-J62NPPDO.js.map} +1 -1
- package/dist/{chunk-TNDW52VZ.js → chunk-JDG5A44W.js} +20 -13
- package/dist/chunk-JDG5A44W.js.map +1 -0
- package/dist/{chunk-Z4KW5VW6.js → chunk-JRVUEOKT.js} +5 -5
- package/dist/{chunk-Z4KW5VW6.js.map → chunk-JRVUEOKT.js.map} +1 -1
- package/dist/{chunk-NXQ25PKF.js → chunk-K43MPWTO.js} +7 -7
- package/dist/chunk-K43MPWTO.js.map +1 -0
- package/dist/{chunk-2ROFZG3A.js → chunk-KA7747GR.js} +3 -3
- package/dist/{chunk-2ROFZG3A.js.map → chunk-KA7747GR.js.map} +1 -1
- package/dist/{chunk-OBRJXVWO.js → chunk-KYURFRCH.js} +4 -4
- package/dist/{chunk-OBRJXVWO.js.map → chunk-KYURFRCH.js.map} +1 -1
- package/dist/{chunk-EYSTEGV5.js → chunk-LR56MGWT.js} +7 -7
- package/dist/{chunk-EYSTEGV5.js.map → chunk-LR56MGWT.js.map} +1 -1
- package/dist/{chunk-6ZAMTPGN.js → chunk-M6VBDPNQ.js} +3 -3
- package/dist/{chunk-6ZAMTPGN.js.map → chunk-M6VBDPNQ.js.map} +1 -1
- package/dist/{chunk-JPA2VQRW.js → chunk-MAM5PTRV.js} +3 -3
- package/dist/{chunk-JPA2VQRW.js.map → chunk-MAM5PTRV.js.map} +1 -1
- package/dist/{chunk-3L5G7VI2.js → chunk-MAM6VUKD.js} +3 -3
- package/dist/chunk-MAM6VUKD.js.map +1 -0
- package/dist/{chunk-LLI3JFJL.js → chunk-MLSIZ6JU.js} +4 -4
- package/dist/{chunk-LLI3JFJL.js.map → chunk-MLSIZ6JU.js.map} +1 -1
- package/dist/{chunk-U2R47SPY.js → chunk-NULX3RRN.js} +4 -4
- package/dist/{chunk-U2R47SPY.js.map → chunk-NULX3RRN.js.map} +1 -1
- package/dist/{chunk-GL56KIFL.js → chunk-OG3M4CMJ.js} +3 -3
- package/dist/{chunk-GL56KIFL.js.map → chunk-OG3M4CMJ.js.map} +1 -1
- package/dist/{chunk-7EGN7IGY.js → chunk-OR3NPCY2.js} +3 -3
- package/dist/{chunk-7EGN7IGY.js.map → chunk-OR3NPCY2.js.map} +1 -1
- package/dist/{chunk-5I7AXWJU.js → chunk-PGRMKSVA.js} +4 -4
- package/dist/{chunk-5I7AXWJU.js.map → chunk-PGRMKSVA.js.map} +1 -1
- package/dist/{chunk-VZZ3HP7G.js → chunk-PM344VOQ.js} +3 -3
- package/dist/{chunk-VZZ3HP7G.js.map → chunk-PM344VOQ.js.map} +1 -1
- package/dist/{chunk-46ESMCEQ.js → chunk-QBLU7J34.js} +5 -5
- package/dist/chunk-QBLU7J34.js.map +1 -0
- package/dist/{chunk-U74PNG4S.js → chunk-SMVH56FQ.js} +3 -3
- package/dist/{chunk-U74PNG4S.js.map → chunk-SMVH56FQ.js.map} +1 -1
- package/dist/{chunk-DYDXGWH2.js → chunk-T3LWBCVR.js} +4 -4
- package/dist/chunk-T3LWBCVR.js.map +1 -0
- package/dist/{chunk-ZP4HYVDG.js → chunk-TA4HCLP3.js} +3 -3
- package/dist/{chunk-ZP4HYVDG.js.map → chunk-TA4HCLP3.js.map} +1 -1
- package/dist/{chunk-7HT32DZG.js → chunk-TGLALXPU.js} +3 -3
- package/dist/{chunk-7HT32DZG.js.map → chunk-TGLALXPU.js.map} +1 -1
- package/dist/{chunk-5GE3BQA7.js → chunk-USPITOG4.js} +5 -5
- package/dist/chunk-USPITOG4.js.map +1 -0
- package/dist/{chunk-XLTSCY22.js → chunk-UYPYAOET.js} +4 -4
- package/dist/chunk-UYPYAOET.js.map +1 -0
- package/dist/{chunk-P7D6S6GX.js → chunk-V7O4X3AE.js} +38 -4
- package/dist/chunk-V7O4X3AE.js.map +1 -0
- package/dist/{chunk-2YSZPUQZ.js → chunk-VTDSGJ4R.js} +3 -3
- package/dist/{chunk-2YSZPUQZ.js.map → chunk-VTDSGJ4R.js.map} +1 -1
- package/dist/{chunk-4Y72SPNL.js → chunk-VUHJTTPV.js} +4 -4
- package/dist/chunk-VUHJTTPV.js.map +1 -0
- package/dist/{chunk-VLDAHAG6.js → chunk-VV6QE3M2.js} +4 -4
- package/dist/{chunk-VLDAHAG6.js.map → chunk-VV6QE3M2.js.map} +1 -1
- package/dist/{chunk-H5N3VPBG.js → chunk-WBERMEN7.js} +3 -3
- package/dist/{chunk-H5N3VPBG.js.map → chunk-WBERMEN7.js.map} +1 -1
- package/dist/{chunk-OXDWUKGP.js → chunk-WCMRVCIM.js} +4 -4
- package/dist/chunk-WCMRVCIM.js.map +1 -0
- package/dist/{chunk-IFHF4UES.js → chunk-WQI2USN7.js} +11 -11
- package/dist/chunk-WQI2USN7.js.map +1 -0
- package/dist/{chunk-CKD4UBV6.js → chunk-WVFQKBDB.js} +3 -3
- package/dist/{chunk-CKD4UBV6.js.map → chunk-WVFQKBDB.js.map} +1 -1
- package/dist/{chunk-3NSIUZGP.js → chunk-WZ2J4ALB.js} +3 -3
- package/dist/{chunk-3NSIUZGP.js.map → chunk-WZ2J4ALB.js.map} +1 -1
- package/dist/{chunk-7TF5PVEU.js → chunk-X5XP5QVO.js} +5 -5
- package/dist/chunk-X5XP5QVO.js.map +1 -0
- package/dist/{chunk-7Y2UQMX6.js → chunk-XKO6G5H2.js} +36 -36
- package/dist/chunk-XKO6G5H2.js.map +1 -0
- package/dist/{chunk-SUU3HNOX.js → chunk-XORDGKZI.js} +4 -4
- package/dist/{chunk-SUU3HNOX.js.map → chunk-XORDGKZI.js.map} +1 -1
- package/dist/{chunk-VAVE4ZJF.js → chunk-YGLD22TU.js} +3 -3
- package/dist/chunk-YGLD22TU.js.map +1 -0
- package/dist/{chunk-XOGMDABS.js → chunk-ZHUW6UYD.js} +8 -8
- package/dist/chunk-ZHUW6UYD.js.map +1 -0
- package/dist/{chunk-PWCMCMDN.js → chunk-ZMUUEXVD.js} +3 -3
- package/dist/{chunk-PWCMCMDN.js.map → chunk-ZMUUEXVD.js.map} +1 -1
- package/dist/components/advanced/Calendar/index.js +5 -5
- package/dist/components/advanced/EventCalendar/index.js +5 -5
- package/dist/components/advanced/FilterBuilder/index.js +7 -7
- package/dist/components/advanced/MarkdownEditor/index.js +2 -2
- package/dist/components/advanced/ReportBuilder/index.js +4 -4
- package/dist/components/advanced/RichTextEditor/index.js +2 -2
- package/dist/components/advanced/index.js +16 -16
- package/dist/components/data-display/Callout/index.js +1 -1
- package/dist/components/data-display/Carousel/index.js +5 -5
- package/dist/components/data-display/ChartCard/index.js +2 -2
- package/dist/components/data-display/DataTable/FilterBuilder/index.js +7 -7
- package/dist/components/data-display/DataTable/index.js +10 -10
- package/dist/components/data-display/ImageGallery/index.js +6 -6
- package/dist/components/data-display/Item/index.js +2 -2
- package/dist/components/data-display/KPICard/index.js +3 -3
- package/dist/components/data-display/List/index.js +2 -2
- package/dist/components/data-display/SingleStat/index.js +1 -1
- package/dist/components/data-display/index.js +31 -31
- package/dist/components/feedback/AlertDialog/index.js +5 -5
- package/dist/components/feedback/ConfirmModal/index.js +6 -6
- package/dist/components/feedback/Modal/index.js +1 -1
- package/dist/components/feedback/UpdatesWidget/index.js +1 -1
- package/dist/components/feedback/index.js +10 -10
- package/dist/components/forms/ColorPicker/index.js +1 -1
- package/dist/components/forms/Combobox/index.js +1 -1
- package/dist/components/forms/DatePicker/index.js +6 -6
- package/dist/components/forms/DateRangePicker/index.js +6 -6
- package/dist/components/forms/EmailInput/index.js +3 -3
- package/dist/components/forms/Field/index.js +3 -3
- package/dist/components/forms/Form/index.js +2 -2
- package/dist/components/forms/InputGroup/index.js +8 -8
- package/dist/components/forms/InputOTPField/index.js +4 -4
- package/dist/components/forms/NativeSelect/index.js +1 -1
- package/dist/components/forms/NumberInput/index.js +2 -2
- package/dist/components/forms/PasswordInput/index.js +3 -3
- package/dist/components/forms/PaymentInput/index.js +1 -1
- package/dist/components/forms/PhoneInput/index.js +1 -1
- package/dist/components/forms/RadioButton/index.js +1 -1
- package/dist/components/forms/SearchInput/index.js +3 -3
- package/dist/components/forms/Slider/index.js +1 -1
- package/dist/components/forms/TagsInput/index.js +2 -2
- package/dist/components/forms/TextInput/index.js +2 -2
- package/dist/components/forms/Textarea/index.js +1 -1
- package/dist/components/forms/TextareaField/index.js +5 -5
- package/dist/components/forms/URLInput/index.js +3 -3
- package/dist/components/forms/index.js +33 -33
- package/dist/components/index.js +132 -132
- package/dist/components/layout/Card/index.js +1 -1
- package/dist/components/layout/Section/index.js +1 -1
- package/dist/components/layout/index.js +6 -6
- package/dist/components/navigation/AccountSwitch/index.js +3 -3
- package/dist/components/navigation/ContextMenu/index.js +1 -1
- package/dist/components/navigation/DropdownMenu/index.js +1 -1
- package/dist/components/navigation/FileTree/index.js +1 -1
- package/dist/components/navigation/Menu/index.js +1 -1
- package/dist/components/navigation/Menubar/index.js +1 -1
- package/dist/components/navigation/Navbar/index.js +1 -1
- package/dist/components/navigation/Pagination/index.js +5 -5
- package/dist/components/navigation/Sidebar/index.js +7 -7
- package/dist/components/navigation/Toolbar/index.js +1 -1
- package/dist/components/navigation/index.js +20 -20
- package/dist/components/primitives/Badge/index.js +1 -1
- package/dist/components/primitives/Button/index.js +4 -4
- package/dist/components/primitives/ButtonGroup/index.js +2 -2
- package/dist/components/primitives/ConfirmButton/index.js +6 -6
- package/dist/components/primitives/Divider/index.js +1 -1
- package/dist/components/primitives/FolderStack/index.js +1 -1
- package/dist/components/primitives/Image/index.js +1 -1
- package/dist/components/primitives/Label/index.js +1 -1
- package/dist/components/primitives/SplitButton/index.js +2 -2
- package/dist/components/primitives/StatusIndicator/index.js +1 -1
- package/dist/components/primitives/Tag/index.js +1 -1
- package/dist/components/primitives/Thumbnail/index.js +2 -2
- package/dist/components/primitives/index.js +19 -19
- package/dist/components/workflow/ApprovalFlow/index.js +5 -5
- package/dist/components/workflow/CommentSystem/index.js +6 -6
- package/dist/components/workflow/Dashboard/index.js +5 -5
- package/dist/components/workflow/DashboardBuilder/index.js +8 -8
- package/dist/components/workflow/KanbanBoard/index.js +5 -5
- package/dist/components/workflow/ReportGenerator/index.js +6 -6
- package/dist/components/workflow/Stepper/index.js +1 -1
- package/dist/components/workflow/TaskStatus/index.js +2 -2
- package/dist/components/workflow/Wizard/index.js +6 -6
- package/dist/components/workflow/index.js +19 -19
- package/dist/index.d.ts +8 -1
- package/dist/index.js +132 -132
- package/dist/styles.css +27 -703
- package/package.json +2 -2
- package/dist/chunk-3L5G7VI2.js.map +0 -1
- package/dist/chunk-46ESMCEQ.js.map +0 -1
- package/dist/chunk-4GVOOXYD.js.map +0 -1
- package/dist/chunk-4KOJTZVU.js.map +0 -1
- package/dist/chunk-4Y72SPNL.js.map +0 -1
- package/dist/chunk-5GE3BQA7.js.map +0 -1
- package/dist/chunk-66TBTTZO.js.map +0 -1
- package/dist/chunk-7TF5PVEU.js.map +0 -1
- package/dist/chunk-7Y2UQMX6.js.map +0 -1
- package/dist/chunk-DYDXGWH2.js.map +0 -1
- package/dist/chunk-IFHF4UES.js.map +0 -1
- package/dist/chunk-IRIIK3BU.js.map +0 -1
- package/dist/chunk-NXQ25PKF.js.map +0 -1
- package/dist/chunk-OXDWUKGP.js.map +0 -1
- package/dist/chunk-P7D6S6GX.js.map +0 -1
- package/dist/chunk-TNDW52VZ.js.map +0 -1
- package/dist/chunk-U6EOAIPK.js.map +0 -1
- package/dist/chunk-UPK5B2FL.js.map +0 -1
- package/dist/chunk-VAVE4ZJF.js.map +0 -1
- package/dist/chunk-VT4IMHGE.js.map +0 -1
- package/dist/chunk-WKWLKGNI.js.map +0 -1
- package/dist/chunk-XLTSCY22.js.map +0 -1
- package/dist/chunk-XOGMDABS.js.map +0 -1
- package/dist/chunk-Y4RKKQMB.js.map +0 -1
|
@@ -54,9 +54,9 @@ var badgeVariants = cva(
|
|
|
54
54
|
muted: ""
|
|
55
55
|
},
|
|
56
56
|
size: {
|
|
57
|
-
sm: "h-[var(--badge-size-sm-h)] px-[var(--badge-size-sm-px)] text-[length:var(--badge-size-sm-text)] [&_svg]:size-3",
|
|
58
|
-
default: "h-[var(--badge-size-md-h)] px-[var(--badge-size-md-px)] text-[length:var(--badge-size-md-text)] [&_svg]:size-3.5",
|
|
59
|
-
lg: "h-[var(--badge-size-lg-h)] px-[var(--badge-size-lg-px)] text-[length:var(--badge-size-lg-text)] [&_svg]:size-4"
|
|
57
|
+
sm: "h-[var(--badge-size-sm-h)] px-[var(--badge-size-sm-px)] text-[length:var(--badge-size-sm-text)] leading-[var(--badge-line-height-sm)] [&_svg]:size-3",
|
|
58
|
+
default: "h-[var(--badge-size-md-h)] px-[var(--badge-size-md-px)] text-[length:var(--badge-size-md-text)] leading-[var(--badge-line-height-md)] [&_svg]:size-3.5",
|
|
59
|
+
lg: "h-[var(--badge-size-lg-h)] px-[var(--badge-size-lg-px)] text-[length:var(--badge-size-lg-text)] leading-[var(--badge-line-height-lg)] [&_svg]:size-4"
|
|
60
60
|
}
|
|
61
61
|
},
|
|
62
62
|
compoundVariants: [
|
|
@@ -300,5 +300,5 @@ function Badge({
|
|
|
300
300
|
}
|
|
301
301
|
|
|
302
302
|
export { Badge, badgeVariants };
|
|
303
|
-
//# sourceMappingURL=chunk-
|
|
304
|
-
//# sourceMappingURL=chunk-
|
|
303
|
+
//# sourceMappingURL=chunk-6ABGMOE2.js.map
|
|
304
|
+
//# sourceMappingURL=chunk-6ABGMOE2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/Badge/Badge.tsx"],"names":[],"mappings":"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","file":"chunk-6ABGMOE2.js","sourcesContent":["import type { BadgeAvatarProps, BadgeColor, BadgeProps } from \"./Badge.types\"\n\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../../feedback/Tooltip\"\n\n/* eslint-disable sonarjs/no-duplicate-string -- Badge variants require repeated color class patterns */\n\n// Legacy variant mapping for backwards compatibility\nconst legacyVariantMap: Record<string, { color: string; type: string; }> = {\n default: { type: \"pill-color\", color: \"primary\" },\n secondary: { type: \"pill-color\", color: \"muted\" },\n destructive: { type: \"pill-color\", color: \"destructive\" },\n outline: { type: \"pill-outline\", color: \"muted\" },\n}\n\n// Dot color mapping\nconst dotColorMap: Record<string, string> = {\n primary: \"bg-primary-foreground\",\n secondary: \"bg-secondary-foreground\",\n destructive: \"bg-white\",\n warning: \"bg-warning-foreground\",\n success: \"bg-success-foreground\",\n info: \"bg-white\",\n tip: \"bg-white\",\n muted: \"bg-muted-foreground\",\n}\n\n// Dismiss button color mapping\nconst dismissColorMap: Record<string, string> = {\n primary: \"text-primary-foreground hover:bg-primary-foreground/20\",\n secondary: \"text-secondary-foreground hover:bg-secondary-foreground/20\",\n destructive: \"text-white hover:bg-white/20\",\n warning: \"text-warning-foreground hover:bg-warning-foreground/20\",\n success: \"text-success-foreground hover:bg-success-foreground/20\",\n info: \"text-white hover:bg-white/20\",\n tip: \"text-white hover:bg-white/20\",\n muted: \"text-muted-foreground hover:bg-muted-foreground/20\",\n}\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center font-medium w-fit whitespace-nowrap shrink-0 gap-1.5 transition-[color,background-color,box-shadow,filter] overflow-hidden border focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none\",\n {\n variants: {\n type: {\n \"pill-color\": \"rounded-[var(--badge-radius-pill)] border-transparent\",\n \"pill-outline\": \"rounded-[var(--badge-radius-pill)] bg-transparent\",\n \"badge-color\": \"rounded-[var(--badge-radius-default)] border-transparent\",\n \"badge-outline\": \"rounded-[var(--badge-radius-default)] bg-transparent\",\n \"badge-modern\": \"rounded-[var(--badge-radius-default)] border-transparent border-l-[3px] pr-2.5 pl-2 shadow-xs\",\n },\n color: {\n primary: \"\",\n secondary: \"\",\n destructive: \"\",\n warning: \"\",\n success: \"\",\n info: \"\",\n tip: \"\",\n muted: \"\",\n },\n size: {\n sm: \"h-[var(--badge-size-sm-h)] px-[var(--badge-size-sm-px)] text-[length:var(--badge-size-sm-text)] leading-[var(--badge-line-height-sm)] [&_svg]:size-3\",\n default: \"h-[var(--badge-size-md-h)] px-[var(--badge-size-md-px)] text-[length:var(--badge-size-md-text)] leading-[var(--badge-line-height-md)] [&_svg]:size-3.5\",\n lg: \"h-[var(--badge-size-lg-h)] px-[var(--badge-size-lg-px)] text-[length:var(--badge-size-lg-text)] leading-[var(--badge-line-height-lg)] [&_svg]:size-4\",\n },\n },\n compoundVariants: [\n // ========================================\n // PILL-COLOR VARIANTS\n // ========================================\n { type: \"pill-color\", color: \"primary\", className: \"bg-[color:var(--badge-color-primary-bg)] text-[color:var(--badge-color-primary-fg)]\" },\n { type: \"pill-color\", color: \"secondary\", className: \"bg-[color:var(--badge-color-secondary-bg)] text-[color:var(--badge-color-secondary-fg)]\" },\n { type: \"pill-color\", color: \"destructive\", className: \"bg-[color:var(--badge-color-destructive-bg)] text-[color:var(--badge-color-destructive-fg)]\" },\n { type: \"pill-color\", color: \"warning\", className: \"bg-[color:var(--badge-color-warning-bg)] text-[color:var(--badge-color-warning-fg)]\" },\n { type: \"pill-color\", color: \"success\", className: \"bg-[color:var(--badge-color-success-bg)] text-[color:var(--badge-color-success-fg)]\" },\n { type: \"pill-color\", color: \"info\", className: \"bg-info text-info-foreground\" },\n { type: \"pill-color\", color: \"tip\", className: \"bg-tip text-white\" },\n { type: \"pill-color\", color: \"muted\", className: \"bg-[color:var(--badge-color-secondary-bg)] text-[color:var(--badge-color-secondary-fg)]\" },\n\n // ========================================\n // PILL-OUTLINE VARIANTS\n // ========================================\n { type: \"pill-outline\", color: \"primary\", className: \"border-primary text-primary\" },\n { type: \"pill-outline\", color: \"secondary\", className: \"border-secondary text-secondary\" },\n { type: \"pill-outline\", color: \"destructive\", className: \"border-destructive text-destructive\" },\n { type: \"pill-outline\", color: \"warning\", className: \"border-warning text-warning\" },\n { type: \"pill-outline\", color: \"success\", className: \"border-success text-success\" },\n { type: \"pill-outline\", color: \"info\", className: \"border-info text-info\" },\n { type: \"pill-outline\", color: \"tip\", className: \"border-tip text-tip\" },\n { type: \"pill-outline\", color: \"muted\", className: \"border-border text-muted-foreground\" },\n\n // ========================================\n // BADGE-COLOR VARIANTS\n // ========================================\n { type: \"badge-color\", color: \"primary\", className: \"bg-primary text-primary-foreground\" },\n { type: \"badge-color\", color: \"secondary\", className: \"bg-[color:var(--badge-color-secondary-bg)] text-[color:var(--badge-color-secondary-fg)]\" },\n { type: \"badge-color\", color: \"destructive\", className: \"bg-destructive text-white\" },\n { type: \"badge-color\", color: \"warning\", className: \"bg-[color:var(--badge-color-warning-bg)] text-[color:var(--badge-color-warning-fg)]\" },\n { type: \"badge-color\", color: \"success\", className: \"bg-[color:var(--badge-color-success-bg)] text-[color:var(--badge-color-success-fg)]\" },\n { type: \"badge-color\", color: \"info\", className: \"bg-info text-info-foreground\" },\n { type: \"badge-color\", color: \"tip\", className: \"bg-tip text-white\" },\n { type: \"badge-color\", color: \"muted\", className: \"bg-muted text-muted-foreground\" },\n\n // ========================================\n // BADGE-OUTLINE VARIANTS\n // ========================================\n { type: \"badge-outline\", color: \"primary\", className: \"border-primary text-primary\" },\n { type: \"badge-outline\", color: \"secondary\", className: \"border-secondary text-secondary\" },\n { type: \"badge-outline\", color: \"destructive\", className: \"border-destructive text-destructive\" },\n { type: \"badge-outline\", color: \"warning\", className: \"border-warning text-warning\" },\n { type: \"badge-outline\", color: \"success\", className: \"border-success text-success\" },\n { type: \"badge-outline\", color: \"info\", className: \"border-info text-info\" },\n { type: \"badge-outline\", color: \"tip\", className: \"border-tip text-tip\" },\n { type: \"badge-outline\", color: \"muted\", className: \"border-border text-muted-foreground\" },\n\n // ========================================\n // BADGE-MODERN VARIANTS (with left accent)\n // ========================================\n { type: \"badge-modern\", color: \"primary\", className: \"bg-primary/10 text-primary border-l-primary\" },\n { type: \"badge-modern\", color: \"secondary\", className: \"bg-secondary/10 text-secondary border-l-secondary\" },\n { type: \"badge-modern\", color: \"destructive\", className: \"bg-destructive/10 text-destructive border-l-destructive\" },\n { type: \"badge-modern\", color: \"warning\", className: \"bg-warning/10 text-warning border-l-warning\" },\n { type: \"badge-modern\", color: \"success\", className: \"bg-success/10 text-success border-l-success\" },\n { type: \"badge-modern\", color: \"info\", className: \"bg-info/10 text-info border-l-info\" },\n { type: \"badge-modern\", color: \"tip\", className: \"bg-tip/10 text-tip border-l-tip\" },\n { type: \"badge-modern\", color: \"muted\", className: \"bg-muted text-muted-foreground border-l-muted-foreground\" },\n ],\n defaultVariants: {\n type: \"pill-color\",\n color: \"primary\",\n size: \"default\",\n },\n }\n)\n\n// Internal dot component\nfunction BadgeDot({ color }: { color: BadgeColor }) {\n return (\n <span\n className={cn(\"size-1.5 rounded-full shrink-0\", dotColorMap[color] ?? dotColorMap[\"primary\"])}\n data-slot=\"badge-dot\"\n />\n )\n}\n\n// Internal dismiss button component\nfunction BadgeDismiss({ onClick, color, type, dismissLabel = \"Dismiss\" }: { color: BadgeColor; dismissLabel?: string; onClick: () => void; type: string; }) {\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation()\n onClick()\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n e.stopPropagation()\n onClick()\n }\n }\n\n // Adapt shape based on badge type: rounded for pills, square for badges\n const isPill = type === \"pill-color\" || type === \"pill-outline\"\n const shapeClass = isPill ? \"rounded-full\" : \"rounded-sm\"\n\n return (\n <button\n className={cn(\n \"size-4 -mr-1 inline-flex items-center justify-center shrink-0 transition-colors cursor-pointer\",\n shapeClass,\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n dismissColorMap[color] ?? dismissColorMap[\"primary\"]\n )}\n aria-label={dismissLabel}\n data-slot=\"badge-dismiss\"\n type=\"button\"\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n <X className=\"size-3\" />\n </button>\n )\n}\n\n// Internal avatar component for badge\nfunction BadgeAvatar({ src, fallback, alt }: BadgeAvatarProps) {\n const [imageError, setImageError] = React.useState(false)\n\n // Get initials from fallback text\n const initials = fallback\n .split(\" \")\n .map((word) => word[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n\n return (\n <span\n className=\"size-4 -ml-1 rounded-full shrink-0 inline-flex items-center justify-center overflow-hidden bg-muted text-xs font-medium\"\n data-slot=\"badge-avatar\"\n >\n {src && !imageError ? (\n <img\n alt={alt ?? fallback}\n className=\"size-full object-cover\"\n src={src}\n onError={() => { setImageError(true); }}\n />\n ) : (\n <span aria-label={alt ?? fallback}>{initials}</span>\n )}\n </span>\n )\n}\n\n// Internal country flag component\nfunction BadgeCountry({ code }: { code: string }) {\n // Convert country code to flag emoji using regional indicator symbols\n const countryToFlag = (countryCode: string) => {\n // eslint-disable-next-line unicorn/prefer-spread -- Array.from handles Unicode correctly for country codes\n const codePoints = Array.from(countryCode.toUpperCase()).map(\n (char) => 127397 + char.charCodeAt(0)\n )\n return String.fromCodePoint(...codePoints)\n }\n\n return (\n <span\n aria-label={`Flag of ${code}`}\n className=\"text-base -ml-0.5 shrink-0 leading-none\"\n data-slot=\"badge-country\"\n role=\"img\"\n >\n {countryToFlag(code)}\n </span>\n )\n}\n\nfunction Badge({\n className,\n type,\n color,\n size,\n disabled,\n dot,\n icon,\n leadingIcon,\n trailingIcon,\n country,\n avatar,\n iconOnly,\n onDismiss,\n dismissLabel,\n interactive,\n tooltip,\n // eslint-disable-next-line @typescript-eslint/no-deprecated -- Intentionally supporting legacy variant for backwards compatibility\n variant,\n asChild = false,\n children,\n onClick,\n ...props\n}: BadgeProps) {\n // Resolve legacy variant to new props (new props take precedence)\n const legacyMapping = variant ? legacyVariantMap[variant] : null\n const resolvedType = (type ?? legacyMapping?.type ?? \"pill-color\") as VariantProps<typeof badgeVariants>[\"type\"]\n const resolvedColor = (color ?? legacyMapping?.color ?? \"primary\") as BadgeColor\n\n // Icon-only badges are square with no horizontal padding\n const iconOnlyClass = iconOnly\n ? \"px-0 aspect-square\"\n : \"\"\n\n const badgeClassName = cn(\n badgeVariants({ type: resolvedType, color: resolvedColor, size }),\n iconOnlyClass,\n Boolean(interactive ?? onClick) && \"cursor-pointer hover:brightness-90\",\n className\n )\n\n // Disabled is a real state (not just a Figma style): toggle data-disabled + aria-disabled\n const stateAttrs = {\n \"aria-disabled\": disabled ? true : undefined,\n \"data-disabled\": disabled ? true : undefined,\n }\n\n // When asChild is true, use Slot which requires exactly one child\n // dot and onDismiss features are not supported with asChild\n if (asChild) {\n return (\n <Slot className={badgeClassName} data-slot=\"badge\" {...stateAttrs} {...props}>\n {children}\n </Slot>\n )\n }\n\n // Resolve leading content\n const resolvedLeadingIcon = leadingIcon ?? icon\n\n // Render leading content (avatar, country, dot, or leading icon)\n const renderLeading = () => {\n if (avatar) return <BadgeAvatar {...avatar} />\n if (country) return <BadgeCountry code={country} />\n if (dot) return <BadgeDot color={resolvedColor} />\n if (resolvedLeadingIcon) return <span className=\"shrink-0\" data-slot=\"badge-leading-icon\">{resolvedLeadingIcon}</span>\n return null\n }\n\n // Render trailing content (trailing icon or dismiss)\n const renderTrailing = () => {\n if (onDismiss) return <BadgeDismiss color={resolvedColor} dismissLabel={dismissLabel} type={resolvedType ?? \"pill-color\"} onClick={onDismiss} />\n if (trailingIcon) return <span className=\"shrink-0\" data-slot=\"badge-trailing-icon\">{trailingIcon}</span>\n return null\n }\n\n // Helper to wrap element with tooltip if tooltip prop is provided\n const wrapWithTooltip = (element: React.ReactElement) => {\n if (!tooltip) return element\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n {element}\n </TooltipTrigger>\n <TooltipContent>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n )\n }\n\n // Icon-only variant: render only the icon, no children or other elements\n if (iconOnly) {\n return wrapWithTooltip(\n <span\n className={badgeClassName}\n data-slot=\"badge\"\n onClick={onClick}\n {...stateAttrs}\n {...props}\n >\n <span className=\"shrink-0\" data-slot=\"badge-icon-only\">{iconOnly}</span>\n </span>\n )\n }\n\n return wrapWithTooltip(\n <span\n className={badgeClassName}\n data-slot=\"badge\"\n onClick={onClick}\n {...stateAttrs}\n {...props}\n >\n {renderLeading()}\n {children}\n {renderTrailing()}\n </span>\n )\n}\n\n/* eslint-enable sonarjs/no-duplicate-string */\n\nexport { Badge, badgeVariants }\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Image } from './chunk-
|
|
1
|
+
import { Image } from './chunk-F4EX3622.js';
|
|
2
2
|
import { cn } from './chunk-HRNDJU7D.js';
|
|
3
3
|
import { cva } from 'class-variance-authority';
|
|
4
4
|
import { Check } from 'lucide-react';
|
|
@@ -131,7 +131,7 @@ function ThumbnailTag({
|
|
|
131
131
|
"span",
|
|
132
132
|
{
|
|
133
133
|
className: cn(
|
|
134
|
-
"absolute font-bold uppercase tracking-[0.04em] px-1.5 py-0.5 rounded text-[
|
|
134
|
+
"absolute font-bold uppercase tracking-[0.04em] px-1.5 py-0.5 rounded text-[length:var(--thumbnail-label-font-size)] leading-tight",
|
|
135
135
|
"bg-white/[0.88] text-neutral-900 dark:bg-black/[0.65] dark:text-neutral-50",
|
|
136
136
|
position === "bottom-left" && "bottom-1.5 left-1.5",
|
|
137
137
|
position === "bottom-right" && "bottom-1.5 right-1.5",
|
|
@@ -182,7 +182,7 @@ function ThumbnailBadge({
|
|
|
182
182
|
"span",
|
|
183
183
|
{
|
|
184
184
|
className: cn(
|
|
185
|
-
"absolute z-[2] text-[
|
|
185
|
+
"absolute z-[2] text-[length:var(--thumbnail-badge-font-size)] font-extrabold uppercase tracking-[0.06em]",
|
|
186
186
|
"px-1.5 py-0.5 rounded-xs",
|
|
187
187
|
"bg-[color:var(--brand-primary-500,theme(colors.emerald.400))] text-[color:var(--brand-primary-950,theme(colors.emerald.950))]",
|
|
188
188
|
position === "top-left" && "top-2 left-8",
|
|
@@ -206,7 +206,7 @@ function ThumbnailCheckbox({
|
|
|
206
206
|
"button",
|
|
207
207
|
{
|
|
208
208
|
className: cn(
|
|
209
|
-
"absolute z-[2] grid place-items-center
|
|
209
|
+
"absolute z-[2] grid place-items-center size-[var(--thumbnail-select-size)] rounded-sm cursor-pointer transition-[opacity,background-color,border-color]",
|
|
210
210
|
"border bg-white/[0.92] border-neutral-300",
|
|
211
211
|
position === "top-left" && "top-2 left-2",
|
|
212
212
|
position === "top-right" && "top-2 right-2",
|
|
@@ -245,7 +245,7 @@ function ThumbnailPin({
|
|
|
245
245
|
"button",
|
|
246
246
|
{
|
|
247
247
|
className: cn(
|
|
248
|
-
"absolute z-[2] grid place-items-center
|
|
248
|
+
"absolute z-[2] grid place-items-center size-[var(--thumbnail-action-size)] rounded-full cursor-pointer transition-opacity",
|
|
249
249
|
position === "top-left" && "top-1.5 left-1.5",
|
|
250
250
|
position === "top-right" && "top-1.5 right-1.5",
|
|
251
251
|
pinned ? "opacity-100 bg-white/95 text-[#eab308] dark:bg-black/55" : "opacity-0 bg-white/[0.82] text-neutral-500 dark:bg-black/45 dark:text-neutral-300 group-hover/thumbnail:opacity-100",
|
|
@@ -290,5 +290,5 @@ Thumbnail.Checkbox = ThumbnailCheckbox;
|
|
|
290
290
|
Thumbnail.Pin = ThumbnailPin;
|
|
291
291
|
|
|
292
292
|
export { Thumbnail, ThumbnailBadge, ThumbnailCheckbox, ThumbnailPin, ThumbnailPlayOverlay, ThumbnailTag, thumbnailVariants };
|
|
293
|
-
//# sourceMappingURL=chunk-
|
|
294
|
-
//# sourceMappingURL=chunk-
|
|
293
|
+
//# sourceMappingURL=chunk-6F5NWXZF.js.map
|
|
294
|
+
//# sourceMappingURL=chunk-6F5NWXZF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/primitives/Thumbnail/Thumbnail.tsx"],"names":[],"mappings":"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","file":"chunk-Q43KJP5A.js","sourcesContent":["\"use client\"\n\nimport type { Badge } from \"../Badge\"\nimport type { ThumbnailProps } from \"./Thumbnail.types\"\n\nimport { cva } from \"class-variance-authority\"\nimport { Check } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Image } from \"../Image\"\n\nconst thumbnailVariants = cva(\n \"relative inline-block overflow-hidden bg-[color:var(--thumbnail-root-bg)]\",\n {\n variants: {\n size: {\n xs: \"w-[var(--thumbnail-size-xs-width)]\",\n sm: \"w-[var(--thumbnail-size-sm-width)]\",\n default: \"w-[var(--thumbnail-size-default-width)]\",\n lg: \"w-[var(--thumbnail-size-lg-width)]\",\n xl: \"w-[var(--thumbnail-size-xl-width)]\",\n },\n aspectRatio: {\n square: \"aspect-square\",\n video: \"aspect-video\",\n wide: \"aspect-[4/3]\",\n },\n rounded: {\n none: \"rounded-[var(--thumbnail-rounded-none)]\",\n sm: \"rounded-[var(--thumbnail-rounded-sm)]\",\n default: \"rounded-[var(--thumbnail-rounded-default)]\",\n lg: \"rounded-[var(--thumbnail-rounded-lg)]\",\n full: \"rounded-[var(--thumbnail-rounded-full)]\",\n },\n },\n defaultVariants: {\n size: \"default\",\n aspectRatio: \"square\",\n rounded: \"default\",\n },\n }\n)\n\n/**\n * Thumbnail - A small preview component with `image` (loads src) or `tint` (colored tile) modes.\n *\n * Features:\n * - Two modes: `image` (legacy — loads `src`) and `tint` (renders a colored tile)\n * - Multiple size variants (xs, sm, default, lg, xl)\n * - Aspect ratio control (square, video, wide)\n * - Fallback content on error\n * - Placeholder during loading\n * - Click/select behavior for galleries\n * - Selected and disabled states\n * - Sub-components for overlays: Thumbnail.Tag, Thumbnail.PlayOverlay, Thumbnail.Badge, Thumbnail.Checkbox, Thumbnail.Pin\n *\n * @example\n * // Image mode (legacy, backward compatible)\n * <Thumbnail src=\"/photo.jpg\" alt=\"Photo preview\" />\n *\n * @example\n * // Tint mode for asset-type preview\n * <Thumbnail mode=\"tint\" tint=\"rgb(249 115 22 / 0.16)\">\n * <Thumbnail.Tag>JPG</Thumbnail.Tag>\n * <Thumbnail.PlayOverlay duration=\"0:15\" />\n * </Thumbnail>\n *\n * @example\n * // Selectable + pinnable card thumb\n * <Thumbnail mode=\"image\" src=\"...\" alt=\"hero\">\n * <Thumbnail.Tag>JPG</Thumbnail.Tag>\n * <Thumbnail.Checkbox checked={isSel} onChange={toggle} />\n * <Thumbnail.Pin pinned={isPinned} onToggle={togglePin} />\n * <Thumbnail.Badge color=\"success\">novo</Thumbnail.Badge>\n * </Thumbnail>\n */\nfunction Thumbnail({\n src,\n alt,\n size = \"default\",\n aspectRatio = \"square\",\n rounded = \"default\",\n mode = \"image\",\n tint,\n fallback,\n placeholder,\n onClick,\n selected = false,\n disabled = false,\n className,\n children,\n ...props\n}: ThumbnailProps) {\n const handleClick = React.useCallback(() => {\n if (!disabled && onClick) {\n onClick()\n }\n }, [disabled, onClick])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (disabled || !onClick) return\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault()\n onClick()\n }\n },\n [disabled, onClick]\n )\n\n const isInteractive = !!onClick\n\n return (\n <div\n className={cn(\n thumbnailVariants({ size, aspectRatio, rounded }),\n \"group/thumbnail\",\n // Interactive styles\n isInteractive && !disabled && \"cursor-pointer\",\n // Focus styles for interactive\n isInteractive && \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n // Selected state\n selected && \"ring-2 ring-primary ring-offset-2\",\n // Disabled state\n disabled && \"opacity-50 cursor-not-allowed pointer-events-none\",\n className\n )}\n aria-disabled={isInteractive && disabled ? true : undefined}\n aria-pressed={isInteractive ? selected : undefined}\n data-mode={mode}\n data-pinned={undefined}\n data-selected={selected || undefined}\n data-slot=\"thumbnail\"\n role={isInteractive ? \"button\" : undefined}\n tabIndex={isInteractive ? (disabled ? -1 : 0) : undefined}\n onClick={isInteractive ? handleClick : undefined}\n onKeyDown={isInteractive ? handleKeyDown : undefined}\n {...props}\n >\n {mode === \"image\" ? (\n <Image\n alt={alt ?? \"\"}\n className=\"size-full\"\n data-slot=\"thumbnail-image\"\n fallback={fallback}\n objectFit=\"cover\"\n placeholder={placeholder}\n src={src ?? \"\"}\n />\n ) : (\n <span\n aria-hidden=\"true\"\n className=\"absolute inset-0\"\n data-slot=\"thumbnail-tint\"\n style={{ backgroundColor: tint }}\n />\n )}\n {children}\n </div>\n )\n}\n\n/* ─────────────────────────────────────────────────────────────\n * Sub-components — overlays.\n * Each is absolute-positioned inside the Thumbnail container.\n * Hover-revealed affordances rely on the parent's group-hover state\n * via group-hover/group-data attributes (we set data-slot=\"thumbnail\"\n * as the parent group anchor).\n * ─────────────────────────────────────────────────────────────*/\n\ninterface ThumbnailTagProps extends React.ComponentProps<\"span\"> {\n position?: \"bottom-left\" | \"bottom-right\"\n}\n\nfunction ThumbnailTag({\n position = \"bottom-right\",\n className,\n ...props\n}: ThumbnailTagProps) {\n return (\n <span\n className={cn(\n \"absolute font-bold uppercase tracking-[0.04em] px-1.5 py-0.5 rounded text-[10px] leading-tight\",\n \"bg-white/[0.88] text-neutral-900 dark:bg-black/[0.65] dark:text-neutral-50\",\n position === \"bottom-left\" && \"bottom-1.5 left-1.5\",\n position === \"bottom-right\" && \"bottom-1.5 right-1.5\",\n className,\n )}\n data-position={position}\n data-slot=\"thumbnail-tag\"\n {...props}\n />\n )\n}\n\ninterface ThumbnailPlayOverlayProps {\n className?: string\n duration?: string\n size?: \"default\" | \"lg\" | \"sm\"\n}\n\nfunction ThumbnailPlayOverlay({\n duration,\n size = \"default\",\n className,\n}: ThumbnailPlayOverlayProps) {\n const iconSize = size === \"sm\" ? 24 : size === \"lg\" ? 48 : 36\n return (\n <>\n <span\n className={cn(\n \"absolute inset-0 grid place-items-center text-white/90 pointer-events-none\",\n \"[filter:drop-shadow(0_1px_2px_rgb(0_0_0/0.35))]\",\n className,\n )}\n aria-hidden=\"true\"\n data-slot=\"thumbnail-play-overlay\"\n >\n <svg fill=\"currentColor\" height={iconSize} viewBox=\"0 0 24 24\" width={iconSize}>\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n </span>\n {duration && (\n <span\n className=\"absolute bottom-1.5 left-1.5 px-1.5 py-0.5 rounded text-[10.5px] tabular-nums font-mono bg-black/55 text-white/95\"\n data-slot=\"thumbnail-duration\"\n >\n {duration}\n </span>\n )}\n </>\n )\n}\n\ninterface ThumbnailBadgeProps extends React.ComponentProps<typeof Badge> {\n position?: \"top-left\" | \"top-right\"\n}\n\nfunction ThumbnailBadge({\n position = \"top-left\",\n className,\n ...props\n}: ThumbnailBadgeProps) {\n // Use prototype's \"thumb-new\" exact styling when no `color` is overridden —\n // 9px font, 800 weight, uppercase, mint-on-mint-dark. Consumers can override\n // via `color` prop to get standard Badge variants.\n return (\n <span\n className={cn(\n \"absolute z-[2] text-[9px] font-extrabold uppercase tracking-[0.06em]\",\n \"px-1.5 py-0.5 rounded-xs\",\n \"bg-[color:var(--brand-primary-500,theme(colors.emerald.400))] text-[color:var(--brand-primary-950,theme(colors.emerald.950))]\",\n position === \"top-left\" && \"top-2 left-8\",\n position === \"top-right\" && \"top-2 right-2\",\n className,\n )}\n data-position={position}\n data-slot=\"thumbnail-badge\"\n {...(props as React.HTMLAttributes<HTMLSpanElement>)}\n />\n )\n}\n\ninterface ThumbnailCheckboxProps {\n \"aria-label\"?: string\n checked: boolean\n className?: string\n onChange: (\n checked: boolean,\n event: React.KeyboardEvent<HTMLButtonElement> | React.MouseEvent<HTMLButtonElement>,\n ) => void\n position?: \"top-left\" | \"top-right\"\n}\n\nfunction ThumbnailCheckbox({\n checked,\n onChange,\n position = \"top-left\",\n className,\n \"aria-label\": ariaLabel = \"Selecionar\",\n}: ThumbnailCheckboxProps) {\n return (\n <button\n className={cn(\n \"absolute z-[2] grid place-items-center w-[18px] h-[18px] rounded-sm cursor-pointer transition-[opacity,background-color,border-color]\",\n \"border bg-white/[0.92] border-neutral-300\",\n position === \"top-left\" && \"top-2 left-2\",\n position === \"top-right\" && \"top-2 right-2\",\n // Hover-revealed when not checked; sticky visible when checked\n checked\n ? \"opacity-100 bg-[color:var(--brand-primary-500)] border-[color:var(--brand-primary-500)] text-[color:var(--brand-primary-900)]\"\n : \"opacity-0 text-transparent group-hover/thumbnail:opacity-100\",\n className,\n )}\n aria-label={ariaLabel}\n aria-pressed={checked}\n data-checked={checked || undefined}\n data-slot=\"thumbnail-checkbox\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onChange(!checked, e)\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n e.stopPropagation()\n onChange(!checked, e)\n }\n }}\n >\n <Check size={11} strokeWidth={3} />\n </button>\n )\n}\n\ninterface ThumbnailPinProps {\n \"aria-label\"?: string\n className?: string\n onToggle: (\n pinned: boolean,\n event: React.KeyboardEvent<HTMLButtonElement> | React.MouseEvent<HTMLButtonElement>,\n ) => void\n pinned: boolean\n position?: \"top-left\" | \"top-right\"\n}\n\nfunction ThumbnailPin({\n pinned,\n onToggle,\n position = \"top-right\",\n className,\n \"aria-label\": ariaLabel = \"Fixar\",\n}: ThumbnailPinProps) {\n return (\n <button\n className={cn(\n \"absolute z-[2] grid place-items-center w-[22px] h-[22px] rounded-full cursor-pointer transition-opacity\",\n position === \"top-left\" && \"top-1.5 left-1.5\",\n position === \"top-right\" && \"top-1.5 right-1.5\",\n pinned\n ? \"opacity-100 bg-white/95 text-[#eab308] dark:bg-black/55\"\n : \"opacity-0 bg-white/[0.82] text-neutral-500 dark:bg-black/45 dark:text-neutral-300 group-hover/thumbnail:opacity-100\",\n className,\n )}\n aria-label={ariaLabel}\n aria-pressed={pinned}\n data-pinned={pinned || undefined}\n data-slot=\"thumbnail-pin\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onToggle(!pinned, e)\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n e.stopPropagation()\n onToggle(!pinned, e)\n }\n }}\n >\n <svg\n fill={pinned ? \"currentColor\" : \"none\"}\n height=\"11\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.6\"\n viewBox=\"0 0 16 16\"\n width=\"11\"\n >\n <path d=\"m8 1.5 1.95 4.18 4.55.5-3.4 3.13.94 4.5L8 11.5l-4.04 2.31.94-4.5L1.5 6.18l4.55-.5z\" />\n </svg>\n </button>\n )\n}\n\n// Attach sub-components for compound API: Thumbnail.Tag etc.\n// We also keep them as named exports so users can import directly.\nThumbnail.Tag = ThumbnailTag\nThumbnail.PlayOverlay = ThumbnailPlayOverlay\nThumbnail.Badge = ThumbnailBadge\nThumbnail.Checkbox = ThumbnailCheckbox\nThumbnail.Pin = ThumbnailPin\n\nexport {\n Thumbnail,\n ThumbnailBadge,\n ThumbnailCheckbox,\n ThumbnailPin,\n ThumbnailPlayOverlay,\n ThumbnailTag,\n thumbnailVariants,\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/Thumbnail/Thumbnail.tsx"],"names":[],"mappings":"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","file":"chunk-6F5NWXZF.js","sourcesContent":["\"use client\"\n\nimport type { Badge } from \"../Badge\"\nimport type { ThumbnailProps } from \"./Thumbnail.types\"\n\nimport { cva } from \"class-variance-authority\"\nimport { Check } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Image } from \"../Image\"\n\nconst thumbnailVariants = cva(\n \"relative inline-block overflow-hidden bg-[color:var(--thumbnail-root-bg)]\",\n {\n variants: {\n size: {\n xs: \"w-[var(--thumbnail-size-xs-width)]\",\n sm: \"w-[var(--thumbnail-size-sm-width)]\",\n default: \"w-[var(--thumbnail-size-default-width)]\",\n lg: \"w-[var(--thumbnail-size-lg-width)]\",\n xl: \"w-[var(--thumbnail-size-xl-width)]\",\n },\n aspectRatio: {\n square: \"aspect-square\",\n video: \"aspect-video\",\n wide: \"aspect-[4/3]\",\n },\n rounded: {\n none: \"rounded-[var(--thumbnail-rounded-none)]\",\n sm: \"rounded-[var(--thumbnail-rounded-sm)]\",\n default: \"rounded-[var(--thumbnail-rounded-default)]\",\n lg: \"rounded-[var(--thumbnail-rounded-lg)]\",\n full: \"rounded-[var(--thumbnail-rounded-full)]\",\n },\n },\n defaultVariants: {\n size: \"default\",\n aspectRatio: \"square\",\n rounded: \"default\",\n },\n }\n)\n\n/**\n * Thumbnail - A small preview component with `image` (loads src) or `tint` (colored tile) modes.\n *\n * Features:\n * - Two modes: `image` (legacy — loads `src`) and `tint` (renders a colored tile)\n * - Multiple size variants (xs, sm, default, lg, xl)\n * - Aspect ratio control (square, video, wide)\n * - Fallback content on error\n * - Placeholder during loading\n * - Click/select behavior for galleries\n * - Selected and disabled states\n * - Sub-components for overlays: Thumbnail.Tag, Thumbnail.PlayOverlay, Thumbnail.Badge, Thumbnail.Checkbox, Thumbnail.Pin\n *\n * @example\n * // Image mode (legacy, backward compatible)\n * <Thumbnail src=\"/photo.jpg\" alt=\"Photo preview\" />\n *\n * @example\n * // Tint mode for asset-type preview\n * <Thumbnail mode=\"tint\" tint=\"rgb(249 115 22 / 0.16)\">\n * <Thumbnail.Tag>JPG</Thumbnail.Tag>\n * <Thumbnail.PlayOverlay duration=\"0:15\" />\n * </Thumbnail>\n *\n * @example\n * // Selectable + pinnable card thumb\n * <Thumbnail mode=\"image\" src=\"...\" alt=\"hero\">\n * <Thumbnail.Tag>JPG</Thumbnail.Tag>\n * <Thumbnail.Checkbox checked={isSel} onChange={toggle} />\n * <Thumbnail.Pin pinned={isPinned} onToggle={togglePin} />\n * <Thumbnail.Badge color=\"success\">novo</Thumbnail.Badge>\n * </Thumbnail>\n */\nfunction Thumbnail({\n src,\n alt,\n size = \"default\",\n aspectRatio = \"square\",\n rounded = \"default\",\n mode = \"image\",\n tint,\n fallback,\n placeholder,\n onClick,\n selected = false,\n disabled = false,\n className,\n children,\n ...props\n}: ThumbnailProps) {\n const handleClick = React.useCallback(() => {\n if (!disabled && onClick) {\n onClick()\n }\n }, [disabled, onClick])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (disabled || !onClick) return\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault()\n onClick()\n }\n },\n [disabled, onClick]\n )\n\n const isInteractive = !!onClick\n\n return (\n <div\n className={cn(\n thumbnailVariants({ size, aspectRatio, rounded }),\n \"group/thumbnail\",\n // Interactive styles\n isInteractive && !disabled && \"cursor-pointer\",\n // Focus styles for interactive\n isInteractive && \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n // Selected state\n selected && \"ring-2 ring-primary ring-offset-2\",\n // Disabled state\n disabled && \"opacity-50 cursor-not-allowed pointer-events-none\",\n className\n )}\n aria-disabled={isInteractive && disabled ? true : undefined}\n aria-pressed={isInteractive ? selected : undefined}\n data-mode={mode}\n data-pinned={undefined}\n data-selected={selected || undefined}\n data-slot=\"thumbnail\"\n role={isInteractive ? \"button\" : undefined}\n tabIndex={isInteractive ? (disabled ? -1 : 0) : undefined}\n onClick={isInteractive ? handleClick : undefined}\n onKeyDown={isInteractive ? handleKeyDown : undefined}\n {...props}\n >\n {mode === \"image\" ? (\n <Image\n alt={alt ?? \"\"}\n className=\"size-full\"\n data-slot=\"thumbnail-image\"\n fallback={fallback}\n objectFit=\"cover\"\n placeholder={placeholder}\n src={src ?? \"\"}\n />\n ) : (\n <span\n aria-hidden=\"true\"\n className=\"absolute inset-0\"\n data-slot=\"thumbnail-tint\"\n style={{ backgroundColor: tint }}\n />\n )}\n {children}\n </div>\n )\n}\n\n/* ─────────────────────────────────────────────────────────────\n * Sub-components — overlays.\n * Each is absolute-positioned inside the Thumbnail container.\n * Hover-revealed affordances rely on the parent's group-hover state\n * via group-hover/group-data attributes (we set data-slot=\"thumbnail\"\n * as the parent group anchor).\n * ─────────────────────────────────────────────────────────────*/\n\ninterface ThumbnailTagProps extends React.ComponentProps<\"span\"> {\n position?: \"bottom-left\" | \"bottom-right\"\n}\n\nfunction ThumbnailTag({\n position = \"bottom-right\",\n className,\n ...props\n}: ThumbnailTagProps) {\n return (\n <span\n className={cn(\n \"absolute font-bold uppercase tracking-[0.04em] px-1.5 py-0.5 rounded text-[length:var(--thumbnail-label-font-size)] leading-tight\",\n \"bg-white/[0.88] text-neutral-900 dark:bg-black/[0.65] dark:text-neutral-50\",\n position === \"bottom-left\" && \"bottom-1.5 left-1.5\",\n position === \"bottom-right\" && \"bottom-1.5 right-1.5\",\n className,\n )}\n data-position={position}\n data-slot=\"thumbnail-tag\"\n {...props}\n />\n )\n}\n\ninterface ThumbnailPlayOverlayProps {\n className?: string\n duration?: string\n size?: \"default\" | \"lg\" | \"sm\"\n}\n\nfunction ThumbnailPlayOverlay({\n duration,\n size = \"default\",\n className,\n}: ThumbnailPlayOverlayProps) {\n const iconSize = size === \"sm\" ? 24 : size === \"lg\" ? 48 : 36\n return (\n <>\n <span\n className={cn(\n \"absolute inset-0 grid place-items-center text-white/90 pointer-events-none\",\n \"[filter:drop-shadow(0_1px_2px_rgb(0_0_0/0.35))]\",\n className,\n )}\n aria-hidden=\"true\"\n data-slot=\"thumbnail-play-overlay\"\n >\n <svg fill=\"currentColor\" height={iconSize} viewBox=\"0 0 24 24\" width={iconSize}>\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n </span>\n {duration && (\n <span\n className=\"absolute bottom-1.5 left-1.5 px-1.5 py-0.5 rounded text-[10.5px] tabular-nums font-mono bg-black/55 text-white/95\"\n data-slot=\"thumbnail-duration\"\n >\n {duration}\n </span>\n )}\n </>\n )\n}\n\ninterface ThumbnailBadgeProps extends React.ComponentProps<typeof Badge> {\n position?: \"top-left\" | \"top-right\"\n}\n\nfunction ThumbnailBadge({\n position = \"top-left\",\n className,\n ...props\n}: ThumbnailBadgeProps) {\n // Use prototype's \"thumb-new\" exact styling when no `color` is overridden —\n // 9px font, 800 weight, uppercase, mint-on-mint-dark. Consumers can override\n // via `color` prop to get standard Badge variants.\n return (\n <span\n className={cn(\n \"absolute z-[2] text-[length:var(--thumbnail-badge-font-size)] font-extrabold uppercase tracking-[0.06em]\",\n \"px-1.5 py-0.5 rounded-xs\",\n \"bg-[color:var(--brand-primary-500,theme(colors.emerald.400))] text-[color:var(--brand-primary-950,theme(colors.emerald.950))]\",\n position === \"top-left\" && \"top-2 left-8\",\n position === \"top-right\" && \"top-2 right-2\",\n className,\n )}\n data-position={position}\n data-slot=\"thumbnail-badge\"\n {...(props as React.HTMLAttributes<HTMLSpanElement>)}\n />\n )\n}\n\ninterface ThumbnailCheckboxProps {\n \"aria-label\"?: string\n checked: boolean\n className?: string\n onChange: (\n checked: boolean,\n event: React.KeyboardEvent<HTMLButtonElement> | React.MouseEvent<HTMLButtonElement>,\n ) => void\n position?: \"top-left\" | \"top-right\"\n}\n\nfunction ThumbnailCheckbox({\n checked,\n onChange,\n position = \"top-left\",\n className,\n \"aria-label\": ariaLabel = \"Selecionar\",\n}: ThumbnailCheckboxProps) {\n return (\n <button\n className={cn(\n \"absolute z-[2] grid place-items-center size-[var(--thumbnail-select-size)] rounded-sm cursor-pointer transition-[opacity,background-color,border-color]\",\n \"border bg-white/[0.92] border-neutral-300\",\n position === \"top-left\" && \"top-2 left-2\",\n position === \"top-right\" && \"top-2 right-2\",\n // Hover-revealed when not checked; sticky visible when checked\n checked\n ? \"opacity-100 bg-[color:var(--brand-primary-500)] border-[color:var(--brand-primary-500)] text-[color:var(--brand-primary-900)]\"\n : \"opacity-0 text-transparent group-hover/thumbnail:opacity-100\",\n className,\n )}\n aria-label={ariaLabel}\n aria-pressed={checked}\n data-checked={checked || undefined}\n data-slot=\"thumbnail-checkbox\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onChange(!checked, e)\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n e.stopPropagation()\n onChange(!checked, e)\n }\n }}\n >\n <Check size={11} strokeWidth={3} />\n </button>\n )\n}\n\ninterface ThumbnailPinProps {\n \"aria-label\"?: string\n className?: string\n onToggle: (\n pinned: boolean,\n event: React.KeyboardEvent<HTMLButtonElement> | React.MouseEvent<HTMLButtonElement>,\n ) => void\n pinned: boolean\n position?: \"top-left\" | \"top-right\"\n}\n\nfunction ThumbnailPin({\n pinned,\n onToggle,\n position = \"top-right\",\n className,\n \"aria-label\": ariaLabel = \"Fixar\",\n}: ThumbnailPinProps) {\n return (\n <button\n className={cn(\n \"absolute z-[2] grid place-items-center size-[var(--thumbnail-action-size)] rounded-full cursor-pointer transition-opacity\",\n position === \"top-left\" && \"top-1.5 left-1.5\",\n position === \"top-right\" && \"top-1.5 right-1.5\",\n pinned\n ? \"opacity-100 bg-white/95 text-[#eab308] dark:bg-black/55\"\n : \"opacity-0 bg-white/[0.82] text-neutral-500 dark:bg-black/45 dark:text-neutral-300 group-hover/thumbnail:opacity-100\",\n className,\n )}\n aria-label={ariaLabel}\n aria-pressed={pinned}\n data-pinned={pinned || undefined}\n data-slot=\"thumbnail-pin\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onToggle(!pinned, e)\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n e.stopPropagation()\n onToggle(!pinned, e)\n }\n }}\n >\n <svg\n fill={pinned ? \"currentColor\" : \"none\"}\n height=\"11\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.6\"\n viewBox=\"0 0 16 16\"\n width=\"11\"\n >\n <path d=\"m8 1.5 1.95 4.18 4.55.5-3.4 3.13.94 4.5L8 11.5l-4.04 2.31.94-4.5L1.5 6.18l4.55-.5z\" />\n </svg>\n </button>\n )\n}\n\n// Attach sub-components for compound API: Thumbnail.Tag etc.\n// We also keep them as named exports so users can import directly.\nThumbnail.Tag = ThumbnailTag\nThumbnail.PlayOverlay = ThumbnailPlayOverlay\nThumbnail.Badge = ThumbnailBadge\nThumbnail.Checkbox = ThumbnailCheckbox\nThumbnail.Pin = ThumbnailPin\n\nexport {\n Thumbnail,\n ThumbnailBadge,\n ThumbnailCheckbox,\n ThumbnailPin,\n ThumbnailPlayOverlay,\n ThumbnailTag,\n thumbnailVariants,\n}\n"]}
|
|
@@ -203,7 +203,7 @@ function Combobox({
|
|
|
203
203
|
"kbd",
|
|
204
204
|
{
|
|
205
205
|
"aria-hidden": "true",
|
|
206
|
-
className: "ml-2 inline-flex h-5 shrink-0 items-center rounded border bg-muted px-1.5 text-[
|
|
206
|
+
className: "ml-2 inline-flex h-5 shrink-0 items-center rounded border bg-muted px-1.5 text-[length:var(--combobox-kbd-hint-font-size)] font-semibold text-muted-foreground",
|
|
207
207
|
"data-slot": "combobox-kbd",
|
|
208
208
|
children: kbdHint
|
|
209
209
|
}
|
|
@@ -264,5 +264,5 @@ function Combobox({
|
|
|
264
264
|
}
|
|
265
265
|
|
|
266
266
|
export { Combobox };
|
|
267
|
-
//# sourceMappingURL=chunk-
|
|
268
|
-
//# sourceMappingURL=chunk-
|
|
267
|
+
//# sourceMappingURL=chunk-6KMRMXR6.js.map
|
|
268
|
+
//# sourceMappingURL=chunk-6KMRMXR6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/forms/Combobox/Combobox.variants.ts","../src/components/forms/Combobox/Combobox.tsx"],"names":["CommandPrimitive"],"mappings":"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","file":"chunk-4RSHPKHB.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * ComboboxTrigger variant styles using CVA\n */\nexport const comboboxTriggerVariants = cva(\n // Base styles\n [\n \"flex w-fit items-center justify-between gap-[var(--combobox-trigger-gap)] rounded-[var(--combobox-trigger-radius)] border bg-transparent\",\n \"text-[length:var(--combobox-trigger-text)] whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none\",\n \"data-[placeholder]:text-muted-foreground\",\n \"[&_svg:not([class*='text-'])]:text-muted-foreground\",\n \"focus-visible:border-[color:var(--combobox-trigger-border-focus)] focus-visible:ring-[color:var(--combobox-trigger-ring-primary)]/50 focus-visible:ring-[length:var(--combobox-trigger-ring-width)]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"dark:bg-input/30 dark:hover:bg-input/50\",\n \"disabled:cursor-not-allowed disabled:bg-[color:var(--combobox-trigger-disabled-bg)] disabled:text-[color:var(--combobox-trigger-disabled-fg)] disabled:border-[color:var(--combobox-trigger-disabled-border)]\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n ],\n {\n variants: {\n size: {\n sm: \"h-[var(--combobox-trigger-height-sm)] px-[var(--combobox-trigger-padding-x-sm)] py-[var(--combobox-trigger-padding-y-sm)] text-[length:var(--combobox-trigger-text-sm)]\",\n md: \"h-[var(--combobox-trigger-height-md)] px-[var(--combobox-trigger-padding-x-md)] py-[var(--combobox-trigger-padding-y-md)] text-[length:var(--combobox-trigger-text-md)]\",\n lg: \"h-[var(--combobox-trigger-height-lg)] px-[var(--combobox-trigger-padding-x-lg)] py-[var(--combobox-trigger-padding-y-lg)] text-[length:var(--combobox-trigger-text-lg)]\",\n },\n variant: {\n default: \"border-input shadow-xs\",\n filled: \"border-transparent bg-muted\",\n flushed: \"rounded-none border-x-0 border-t-0 border-b-input px-0 shadow-none\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n)\n\n/**\n * ComboboxContent variant styles using CVA\n */\nexport const comboboxContentVariants = cva(\n // Base styles\n [\n \"bg-[color:var(--combobox-content-bg)] text-[color:var(--combobox-content-fg)]\",\n \"z-50 w-[var(--combobox-content-min-width)] overflow-hidden rounded-[var(--combobox-content-radius)] border border-[color:var(--combobox-content-border)] shadow-[var(--combobox-content-shadow)] p-0\",\n // Animation classes\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * ComboboxInput variant styles using CVA\n */\nexport const comboboxInputVariants = cva(\n [\n \"flex h-9 w-full rounded-md bg-transparent py-3 text-sm outline-none\",\n \"placeholder:text-muted-foreground\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * ComboboxItem variant styles using CVA\n */\nexport const comboboxItemVariants = cva(\n [\n \"relative flex cursor-default items-center gap-2 rounded-[var(--combobox-item-radius)] px-[var(--combobox-item-padding-x)] py-[var(--combobox-item-padding-y)] text-[length:var(--combobox-item-text)]\",\n \"outline-none select-none\",\n \"data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50\",\n \"data-[selected=true]:bg-[color:var(--combobox-item-focus-bg)] data-[selected=true]:text-[color:var(--combobox-item-focus-fg)]\",\n \"[&_svg:not([class*='text-'])]:text-muted-foreground\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * ComboboxEmpty variant styles using CVA\n */\nexport const comboboxEmptyVariants = cva(\n [\"py-6 text-center text-sm text-muted-foreground\"],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\nexport type ComboboxTriggerVariantProps = VariantProps<typeof comboboxTriggerVariants>\nexport type ComboboxContentVariantProps = VariantProps<typeof comboboxContentVariants>\nexport type ComboboxInputVariantProps = VariantProps<typeof comboboxInputVariants>\nexport type ComboboxItemVariantProps = VariantProps<typeof comboboxItemVariants>\nexport type ComboboxEmptyVariantProps = VariantProps<typeof comboboxEmptyVariants>\n","import type { ComboboxProps } from \"./Combobox.types\"\n\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { CheckIcon, ChevronDownIcon, SearchIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n comboboxContentVariants,\n comboboxEmptyVariants,\n comboboxInputVariants,\n comboboxItemVariants,\n comboboxTriggerVariants,\n} from \"./Combobox.variants\"\n\n/**\n * Combobox - A searchable select component with keyboard navigation\n *\n * Uses Radix Popover for the dropdown container and cmdk (Command) for\n * search/filter functionality with full keyboard accessibility.\n *\n * @example\n * ```tsx\n * <Combobox\n * options={[\n * { value: \"apple\", label: \"Apple\" },\n * { value: \"banana\", label: \"Banana\" },\n * ]}\n * placeholder=\"Select a fruit...\"\n * onChange={(value) => console.log(value)}\n * />\n * ```\n */\nfunction Combobox({\n options,\n value: controlledValue,\n defaultValue,\n placeholder = \"Select an option...\",\n searchPlaceholder = \"Search...\",\n emptyMessage = \"No results found.\",\n disabled = false,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n onChange,\n onSearch,\n size = \"md\",\n variant = \"default\",\n kbdHint,\n className,\n ...props\n}: ComboboxProps) {\n // Handle controlled vs uncontrolled value\n const [internalValue, setInternalValue] = React.useState<string | undefined>(defaultValue)\n const value = controlledValue ?? internalValue\n\n // Handle controlled vs uncontrolled open state\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen)\n const open = controlledOpen ?? internalOpen\n\n // Search query state\n const [searchQuery, setSearchQuery] = React.useState(\"\")\n\n // Get the label for the currently selected value\n const selectedLabel = React.useMemo(() => {\n if (!value) return null\n const option = options.find((opt) => opt.value === value)\n return option?.label ?? null\n }, [value, options])\n\n // Handle open state changes\n const handleOpenChange = React.useCallback(\n (newOpen: boolean) => {\n if (controlledOpen === undefined) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n\n // Clear search when closing\n if (!newOpen) {\n setSearchQuery(\"\")\n }\n },\n [controlledOpen, onOpenChange]\n )\n\n // Handle value selection\n const handleSelect = React.useCallback(\n (selectedValue: string) => {\n if (controlledValue === undefined) {\n setInternalValue(selectedValue)\n }\n onChange?.(selectedValue)\n handleOpenChange(false)\n },\n [controlledValue, onChange, handleOpenChange]\n )\n\n // Handle search input changes\n const handleSearchChange = React.useCallback(\n (query: string) => {\n setSearchQuery(query)\n onSearch?.(query)\n },\n [onSearch]\n )\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <PopoverPrimitive.Trigger asChild>\n <button\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n className={cn(comboboxTriggerVariants({ size, variant }), className)}\n data-size={size}\n data-slot=\"combobox\"\n data-variant={variant}\n disabled={disabled}\n role=\"combobox\"\n type=\"button\"\n {...props}\n >\n <span\n className=\"truncate\"\n data-placeholder={!selectedLabel || undefined}\n data-slot=\"combobox-trigger\"\n >\n {selectedLabel ?? placeholder}\n </span>\n <ChevronDownIcon className=\"size-4 shrink-0 opacity-50\" />\n </button>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n className={cn(comboboxContentVariants())}\n data-slot=\"combobox-content\"\n sideOffset={4}\n >\n <CommandPrimitive\n className=\"flex h-full w-full flex-col overflow-hidden\"\n shouldFilter={!onSearch}\n >\n <div className=\"flex items-center border-b px-3\">\n <SearchIcon className=\"mr-2 size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n aria-autocomplete=\"list\"\n className={cn(comboboxInputVariants())}\n data-slot=\"combobox-input\"\n placeholder={searchPlaceholder}\n value={searchQuery}\n onValueChange={handleSearchChange}\n />\n {kbdHint && (\n <kbd\n aria-hidden=\"true\"\n className=\"ml-2 inline-flex h-5 shrink-0 items-center rounded border bg-muted px-1.5 text-[10px] font-semibold text-muted-foreground\"\n data-slot=\"combobox-kbd\"\n >\n {kbdHint}\n </kbd>\n )}\n </div>\n\n <CommandPrimitive.List\n className=\"max-h-72 overflow-y-auto overflow-x-hidden p-1\"\n data-slot=\"combobox-list\"\n >\n <CommandPrimitive.Empty\n className={cn(comboboxEmptyVariants())}\n data-slot=\"combobox-empty\"\n >\n {emptyMessage}\n </CommandPrimitive.Empty>\n\n {options.map((option) => (\n <CommandPrimitive.Item\n key={option.value}\n className={cn(comboboxItemVariants())}\n data-disabled={option.disabled ?? undefined}\n data-selected={value === option.value || undefined}\n data-slot=\"combobox-item\"\n disabled={option.disabled ?? false}\n value={option.label}\n onSelect={() => {\n if (!option.disabled) {\n handleSelect(option.value)\n }\n }}\n >\n <CheckIcon\n className={cn(\n \"size-4\",\n value === option.value ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n {option.label}\n </CommandPrimitive.Item>\n ))}\n </CommandPrimitive.List>\n </CommandPrimitive>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n )\n}\n\nexport { Combobox }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/forms/Combobox/Combobox.variants.ts","../src/components/forms/Combobox/Combobox.tsx"],"names":["CommandPrimitive"],"mappings":"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","file":"chunk-6KMRMXR6.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * ComboboxTrigger variant styles using CVA\n */\nexport const comboboxTriggerVariants = cva(\n // Base styles\n [\n \"flex w-fit items-center justify-between gap-[var(--combobox-trigger-gap)] rounded-[var(--combobox-trigger-radius)] border bg-transparent\",\n \"text-[length:var(--combobox-trigger-text)] whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none\",\n \"data-[placeholder]:text-muted-foreground\",\n \"[&_svg:not([class*='text-'])]:text-muted-foreground\",\n \"focus-visible:border-[color:var(--combobox-trigger-border-focus)] focus-visible:ring-[color:var(--combobox-trigger-ring-primary)]/50 focus-visible:ring-[length:var(--combobox-trigger-ring-width)]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"dark:bg-input/30 dark:hover:bg-input/50\",\n \"disabled:cursor-not-allowed disabled:bg-[color:var(--combobox-trigger-disabled-bg)] disabled:text-[color:var(--combobox-trigger-disabled-fg)] disabled:border-[color:var(--combobox-trigger-disabled-border)]\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n ],\n {\n variants: {\n size: {\n sm: \"h-[var(--combobox-trigger-height-sm)] px-[var(--combobox-trigger-padding-x-sm)] py-[var(--combobox-trigger-padding-y-sm)] text-[length:var(--combobox-trigger-text-sm)]\",\n md: \"h-[var(--combobox-trigger-height-md)] px-[var(--combobox-trigger-padding-x-md)] py-[var(--combobox-trigger-padding-y-md)] text-[length:var(--combobox-trigger-text-md)]\",\n lg: \"h-[var(--combobox-trigger-height-lg)] px-[var(--combobox-trigger-padding-x-lg)] py-[var(--combobox-trigger-padding-y-lg)] text-[length:var(--combobox-trigger-text-lg)]\",\n },\n variant: {\n default: \"border-input shadow-xs\",\n filled: \"border-transparent bg-muted\",\n flushed: \"rounded-none border-x-0 border-t-0 border-b-input px-0 shadow-none\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n)\n\n/**\n * ComboboxContent variant styles using CVA\n */\nexport const comboboxContentVariants = cva(\n // Base styles\n [\n \"bg-[color:var(--combobox-content-bg)] text-[color:var(--combobox-content-fg)]\",\n \"z-50 w-[var(--combobox-content-min-width)] overflow-hidden rounded-[var(--combobox-content-radius)] border border-[color:var(--combobox-content-border)] shadow-[var(--combobox-content-shadow)] p-0\",\n // Animation classes\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * ComboboxInput variant styles using CVA\n */\nexport const comboboxInputVariants = cva(\n [\n \"flex h-9 w-full rounded-md bg-transparent py-3 text-sm outline-none\",\n \"placeholder:text-muted-foreground\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * ComboboxItem variant styles using CVA\n */\nexport const comboboxItemVariants = cva(\n [\n \"relative flex cursor-default items-center gap-2 rounded-[var(--combobox-item-radius)] px-[var(--combobox-item-padding-x)] py-[var(--combobox-item-padding-y)] text-[length:var(--combobox-item-text)]\",\n \"outline-none select-none\",\n \"data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50\",\n \"data-[selected=true]:bg-[color:var(--combobox-item-focus-bg)] data-[selected=true]:text-[color:var(--combobox-item-focus-fg)]\",\n \"[&_svg:not([class*='text-'])]:text-muted-foreground\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * ComboboxEmpty variant styles using CVA\n */\nexport const comboboxEmptyVariants = cva(\n [\"py-6 text-center text-sm text-muted-foreground\"],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\nexport type ComboboxTriggerVariantProps = VariantProps<typeof comboboxTriggerVariants>\nexport type ComboboxContentVariantProps = VariantProps<typeof comboboxContentVariants>\nexport type ComboboxInputVariantProps = VariantProps<typeof comboboxInputVariants>\nexport type ComboboxItemVariantProps = VariantProps<typeof comboboxItemVariants>\nexport type ComboboxEmptyVariantProps = VariantProps<typeof comboboxEmptyVariants>\n","import type { ComboboxProps } from \"./Combobox.types\"\n\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { CheckIcon, ChevronDownIcon, SearchIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n comboboxContentVariants,\n comboboxEmptyVariants,\n comboboxInputVariants,\n comboboxItemVariants,\n comboboxTriggerVariants,\n} from \"./Combobox.variants\"\n\n/**\n * Combobox - A searchable select component with keyboard navigation\n *\n * Uses Radix Popover for the dropdown container and cmdk (Command) for\n * search/filter functionality with full keyboard accessibility.\n *\n * @example\n * ```tsx\n * <Combobox\n * options={[\n * { value: \"apple\", label: \"Apple\" },\n * { value: \"banana\", label: \"Banana\" },\n * ]}\n * placeholder=\"Select a fruit...\"\n * onChange={(value) => console.log(value)}\n * />\n * ```\n */\nfunction Combobox({\n options,\n value: controlledValue,\n defaultValue,\n placeholder = \"Select an option...\",\n searchPlaceholder = \"Search...\",\n emptyMessage = \"No results found.\",\n disabled = false,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n onChange,\n onSearch,\n size = \"md\",\n variant = \"default\",\n kbdHint,\n className,\n ...props\n}: ComboboxProps) {\n // Handle controlled vs uncontrolled value\n const [internalValue, setInternalValue] = React.useState<string | undefined>(defaultValue)\n const value = controlledValue ?? internalValue\n\n // Handle controlled vs uncontrolled open state\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen)\n const open = controlledOpen ?? internalOpen\n\n // Search query state\n const [searchQuery, setSearchQuery] = React.useState(\"\")\n\n // Get the label for the currently selected value\n const selectedLabel = React.useMemo(() => {\n if (!value) return null\n const option = options.find((opt) => opt.value === value)\n return option?.label ?? null\n }, [value, options])\n\n // Handle open state changes\n const handleOpenChange = React.useCallback(\n (newOpen: boolean) => {\n if (controlledOpen === undefined) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n\n // Clear search when closing\n if (!newOpen) {\n setSearchQuery(\"\")\n }\n },\n [controlledOpen, onOpenChange]\n )\n\n // Handle value selection\n const handleSelect = React.useCallback(\n (selectedValue: string) => {\n if (controlledValue === undefined) {\n setInternalValue(selectedValue)\n }\n onChange?.(selectedValue)\n handleOpenChange(false)\n },\n [controlledValue, onChange, handleOpenChange]\n )\n\n // Handle search input changes\n const handleSearchChange = React.useCallback(\n (query: string) => {\n setSearchQuery(query)\n onSearch?.(query)\n },\n [onSearch]\n )\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <PopoverPrimitive.Trigger asChild>\n <button\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n className={cn(comboboxTriggerVariants({ size, variant }), className)}\n data-size={size}\n data-slot=\"combobox\"\n data-variant={variant}\n disabled={disabled}\n role=\"combobox\"\n type=\"button\"\n {...props}\n >\n <span\n className=\"truncate\"\n data-placeholder={!selectedLabel || undefined}\n data-slot=\"combobox-trigger\"\n >\n {selectedLabel ?? placeholder}\n </span>\n <ChevronDownIcon className=\"size-4 shrink-0 opacity-50\" />\n </button>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n className={cn(comboboxContentVariants())}\n data-slot=\"combobox-content\"\n sideOffset={4}\n >\n <CommandPrimitive\n className=\"flex h-full w-full flex-col overflow-hidden\"\n shouldFilter={!onSearch}\n >\n <div className=\"flex items-center border-b px-3\">\n <SearchIcon className=\"mr-2 size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n aria-autocomplete=\"list\"\n className={cn(comboboxInputVariants())}\n data-slot=\"combobox-input\"\n placeholder={searchPlaceholder}\n value={searchQuery}\n onValueChange={handleSearchChange}\n />\n {kbdHint && (\n <kbd\n aria-hidden=\"true\"\n className=\"ml-2 inline-flex h-5 shrink-0 items-center rounded border bg-muted px-1.5 text-[length:var(--combobox-kbd-hint-font-size)] font-semibold text-muted-foreground\"\n data-slot=\"combobox-kbd\"\n >\n {kbdHint}\n </kbd>\n )}\n </div>\n\n <CommandPrimitive.List\n className=\"max-h-72 overflow-y-auto overflow-x-hidden p-1\"\n data-slot=\"combobox-list\"\n >\n <CommandPrimitive.Empty\n className={cn(comboboxEmptyVariants())}\n data-slot=\"combobox-empty\"\n >\n {emptyMessage}\n </CommandPrimitive.Empty>\n\n {options.map((option) => (\n <CommandPrimitive.Item\n key={option.value}\n className={cn(comboboxItemVariants())}\n data-disabled={option.disabled ?? undefined}\n data-selected={value === option.value || undefined}\n data-slot=\"combobox-item\"\n disabled={option.disabled ?? false}\n value={option.label}\n onSelect={() => {\n if (!option.disabled) {\n handleSelect(option.value)\n }\n }}\n >\n <CheckIcon\n className={cn(\n \"size-4\",\n value === option.value ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n {option.label}\n </CommandPrimitive.Item>\n ))}\n </CommandPrimitive.List>\n </CommandPrimitive>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n )\n}\n\nexport { Combobox }\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Sparkline } from './chunk-2VHARFMD.js';
|
|
2
|
-
import { Card, CardHeader, CardContent, CardTitle } from './chunk-
|
|
2
|
+
import { Card, CardHeader, CardContent, CardTitle } from './chunk-HVFACGNK.js';
|
|
3
3
|
import { ProgressBar } from './chunk-3JCV72FO.js';
|
|
4
4
|
import { SkeletonLoader } from './chunk-QHKOBGLW.js';
|
|
5
|
-
import { Badge } from './chunk-
|
|
5
|
+
import { Badge } from './chunk-6ABGMOE2.js';
|
|
6
6
|
import { cn } from './chunk-HRNDJU7D.js';
|
|
7
7
|
import { Minus, ArrowDown, ArrowUp } from 'lucide-react';
|
|
8
8
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
@@ -222,5 +222,5 @@ function KPICardGroup({
|
|
|
222
222
|
}
|
|
223
223
|
|
|
224
224
|
export { KPICard, KPICardGroup };
|
|
225
|
-
//# sourceMappingURL=chunk-
|
|
226
|
-
//# sourceMappingURL=chunk-
|
|
225
|
+
//# sourceMappingURL=chunk-7CMOCWFX.js.map
|
|
226
|
+
//# sourceMappingURL=chunk-7CMOCWFX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/KPICard/KPICard.tsx"],"names":[],"mappings":"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","file":"chunk-7J5OM4ZD.js","sourcesContent":["import type {\n KPICardGroupProps,\n KPICardProps,\n KPICardTrend,\n} from \"./KPICard.types\"\n\nimport { ArrowDown, ArrowUp, Minus } from \"lucide-react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n} from \"../../layout/Card\"\nimport { Badge } from \"../../primitives/Badge\"\nimport { ProgressBar } from \"../../primitives/ProgressBar\"\nimport { SkeletonLoader } from \"../../primitives/SkeletonLoader\"\nimport { Sparkline } from \"../Sparkline\"\n\n/**\n * Size configuration for typography\n */\nconst sizeConfig = {\n sm: {\n value: \"text-[length:var(--kpi-card-value-size-sm)] font-[number:var(--kpi-card-value-weight)]\",\n padding: \"p-4\",\n },\n md: {\n value: \"text-[length:var(--kpi-card-value-size-md)] font-[number:var(--kpi-card-value-weight)]\",\n padding: \"p-6\",\n },\n lg: {\n value: \"text-[length:var(--kpi-card-value-size-lg)] font-[number:var(--kpi-card-value-weight)]\",\n padding: \"p-6\",\n },\n} as const\n\n/**\n * Trend icons mapping\n */\nconst TrendIcons = {\n up: ArrowUp,\n down: ArrowDown,\n neutral: Minus,\n} as const\n\n/**\n * Trend colors mapping using design tokens\n */\nconst trendColors = {\n up: \"text-success\",\n down: \"text-destructive\",\n neutral: \"text-muted-foreground\",\n} as const\n\n/**\n * KPICard - Key Performance Indicator Card\n *\n * Dashboard component that displays important metrics prominently.\n * Combines main value, comparison/delta, mini chart, and contextual metadata\n * in a layout optimized for quick visualization.\n *\n * @example\n * ```tsx\n * <KPICard\n * title=\"Revenue\"\n * value=\"$45,231.89\"\n * delta={20.1}\n * deltaLabel=\"from last month\"\n * />\n * ```\n */\nfunction KPICard({\n title,\n value,\n delta,\n deltaLabel,\n trend,\n sparkline,\n icon,\n featuredIcon,\n dropdownIcon,\n helpText,\n progressBar,\n swap,\n showBadge = true,\n action,\n variant = \"default\",\n size = \"md\",\n loading = false,\n className,\n ...props\n}: KPICardProps) {\n // Auto-detect trend direction if not provided\n const computedTrend: KPICardTrend = trend ?? (delta !== undefined\n ? delta > 0 ? \"up\" : delta < 0 ? \"down\" : \"neutral\"\n : \"neutral\")\n\n const TrendIcon = TrendIcons[computedTrend]\n const trendColor = trendColors[computedTrend]\n const sizeStyles = sizeConfig[size]\n const sparklineColor =\n computedTrend === \"up\"\n ? \"var(--kpi-card-sparkline-up)\"\n : computedTrend === \"down\"\n ? \"var(--kpi-card-sparkline-down)\"\n : \"var(--kpi-card-sparkline-neutral)\"\n\n // Variant styles\n const variantStyles = {\n default: \"\",\n ghost: \"border-none shadow-none bg-transparent\",\n highlight: \"border-primary/50 bg-primary/5\",\n }\n\n if (loading) {\n return (\n <Card\n className={cn(variantStyles[variant], className)}\n data-slot=\"kpi-card\"\n {...props}\n >\n <CardHeader className=\"flex flex-row items-center justify-between pb-2\">\n <SkeletonLoader className=\"h-4 w-24\" />\n <SkeletonLoader className=\"size-4\" />\n </CardHeader>\n <CardContent>\n <SkeletonLoader className=\"mb-2 h-8 w-32\" />\n <SkeletonLoader className=\"h-4 w-20\" />\n </CardContent>\n </Card>\n )\n }\n\n return (\n <Card\n className={cn(variantStyles[variant], className)}\n data-slot=\"kpi-card\"\n {...props}\n >\n <CardHeader className=\"flex flex-row items-center justify-between pb-2\">\n <div className=\"flex items-center gap-1.5\">\n <CardTitle className=\"text-sm font-medium text-muted-foreground\">\n {title}\n </CardTitle>\n {helpText && (\n <span\n className=\"text-xs text-muted-foreground\"\n data-slot=\"kpi-card-help-text\"\n >\n {helpText}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {featuredIcon && (\n <span\n className=\"inline-flex size-10 items-center justify-center rounded-full bg-primary/10 text-primary [&_svg]:size-5\"\n data-slot=\"kpi-card-featured-icon\"\n >\n {featuredIcon}\n </span>\n )}\n {icon && !featuredIcon && (\n <span className=\"text-muted-foreground\" data-slot=\"kpi-card-icon\">\n {icon}\n </span>\n )}\n {dropdownIcon && (\n <span\n className=\"text-muted-foreground\"\n data-slot=\"kpi-card-dropdown-icon\"\n >\n {dropdownIcon}\n </span>\n )}\n {action && !icon && !featuredIcon && !dropdownIcon && (\n <span data-slot=\"kpi-card-action\">{action}</span>\n )}\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-end justify-between\">\n <div>\n <div\n className={cn(sizeStyles.value, \"tabular-nums\")}\n data-slot=\"kpi-card-value\"\n >\n {value}\n </div>\n {delta !== undefined && (\n <div\n className={cn(\"mt-1 flex items-center gap-2\", trendColor)}\n data-slot=\"kpi-card-delta\"\n data-trend={computedTrend}\n >\n {showBadge ? (\n <Badge\n color={\n computedTrend === \"up\"\n ? \"success\"\n : computedTrend === \"down\"\n ? \"destructive\"\n : \"muted\"\n }\n leadingIcon={<TrendIcon aria-hidden=\"true\" />}\n size=\"sm\"\n type=\"pill-color\"\n >\n {Math.abs(delta)}%\n </Badge>\n ) : (\n <span className={cn(\"flex items-center text-xs\", trendColor)}>\n <TrendIcon aria-hidden=\"true\" className=\"mr-1 size-3\" />\n <span className=\"font-medium\">{Math.abs(delta)}%</span>\n </span>\n )}\n {deltaLabel && (\n <span className=\"text-xs text-muted-foreground\">\n {deltaLabel}\n </span>\n )}\n {swap && (\n <span className=\"ml-auto\" data-slot=\"kpi-card-swap\">\n {swap}\n </span>\n )}\n </div>\n )}\n </div>\n {sparkline && sparkline.length > 0 && (\n <Sparkline\n aria-hidden=\"true\"\n color={sparklineColor}\n data={sparkline}\n data-slot=\"kpi-card-sparkline\"\n height={32}\n style={{ opacity: \"var(--kpi-card-sparkline-opacity)\" }}\n variant=\"bar\"\n width={96}\n />\n )}\n </div>\n {progressBar !== undefined && (\n <div className=\"mt-3\" data-slot=\"kpi-card-progress\">\n {typeof progressBar === \"number\" ? (\n <ProgressBar value={progressBar} />\n ) : (\n progressBar\n )}\n </div>\n )}\n </CardContent>\n {/* Screen reader summary */}\n <span className=\"sr-only\">\n {title}: {value}\n {delta !== undefined && `, ${computedTrend === \"up\" ? \"up\" : computedTrend === \"down\" ? \"down\" : \"unchanged\"} ${String(Math.abs(delta))}%`}\n {deltaLabel && ` ${deltaLabel}`}\n </span>\n </Card>\n )\n}\n\n/**\n * KPICardGroup — Multiple KPIs composition (Figma Type=Multiple KPIs)\n *\n * Wrapper que diagramra múltiplos `KPICard` em layout horizontal ou vertical.\n *\n * @example\n * ```tsx\n * <KPICardGroup orientation=\"horizontal\" gap=\"md\">\n * <KPICard title=\"Revenue\" value=\"$45k\" delta={12} />\n * <KPICard title=\"Orders\" value={1240} delta={-3} />\n * <KPICard title=\"Users\" value={892} delta={8} />\n * </KPICardGroup>\n * ```\n */\nfunction KPICardGroup({\n children,\n orientation = \"horizontal\",\n gap = \"md\",\n className,\n ...props\n}: KPICardGroupProps) {\n const gapClasses = {\n sm: \"gap-2\",\n md: \"gap-4\",\n lg: \"gap-6\",\n } as const\n\n return (\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\"\n ? \"flex-row [&>*]:flex-1\"\n : \"flex-col\",\n gapClasses[gap],\n className\n )}\n data-orientation={orientation}\n data-slot=\"kpi-card-group\"\n {...props}\n >\n {children}\n </div>\n )\n}\n\nexport { KPICard, KPICardGroup }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/data-display/KPICard/KPICard.tsx"],"names":[],"mappings":"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","file":"chunk-7CMOCWFX.js","sourcesContent":["import type {\n KPICardGroupProps,\n KPICardProps,\n KPICardTrend,\n} from \"./KPICard.types\"\n\nimport { ArrowDown, ArrowUp, Minus } from \"lucide-react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n} from \"../../layout/Card\"\nimport { Badge } from \"../../primitives/Badge\"\nimport { ProgressBar } from \"../../primitives/ProgressBar\"\nimport { SkeletonLoader } from \"../../primitives/SkeletonLoader\"\nimport { Sparkline } from \"../Sparkline\"\n\n/**\n * Size configuration for typography\n */\nconst sizeConfig = {\n sm: {\n value: \"text-[length:var(--kpi-card-value-size-sm)] font-[number:var(--kpi-card-value-weight)]\",\n padding: \"p-4\",\n },\n md: {\n value: \"text-[length:var(--kpi-card-value-size-md)] font-[number:var(--kpi-card-value-weight)]\",\n padding: \"p-6\",\n },\n lg: {\n value: \"text-[length:var(--kpi-card-value-size-lg)] font-[number:var(--kpi-card-value-weight)]\",\n padding: \"p-6\",\n },\n} as const\n\n/**\n * Trend icons mapping\n */\nconst TrendIcons = {\n up: ArrowUp,\n down: ArrowDown,\n neutral: Minus,\n} as const\n\n/**\n * Trend colors mapping using design tokens\n */\nconst trendColors = {\n up: \"text-success\",\n down: \"text-destructive\",\n neutral: \"text-muted-foreground\",\n} as const\n\n/**\n * KPICard - Key Performance Indicator Card\n *\n * Dashboard component that displays important metrics prominently.\n * Combines main value, comparison/delta, mini chart, and contextual metadata\n * in a layout optimized for quick visualization.\n *\n * @example\n * ```tsx\n * <KPICard\n * title=\"Revenue\"\n * value=\"$45,231.89\"\n * delta={20.1}\n * deltaLabel=\"from last month\"\n * />\n * ```\n */\nfunction KPICard({\n title,\n value,\n delta,\n deltaLabel,\n trend,\n sparkline,\n icon,\n featuredIcon,\n dropdownIcon,\n helpText,\n progressBar,\n swap,\n showBadge = true,\n action,\n variant = \"default\",\n size = \"md\",\n loading = false,\n className,\n ...props\n}: KPICardProps) {\n // Auto-detect trend direction if not provided\n const computedTrend: KPICardTrend = trend ?? (delta !== undefined\n ? delta > 0 ? \"up\" : delta < 0 ? \"down\" : \"neutral\"\n : \"neutral\")\n\n const TrendIcon = TrendIcons[computedTrend]\n const trendColor = trendColors[computedTrend]\n const sizeStyles = sizeConfig[size]\n const sparklineColor =\n computedTrend === \"up\"\n ? \"var(--kpi-card-sparkline-up)\"\n : computedTrend === \"down\"\n ? \"var(--kpi-card-sparkline-down)\"\n : \"var(--kpi-card-sparkline-neutral)\"\n\n // Variant styles\n const variantStyles = {\n default: \"\",\n ghost: \"border-none shadow-none bg-transparent\",\n highlight: \"border-primary/50 bg-primary/5\",\n }\n\n if (loading) {\n return (\n <Card\n className={cn(variantStyles[variant], className)}\n data-slot=\"kpi-card\"\n {...props}\n >\n <CardHeader className=\"flex flex-row items-center justify-between pb-2\">\n <SkeletonLoader className=\"h-4 w-24\" />\n <SkeletonLoader className=\"size-4\" />\n </CardHeader>\n <CardContent>\n <SkeletonLoader className=\"mb-2 h-8 w-32\" />\n <SkeletonLoader className=\"h-4 w-20\" />\n </CardContent>\n </Card>\n )\n }\n\n return (\n <Card\n className={cn(variantStyles[variant], className)}\n data-slot=\"kpi-card\"\n {...props}\n >\n <CardHeader className=\"flex flex-row items-center justify-between pb-2\">\n <div className=\"flex items-center gap-1.5\">\n <CardTitle className=\"text-sm font-medium text-muted-foreground\">\n {title}\n </CardTitle>\n {helpText && (\n <span\n className=\"text-xs text-muted-foreground\"\n data-slot=\"kpi-card-help-text\"\n >\n {helpText}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {featuredIcon && (\n <span\n className=\"inline-flex size-10 items-center justify-center rounded-full bg-primary/10 text-primary [&_svg]:size-5\"\n data-slot=\"kpi-card-featured-icon\"\n >\n {featuredIcon}\n </span>\n )}\n {icon && !featuredIcon && (\n <span className=\"text-muted-foreground\" data-slot=\"kpi-card-icon\">\n {icon}\n </span>\n )}\n {dropdownIcon && (\n <span\n className=\"text-muted-foreground\"\n data-slot=\"kpi-card-dropdown-icon\"\n >\n {dropdownIcon}\n </span>\n )}\n {action && !icon && !featuredIcon && !dropdownIcon && (\n <span data-slot=\"kpi-card-action\">{action}</span>\n )}\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-end justify-between\">\n <div>\n <div\n className={cn(sizeStyles.value, \"tabular-nums\")}\n data-slot=\"kpi-card-value\"\n >\n {value}\n </div>\n {delta !== undefined && (\n <div\n className={cn(\"mt-1 flex items-center gap-2\", trendColor)}\n data-slot=\"kpi-card-delta\"\n data-trend={computedTrend}\n >\n {showBadge ? (\n <Badge\n color={\n computedTrend === \"up\"\n ? \"success\"\n : computedTrend === \"down\"\n ? \"destructive\"\n : \"muted\"\n }\n leadingIcon={<TrendIcon aria-hidden=\"true\" />}\n size=\"sm\"\n type=\"pill-color\"\n >\n {Math.abs(delta)}%\n </Badge>\n ) : (\n <span className={cn(\"flex items-center text-xs\", trendColor)}>\n <TrendIcon aria-hidden=\"true\" className=\"mr-1 size-3\" />\n <span className=\"font-medium\">{Math.abs(delta)}%</span>\n </span>\n )}\n {deltaLabel && (\n <span className=\"text-xs text-muted-foreground\">\n {deltaLabel}\n </span>\n )}\n {swap && (\n <span className=\"ml-auto\" data-slot=\"kpi-card-swap\">\n {swap}\n </span>\n )}\n </div>\n )}\n </div>\n {sparkline && sparkline.length > 0 && (\n <Sparkline\n aria-hidden=\"true\"\n color={sparklineColor}\n data={sparkline}\n data-slot=\"kpi-card-sparkline\"\n height={32}\n style={{ opacity: \"var(--kpi-card-sparkline-opacity)\" }}\n variant=\"bar\"\n width={96}\n />\n )}\n </div>\n {progressBar !== undefined && (\n <div className=\"mt-3\" data-slot=\"kpi-card-progress\">\n {typeof progressBar === \"number\" ? (\n <ProgressBar value={progressBar} />\n ) : (\n progressBar\n )}\n </div>\n )}\n </CardContent>\n {/* Screen reader summary */}\n <span className=\"sr-only\">\n {title}: {value}\n {delta !== undefined && `, ${computedTrend === \"up\" ? \"up\" : computedTrend === \"down\" ? \"down\" : \"unchanged\"} ${String(Math.abs(delta))}%`}\n {deltaLabel && ` ${deltaLabel}`}\n </span>\n </Card>\n )\n}\n\n/**\n * KPICardGroup — Multiple KPIs composition (Figma Type=Multiple KPIs)\n *\n * Wrapper que diagramra múltiplos `KPICard` em layout horizontal ou vertical.\n *\n * @example\n * ```tsx\n * <KPICardGroup orientation=\"horizontal\" gap=\"md\">\n * <KPICard title=\"Revenue\" value=\"$45k\" delta={12} />\n * <KPICard title=\"Orders\" value={1240} delta={-3} />\n * <KPICard title=\"Users\" value={892} delta={8} />\n * </KPICardGroup>\n * ```\n */\nfunction KPICardGroup({\n children,\n orientation = \"horizontal\",\n gap = \"md\",\n className,\n ...props\n}: KPICardGroupProps) {\n const gapClasses = {\n sm: \"gap-2\",\n md: \"gap-4\",\n lg: \"gap-6\",\n } as const\n\n return (\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\"\n ? \"flex-row [&>*]:flex-1\"\n : \"flex-col\",\n gapClasses[gap],\n className\n )}\n data-orientation={orientation}\n data-slot=\"kpi-card-group\"\n {...props}\n >\n {children}\n </div>\n )\n}\n\nexport { KPICard, KPICardGroup }\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Label } from './chunk-
|
|
2
|
-
import { Divider } from './chunk-
|
|
1
|
+
import { Label } from './chunk-KA7747GR.js';
|
|
2
|
+
import { Divider } from './chunk-MAM6VUKD.js';
|
|
3
3
|
import { cn } from './chunk-HRNDJU7D.js';
|
|
4
4
|
import { useId, useMemo } from 'react';
|
|
5
5
|
import { cva } from 'class-variance-authority';
|
|
@@ -224,5 +224,5 @@ function FieldError({ className, children, errors, id, ...props }) {
|
|
|
224
224
|
}
|
|
225
225
|
|
|
226
226
|
export { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, fieldContentVariants, fieldDescriptionVariants, fieldErrorVariants, fieldGroupVariants, fieldLabelVariants, fieldLegendVariants, fieldSeparatorVariants, fieldSetVariants, fieldTitleVariants, fieldVariants };
|
|
227
|
-
//# sourceMappingURL=chunk-
|
|
228
|
-
//# sourceMappingURL=chunk-
|
|
227
|
+
//# sourceMappingURL=chunk-7VGF6ZVE.js.map
|
|
228
|
+
//# sourceMappingURL=chunk-7VGF6ZVE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/forms/Field/Field.variants.ts","../src/components/forms/Field/Field.tsx"],"names":[],"mappings":";;;;;;;AAKO,IAAM,mBAAmB,GAAA,CAAI;AAAA,EAClC,qBAAA;AAAA,EACA;AACF,CAAC;AAKM,IAAM,mBAAA,GAAsB,IAAI,kBAAA,EAAoB;AAAA,EACzD,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ,WAAA;AAAA,MACR,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS;AAAA;AAEb,CAAC;AAKM,IAAM,qBAAqB,GAAA,CAAI;AAAA,EACpC,qEAAA;AAAA,EACA,kCAAA;AAAA,EACA;AACF,CAAC;AAKM,IAAM,aAAA,GAAgB,GAAA;AAAA,EAC3B,oEAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,WAAA,EAAa;AAAA,QACX,QAAA,EAAU,CAAC,2CAA2C,CAAA;AAAA,QACtD,UAAA,EAAY;AAAA,UACV,uBAAA;AAAA,UACA,uCAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,UAAA,EAAY;AAAA,UACV,8HAAA;AAAA,UACA,uDAAA;AAAA,UACA;AAAA;AACF;AACF,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,WAAA,EAAa;AAAA;AACf;AAEJ;AAKO,IAAM,uBAAuB,GAAA,CAAI;AAAA,EACtC;AACF,CAAC;AAKM,IAAM,qBAAqB,GAAA,CAAI;AAAA,EACpC,kEAAA;AAAA,EACA,6CAAA;AAAA,EACA,uIAAA;AAAA,EACA,6BAAA;AAAA,EACA,+EAAA;AAAA,EACA;AACF,CAAC;AAKM,IAAM,qBAAqB,GAAA,CAAI;AAAA,EACpC,gEAAA;AAAA,EACA;AACF,CAAC;AAKM,IAAM,2BAA2B,GAAA,CAAI;AAAA,EAC1C,qGAAA;AAAA,EACA,8DAAA;AAAA,EACA,8DAAA;AAAA,EACA;AACF,CAAC;AAKM,IAAM,yBAAyB,GAAA,CAAI;AAAA,EACxC,4BAAA;AAAA,EACA;AACF,CAAC;AAKM,IAAM,kBAAA,GAAqB,GAAA;AAAA,EAChC;AACF;AChFA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkB;AACxD,EAAA,uBACE,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAiB,EAAG,SAAS,CAAA;AAAA,MAC3C,WAAA,EAAU,WAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,OAAA,GAAU,QAAA;AAAA,EACV,GAAG;AACL,CAAA,EAAqB;AACnB,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,WAAW,EAAA,CAAG,mBAAA,CAAoB,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MACzD,WAAA,EAAU,cAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACb,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoB;AAC5D,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAmB,EAAG,SAAS,CAAA;AAAA,MAC7C,WAAA,EAAU,aAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,MAAM,EAAE,SAAA,EAAW,cAAc,UAAA,EAAY,GAAG,OAAM,EAAe;AAC5E,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,MACvD,kBAAA,EAAkB,WAAA;AAAA,MAClB,WAAA,EAAU,OAAA;AAAA,MACV,IAAA,EAAK,OAAA;AAAA,MACJ,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAsB;AAChE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAqB,EAAG,SAAS,CAAA;AAAA,MAC/C,WAAA,EAAU,eAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoB;AAC5D,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAmB,EAAG,SAAS,CAAA;AAAA,MAC7C,WAAA,EAAU,aAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoB;AAC5D,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAmB,EAAG,SAAS,CAAA;AAAA,MAC7C,WAAA,EAAU,aAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,iBAAiB,EAAE,SAAA,EAAW,EAAA,EAAI,GAAG,OAAM,EAA0B;AAC5E,EAAA,MAAM,cAAc,KAAA,EAAM;AAC1B,EAAA,uBACE,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,wBAAA,EAAyB,EAAG,SAAS,CAAA;AAAA,MACnD,WAAA,EAAU,mBAAA;AAAA,MACV,IAAI,EAAA,IAAM,WAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAe,EAAE,QAAA,EAAU,SAAA,EAAW,GAAG,OAAM,EAAwB;AAC9E,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAuB,EAAG,SAAS,CAAA;AAAA,MACjD,cAAA,EAAc,CAAC,CAAC,QAAA;AAAA,MAChB,WAAA,EAAU,iBAAA;AAAA,MACT,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,WAAU,0BAAA,EAA2B,CAAA;AAAA,QAC7C,QAAA,oBACC,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,uEAAA;AAAA,YACV,WAAA,EAAU,yBAAA;AAAA,YAET;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,QAAA,EAAU,QAAQ,EAAA,EAAI,GAAG,OAAM,EAAoB;AAClF,EAAA,MAAM,cAAc,KAAA,EAAM;AAC1B,EAAA,MAAM,OAAA,GAAU,QAAQ,MAAM;AAC5B,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,GAAG,IAAI,GAAA,CAAI,MAAA,CAAO,IAAI,CAAC,KAAA,KAAU,CAAC,KAAA,EAAO,OAAA,EAAS,KAAK,CAAC,CAAC,EAAE,MAAA;AAAO,KACpE;AAEA,IAAA,IAAI,YAAA,CAAa,UAAU,CAAA,EAAG;AAC5B,MAAA,OAAO,YAAA,CAAa,CAAC,CAAA,EAAG,OAAA;AAAA,IAC1B;AAEA,IAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,oCAAA,EACX,QAAA,EAAA,YAAA,CAAa,GAAA;AAAA,MACZ,CAAC,UACC,KAAA,EAAO,OAAA,wBAAY,IAAA,EAAA,EAAwB,QAAA,EAAA,KAAA,CAAM,OAAA,EAAA,EAAtB,KAAA,CAAM,OAAwB;AAAA,KAC7D,EACF,CAAA;AAAA,EAEJ,CAAA,EAAG,CAAC,QAAA,EAAU,MAAM,CAAC,CAAA;AAErB,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAmB,EAAG,SAAS,CAAA;AAAA,MAC7C,WAAA,EAAU,aAAA;AAAA,MACV,IAAI,EAAA,IAAM,WAAA;AAAA,MACV,IAAA,EAAK,OAAA;AAAA,MACJ,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ","file":"chunk-G7PBPX3K.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * FieldSet variant styles using CVA\n */\nexport const fieldSetVariants = cva([\n \"flex flex-col gap-6\",\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n])\n\n/**\n * FieldLegend variant styles using CVA\n */\nexport const fieldLegendVariants = cva(\"mb-3 font-medium\", {\n variants: {\n variant: {\n legend: \"text-base\",\n label: \"text-sm\",\n },\n },\n defaultVariants: {\n variant: \"legend\",\n },\n})\n\n/**\n * FieldGroup variant styles using CVA\n */\nexport const fieldGroupVariants = cva([\n \"group/field-group @container/field-group flex w-full flex-col gap-7\",\n \"data-[slot=checkbox-group]:gap-3\",\n \"[&>[data-slot=field-group]]:gap-4\",\n])\n\n/**\n * Field container variant styles using CVA\n */\nexport const fieldVariants = cva(\n \"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\",\n {\n variants: {\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n responsive: [\n \"flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n)\n\n/**\n * FieldContent variant styles using CVA\n */\nexport const fieldContentVariants = cva([\n \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\n])\n\n/**\n * FieldLabel variant styles using CVA\n */\nexport const fieldLabelVariants = cva([\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug\",\n \"group-data-[disabled=true]/field:opacity-50\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border\",\n \"[&>*]:data-[slot=field]:p-4\",\n \"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary\",\n \"dark:has-data-[state=checked]:bg-primary/10\",\n])\n\n/**\n * FieldTitle variant styles using CVA\n */\nexport const fieldTitleVariants = cva([\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium\",\n \"group-data-[disabled=true]/field:opacity-50\",\n])\n\n/**\n * FieldDescription variant styles using CVA\n */\nexport const fieldDescriptionVariants = cva([\n \"text-[color:var(--form-helper-fg)] text-[length:var(--form-helper-size)] leading-normal font-normal\",\n \"group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n])\n\n/**\n * FieldSeparator variant styles using CVA\n */\nexport const fieldSeparatorVariants = cva([\n \"relative -my-2 h-5 text-sm\",\n \"group-data-[variant=outline]/field-group:-mb-2\",\n])\n\n/**\n * FieldError variant styles using CVA\n */\nexport const fieldErrorVariants = cva(\n \"text-[color:var(--form-error-fg)] text-[length:var(--form-error-size)] font-[var(--form-error-weight)]\"\n)\n\n// Export variant prop types\nexport type FieldVariantProps = VariantProps<typeof fieldVariants>\nexport type FieldLegendVariantProps = VariantProps<typeof fieldLegendVariants>\n","import type {\n FieldContentProps,\n FieldDescriptionProps,\n FieldErrorProps,\n FieldGroupProps,\n FieldLabelProps,\n FieldLegendProps,\n FieldProps,\n FieldSeparatorProps,\n FieldSetProps,\n FieldTitleProps,\n} from \"./Field.types\"\n\nimport { useId, useMemo } from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Divider } from \"../../primitives/Divider\"\nimport { Label } from \"../../primitives/Label\"\nimport {\n fieldContentVariants,\n fieldDescriptionVariants,\n fieldErrorVariants,\n fieldGroupVariants,\n fieldLabelVariants,\n fieldLegendVariants,\n fieldSeparatorVariants,\n fieldSetVariants,\n fieldTitleVariants,\n fieldVariants,\n} from \"./Field.variants\"\n\nfunction FieldSet({ className, ...props }: FieldSetProps) {\n return (\n <fieldset\n className={cn(fieldSetVariants(), className)}\n data-slot=\"field-set\"\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: FieldLegendProps) {\n return (\n <legend\n className={cn(fieldLegendVariants({ variant }), className)}\n data-slot=\"field-legend\"\n data-variant={variant}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: FieldGroupProps) {\n return (\n <div\n className={cn(fieldGroupVariants(), className)}\n data-slot=\"field-group\"\n {...props}\n />\n )\n}\n\nfunction Field({ className, orientation = \"vertical\", ...props }: FieldProps) {\n return (\n <div\n className={cn(fieldVariants({ orientation }), className)}\n data-orientation={orientation}\n data-slot=\"field\"\n role=\"group\"\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: FieldContentProps) {\n return (\n <div\n className={cn(fieldContentVariants(), className)}\n data-slot=\"field-content\"\n {...props}\n />\n )\n}\n\nfunction FieldLabel({ className, ...props }: FieldLabelProps) {\n return (\n <Label\n className={cn(fieldLabelVariants(), className)}\n data-slot=\"field-label\"\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: FieldTitleProps) {\n return (\n <div\n className={cn(fieldTitleVariants(), className)}\n data-slot=\"field-label\"\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, id, ...props }: FieldDescriptionProps) {\n const generatedId = useId()\n return (\n <p\n className={cn(fieldDescriptionVariants(), className)}\n data-slot=\"field-description\"\n id={id ?? generatedId}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({ children, className, ...props }: FieldSeparatorProps) {\n return (\n <div\n className={cn(fieldSeparatorVariants(), className)}\n data-content={!!children}\n data-slot=\"field-separator\"\n {...props}\n >\n <Divider className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"bg-background text-muted-foreground relative mx-auto block w-fit px-2\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({ className, children, errors, id, ...props }: FieldErrorProps) {\n const generatedId = useId()\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n\n if (uniqueErrors.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map(\n (error) =>\n error?.message && <li key={error.message}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n aria-live=\"polite\"\n className={cn(fieldErrorVariants(), className)}\n data-slot=\"field-error\"\n id={id ?? generatedId}\n role=\"alert\"\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/forms/Field/Field.variants.ts","../src/components/forms/Field/Field.tsx"],"names":[],"mappings":"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","file":"chunk-7VGF6ZVE.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * FieldSet variant styles using CVA\n */\nexport const fieldSetVariants = cva([\n \"flex flex-col gap-6\",\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n])\n\n/**\n * FieldLegend variant styles using CVA\n */\nexport const fieldLegendVariants = cva(\"mb-3 font-medium\", {\n variants: {\n variant: {\n legend: \"text-base\",\n label: \"text-sm\",\n },\n },\n defaultVariants: {\n variant: \"legend\",\n },\n})\n\n/**\n * FieldGroup variant styles using CVA\n */\nexport const fieldGroupVariants = cva([\n \"group/field-group @container/field-group flex w-full flex-col gap-7\",\n \"data-[slot=checkbox-group]:gap-3\",\n \"[&>[data-slot=field-group]]:gap-4\",\n])\n\n/**\n * Field container variant styles using CVA\n */\nexport const fieldVariants = cva(\n \"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\",\n {\n variants: {\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n responsive: [\n \"flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n)\n\n/**\n * FieldContent variant styles using CVA\n */\nexport const fieldContentVariants = cva([\n \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\n])\n\n/**\n * FieldLabel variant styles using CVA\n */\nexport const fieldLabelVariants = cva([\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug\",\n \"group-data-[disabled=true]/field:opacity-50\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border\",\n \"[&>*]:data-[slot=field]:p-4\",\n \"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary\",\n \"dark:has-data-[state=checked]:bg-primary/10\",\n])\n\n/**\n * FieldTitle variant styles using CVA\n */\nexport const fieldTitleVariants = cva([\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium\",\n \"group-data-[disabled=true]/field:opacity-50\",\n])\n\n/**\n * FieldDescription variant styles using CVA\n */\nexport const fieldDescriptionVariants = cva([\n \"text-[color:var(--form-helper-fg)] text-[length:var(--form-helper-size)] leading-normal font-normal\",\n \"group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n])\n\n/**\n * FieldSeparator variant styles using CVA\n */\nexport const fieldSeparatorVariants = cva([\n \"relative -my-2 h-5 text-sm\",\n \"group-data-[variant=outline]/field-group:-mb-2\",\n])\n\n/**\n * FieldError variant styles using CVA\n */\nexport const fieldErrorVariants = cva(\n \"text-[color:var(--form-error-fg)] text-[length:var(--form-error-size)] font-[var(--form-error-weight)]\"\n)\n\n// Export variant prop types\nexport type FieldVariantProps = VariantProps<typeof fieldVariants>\nexport type FieldLegendVariantProps = VariantProps<typeof fieldLegendVariants>\n","import type {\n FieldContentProps,\n FieldDescriptionProps,\n FieldErrorProps,\n FieldGroupProps,\n FieldLabelProps,\n FieldLegendProps,\n FieldProps,\n FieldSeparatorProps,\n FieldSetProps,\n FieldTitleProps,\n} from \"./Field.types\"\n\nimport { useId, useMemo } from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Divider } from \"../../primitives/Divider\"\nimport { Label } from \"../../primitives/Label\"\nimport {\n fieldContentVariants,\n fieldDescriptionVariants,\n fieldErrorVariants,\n fieldGroupVariants,\n fieldLabelVariants,\n fieldLegendVariants,\n fieldSeparatorVariants,\n fieldSetVariants,\n fieldTitleVariants,\n fieldVariants,\n} from \"./Field.variants\"\n\nfunction FieldSet({ className, ...props }: FieldSetProps) {\n return (\n <fieldset\n className={cn(fieldSetVariants(), className)}\n data-slot=\"field-set\"\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: FieldLegendProps) {\n return (\n <legend\n className={cn(fieldLegendVariants({ variant }), className)}\n data-slot=\"field-legend\"\n data-variant={variant}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: FieldGroupProps) {\n return (\n <div\n className={cn(fieldGroupVariants(), className)}\n data-slot=\"field-group\"\n {...props}\n />\n )\n}\n\nfunction Field({ className, orientation = \"vertical\", ...props }: FieldProps) {\n return (\n <div\n className={cn(fieldVariants({ orientation }), className)}\n data-orientation={orientation}\n data-slot=\"field\"\n role=\"group\"\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: FieldContentProps) {\n return (\n <div\n className={cn(fieldContentVariants(), className)}\n data-slot=\"field-content\"\n {...props}\n />\n )\n}\n\nfunction FieldLabel({ className, ...props }: FieldLabelProps) {\n return (\n <Label\n className={cn(fieldLabelVariants(), className)}\n data-slot=\"field-label\"\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: FieldTitleProps) {\n return (\n <div\n className={cn(fieldTitleVariants(), className)}\n data-slot=\"field-label\"\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, id, ...props }: FieldDescriptionProps) {\n const generatedId = useId()\n return (\n <p\n className={cn(fieldDescriptionVariants(), className)}\n data-slot=\"field-description\"\n id={id ?? generatedId}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({ children, className, ...props }: FieldSeparatorProps) {\n return (\n <div\n className={cn(fieldSeparatorVariants(), className)}\n data-content={!!children}\n data-slot=\"field-separator\"\n {...props}\n >\n <Divider className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"bg-background text-muted-foreground relative mx-auto block w-fit px-2\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({ className, children, errors, id, ...props }: FieldErrorProps) {\n const generatedId = useId()\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n\n if (uniqueErrors.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map(\n (error) =>\n error?.message && <li key={error.message}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n aria-live=\"polite\"\n className={cn(fieldErrorVariants(), className)}\n data-slot=\"field-error\"\n id={id ?? generatedId}\n role=\"alert\"\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from './chunk-
|
|
1
|
+
import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from './chunk-WCMRVCIM.js';
|
|
2
2
|
import { cn } from './chunk-HRNDJU7D.js';
|
|
3
3
|
import { EyeIcon, ClockIcon, CheckIcon, AlertCircleIcon, ArchiveIcon, ChevronDownIcon } from 'lucide-react';
|
|
4
4
|
import { useId, useState, useMemo } from 'react';
|
|
@@ -282,5 +282,5 @@ function TaskStatus({
|
|
|
282
282
|
}
|
|
283
283
|
|
|
284
284
|
export { ALL_STATUSES, DEFAULT_STATUS_CONFIGS, TaskStatus, taskStatusColorVariants, taskStatusIconVariants, taskStatusLabelVariants, taskStatusMenuItemVariants, taskStatusTriggerVariants, taskStatusVariants };
|
|
285
|
-
//# sourceMappingURL=chunk-
|
|
286
|
-
//# sourceMappingURL=chunk-
|
|
285
|
+
//# sourceMappingURL=chunk-A4O3USMA.js.map
|
|
286
|
+
//# sourceMappingURL=chunk-A4O3USMA.js.map
|