@etus/ui 0.4.0-beta.16 → 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-VORFH6HQ.js → chunk-37KLBMFQ.js} +3 -3
- package/dist/chunk-37KLBMFQ.js.map +1 -0
- 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-COZXTBIU.js → chunk-DSCLJ3GK.js} +30 -11
- package/dist/chunk-DSCLJ3GK.js.map +1 -0
- 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-FCIF6H6E.js → chunk-IA24GUNV.js} +24 -24
- 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-5U5XAOES.js → chunk-JDG5A44W.js} +73 -34
- 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 +3 -3
- package/dist/components/advanced/RichTextEditor/index.js +2 -2
- package/dist/components/advanced/index.js +18 -18
- 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 +26 -26
- 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 +9 -9
- 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 +111 -111
- package/dist/components/layout/Card/index.js +1 -1
- package/dist/components/layout/Section/index.js +1 -1
- package/dist/components/layout/index.js +5 -5
- 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/LogoConta/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 +21 -21
- 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 +17 -17
- 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 +41 -12
- package/dist/index.js +111 -111
- 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-4Y72SPNL.js.map +0 -1
- package/dist/chunk-5GE3BQA7.js.map +0 -1
- package/dist/chunk-5U5XAOES.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-COZXTBIU.js.map +0 -1
- package/dist/chunk-DYDXGWH2.js.map +0 -1
- package/dist/chunk-FCIF6H6E.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-U6EOAIPK.js.map +0 -1
- package/dist/chunk-UPK5B2FL.js.map +0 -1
- package/dist/chunk-VAVE4ZJF.js.map +0 -1
- package/dist/chunk-VORFH6HQ.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
|
@@ -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":";;;;;;;AAYA,IAAM,iBAAA,GAAoB,GAAA;AAAA,EACxB,2EAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,oCAAA;AAAA,QACJ,EAAA,EAAI,oCAAA;AAAA,QACJ,OAAA,EAAS,yCAAA;AAAA,QACT,EAAA,EAAI,oCAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,WAAA,EAAa;AAAA,QACX,MAAA,EAAQ,eAAA;AAAA,QACR,KAAA,EAAO,cAAA;AAAA,QACP,IAAA,EAAM;AAAA,OACR;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,yCAAA;AAAA,QACN,EAAA,EAAI,uCAAA;AAAA,QACJ,OAAA,EAAS,4CAAA;AAAA,QACT,EAAA,EAAI,uCAAA;AAAA,QACJ,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,SAAA;AAAA,MACN,WAAA,EAAa,QAAA;AAAA,MACb,OAAA,EAAS;AAAA;AACX;AAEJ;AAmCA,SAAS,SAAA,CAAU;AAAA,EACjB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,WAAA,GAAc,QAAA;AAAA,EACd,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,OAAA;AAAA,EACP,IAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAmB;AACjB,EAAA,MAAM,WAAA,GAAoB,kBAAY,MAAM;AAC1C,IAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,OAAO,CAAC,CAAA;AAEtB,EAAA,MAAM,aAAA,GAAsB,KAAA,CAAA,WAAA;AAAA,IAC1B,CAAC,KAAA,KAA+B;AAC9B,MAAA,IAAI,QAAA,IAAY,CAAC,OAAA,EAAS;AAE1B,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,OAAA,IAAW,KAAA,CAAM,QAAQ,GAAA,EAAK;AAC9C,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU,OAAO;AAAA,GACpB;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAC,OAAA;AAExB,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,iBAAA,CAAkB,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,CAAA;AAAA,QAChD,iBAAA;AAAA;AAAA,QAEA,aAAA,IAAiB,CAAC,QAAA,IAAY,gBAAA;AAAA;AAAA,QAE9B,aAAA,IAAiB,qGAAA;AAAA;AAAA,QAEjB,QAAA,IAAY,mCAAA;AAAA;AAAA,QAEZ,QAAA,IAAY,mDAAA;AAAA,QACZ;AAAA,OACF;AAAA,MACA,eAAA,EAAe,aAAA,IAAiB,QAAA,GAAW,IAAA,GAAO,MAAA;AAAA,MAClD,cAAA,EAAc,gBAAgB,QAAA,GAAW,MAAA;AAAA,MACzC,WAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAa,MAAA;AAAA,MACb,iBAAe,QAAA,IAAY,MAAA;AAAA,MAC3B,WAAA,EAAU,WAAA;AAAA,MACV,IAAA,EAAM,gBAAgB,QAAA,GAAW,MAAA;AAAA,MACjC,QAAA,EAAU,aAAA,GAAiB,QAAA,GAAW,EAAA,GAAK,CAAA,GAAK,MAAA;AAAA,MAChD,OAAA,EAAS,gBAAgB,WAAA,GAAc,MAAA;AAAA,MACvC,SAAA,EAAW,gBAAgB,aAAA,GAAgB,MAAA;AAAA,MAC1C,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,IAAA,KAAS,OAAA,mBACR,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAK,GAAA,IAAO,EAAA;AAAA,YACZ,SAAA,EAAU,WAAA;AAAA,YACV,WAAA,EAAU,iBAAA;AAAA,YACV,QAAA;AAAA,YACA,SAAA,EAAU,OAAA;AAAA,YACV,WAAA;AAAA,YACA,KAAK,GAAA,IAAO;AAAA;AAAA,SACd,mBAEA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU,kBAAA;AAAA,YACV,WAAA,EAAU,gBAAA;AAAA,YACV,KAAA,EAAO,EAAE,eAAA,EAAiB,IAAA;AAAK;AAAA,SACjC;AAAA,QAED;AAAA;AAAA;AAAA,GACH;AAEJ;AAcA,SAAS,YAAA,CAAa;AAAA,EACpB,QAAA,GAAW,cAAA;AAAA,EACX,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsB;AACpB,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,mIAAA;AAAA,QACA,4EAAA;AAAA,QACA,aAAa,aAAA,IAAiB,qBAAA;AAAA,QAC9B,aAAa,cAAA,IAAkB,sBAAA;AAAA,QAC/B;AAAA,OACF;AAAA,MACA,eAAA,EAAe,QAAA;AAAA,MACf,WAAA,EAAU,eAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAQA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,QAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,WAAW,IAAA,KAAS,IAAA,GAAO,EAAA,GAAK,IAAA,KAAS,OAAO,EAAA,GAAK,EAAA;AAC3D,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,4EAAA;AAAA,UACA,iDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,aAAA,EAAY,MAAA;AAAA,QACZ,WAAA,EAAU,wBAAA;AAAA,QAEV,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,cAAA,EAAe,QAAQ,QAAA,EAAU,OAAA,EAAQ,WAAA,EAAY,KAAA,EAAO,QAAA,EACpE,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iBAAgB,CAAA,EAC1B;AAAA;AAAA,KACF;AAAA,IACC,QAAA,oBACC,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,mHAAA;AAAA,QACV,WAAA,EAAU,oBAAA;AAAA,QAET,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ;AAMA,SAAS,cAAA,CAAe;AAAA,EACtB,QAAA,GAAW,UAAA;AAAA,EACX,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAwB;AAItB,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,0GAAA;AAAA,QACA,0BAAA;AAAA,QACA,+HAAA;AAAA,QACA,aAAa,UAAA,IAAc,cAAA;AAAA,QAC3B,aAAa,WAAA,IAAe,eAAA;AAAA,QAC5B;AAAA,OACF;AAAA,MACA,eAAA,EAAe,QAAA;AAAA,MACf,WAAA,EAAU,iBAAA;AAAA,MACT,GAAI;AAAA;AAAA,GACP;AAEJ;AAaA,SAAS,iBAAA,CAAkB;AAAA,EACzB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,UAAA;AAAA,EACX,SAAA;AAAA,EACA,cAAc,SAAA,GAAY;AAC5B,CAAA,EAA2B;AACzB,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,yJAAA;AAAA,QACA,2CAAA;AAAA,QACA,aAAa,UAAA,IAAc,cAAA;AAAA,QAC3B,aAAa,WAAA,IAAe,eAAA;AAAA;AAAA,QAE5B,UACI,+HAAA,GACA,8DAAA;AAAA,QACJ;AAAA,OACF;AAAA,MACA,YAAA,EAAY,SAAA;AAAA,MACZ,cAAA,EAAc,OAAA;AAAA,MACd,gBAAc,OAAA,IAAW,MAAA;AAAA,MACzB,WAAA,EAAU,oBAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,QAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,QAAA,QAAA,CAAS,CAAC,SAAS,CAAC,CAAA;AAAA,MACtB,CAAA;AAAA,MACA,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,UAAA,QAAA,CAAS,CAAC,SAAS,CAAC,CAAA;AAAA,QACtB;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG;AAAA;AAAA,GACnC;AAEJ;AAaA,SAAS,YAAA,CAAa;AAAA,EACpB,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,WAAA;AAAA,EACX,SAAA;AAAA,EACA,cAAc,SAAA,GAAY;AAC5B,CAAA,EAAsB;AACpB,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,2HAAA;AAAA,QACA,aAAa,UAAA,IAAc,kBAAA;AAAA,QAC3B,aAAa,WAAA,IAAe,mBAAA;AAAA,QAC5B,SACI,yDAAA,GACA,qHAAA;AAAA,QACJ;AAAA,OACF;AAAA,MACA,YAAA,EAAY,SAAA;AAAA,MACZ,cAAA,EAAc,MAAA;AAAA,MACd,eAAa,MAAA,IAAU,MAAA;AAAA,MACvB,WAAA,EAAU,eAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,QAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,QAAA,QAAA,CAAS,CAAC,QAAQ,CAAC,CAAA;AAAA,MACrB,CAAA;AAAA,MACA,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,UAAA,QAAA,CAAS,CAAC,QAAQ,CAAC,CAAA;AAAA,QACrB;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,SAAS,cAAA,GAAiB,MAAA;AAAA,UAChC,MAAA,EAAO,IAAA;AAAA,UACP,MAAA,EAAO,cAAA;AAAA,UACP,cAAA,EAAe,OAAA;AAAA,UACf,WAAA,EAAY,KAAA;AAAA,UACZ,OAAA,EAAQ,WAAA;AAAA,UACR,KAAA,EAAM,IAAA;AAAA,UAEN,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oFAAA,EAAqF;AAAA;AAAA;AAC/F;AAAA,GACF;AAEJ;AAIA,SAAA,CAAU,GAAA,GAAM,YAAA;AAChB,SAAA,CAAU,WAAA,GAAc,oBAAA;AACxB,SAAA,CAAU,KAAA,GAAQ,cAAA;AAClB,SAAA,CAAU,QAAA,GAAW,iBAAA;AACrB,SAAA,CAAU,GAAA,GAAM,YAAA","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":";;;;;;;;;AAuBA,IAAM,UAAA,GAAa;AAAA,EACjB,EAAA,EAAI;AAAA,IACF,KAAA,EAAO,wFAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,EAAA,EAAI;AAAA,IACF,KAAA,EAAO,wFAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,EAAA,EAAI;AAAA,IACF,KAAA,EAAO,wFAAA;AAAA,IACP,OAAA,EAAS;AAAA;AAEb,CAAA;AAKA,IAAM,UAAA,GAAa;AAAA,EACjB,EAAA,EAAI,OAAA;AAAA,EACJ,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAA;AAKA,IAAM,WAAA,GAAc;AAAA,EAClB,EAAA,EAAI,cAAA;AAAA,EACJ,IAAA,EAAM,kBAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAA;AAmBA,SAAS,OAAA,CAAQ;AAAA,EACf,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA,GAAY,IAAA;AAAA,EACZ,MAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiB;AAEf,EAAA,MAAM,aAAA,GAA8B,KAAA,KAAU,KAAA,KAAU,MAAA,GACpD,KAAA,GAAQ,IAAI,IAAA,GAAO,KAAA,GAAQ,CAAA,GAAI,MAAA,GAAS,SAAA,GACxC,SAAA,CAAA;AAEJ,EAAA,MAAM,SAAA,GAAY,WAAW,aAAa,CAAA;AAC1C,EAAA,MAAM,UAAA,GAAa,YAAY,aAAa,CAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,WAAW,IAAI,CAAA;AAClC,EAAA,MAAM,iBACJ,aAAA,KAAkB,IAAA,GACd,8BAAA,GACA,aAAA,KAAkB,SAChB,gCAAA,GACA,mCAAA;AAGR,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,OAAA,EAAS,EAAA;AAAA,IACT,KAAA,EAAO,wCAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBACE,IAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA,CAAG,aAAA,CAAc,OAAO,GAAG,SAAS,CAAA;AAAA,QAC/C,WAAA,EAAU,UAAA;AAAA,QACT,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,UAAA,EAAA,EAAW,WAAU,iDAAA,EACpB,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,cAAA,EAAA,EAAe,WAAU,UAAA,EAAW,CAAA;AAAA,4BACrC,GAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,QAAA,EAAS;AAAA,WAAA,EACrC,CAAA;AAAA,+BACC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,cAAA,EAAA,EAAe,WAAU,eAAA,EAAgB,CAAA;AAAA,4BAC1C,GAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,UAAA,EAAW;AAAA,WAAA,EACvC;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,aAAA,CAAc,OAAO,GAAG,SAAS,CAAA;AAAA,MAC/C,WAAA,EAAU,UAAA;AAAA,MACT,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,UAAA,EAAA,EAAW,WAAU,iDAAA,EACpB,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2BAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,2CAAA,EAClB,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,YACC,QAAA,oBACC,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,+BAAA;AAAA,gBACV,WAAA,EAAU,oBAAA;AAAA,gBAET,QAAA,EAAA;AAAA;AAAA;AACH,WAAA,EAEJ,CAAA;AAAA,0BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,YAAA,oBACC,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,wGAAA;AAAA,gBACV,WAAA,EAAU,wBAAA;AAAA,gBAET,QAAA,EAAA;AAAA;AAAA,aACH;AAAA,YAED,IAAA,IAAQ,CAAC,YAAA,oBACR,GAAA,CAAC,UAAK,SAAA,EAAU,uBAAA,EAAwB,WAAA,EAAU,eAAA,EAC/C,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,YAED,YAAA,oBACC,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,uBAAA;AAAA,gBACV,WAAA,EAAU,wBAAA;AAAA,gBAET,QAAA,EAAA;AAAA;AAAA,aACH;AAAA,YAED,MAAA,IAAU,CAAC,IAAA,IAAQ,CAAC,YAAA,IAAgB,CAAC,YAAA,oBACpC,GAAA,CAAC,MAAA,EAAA,EAAK,WAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,MAAA,EAAO;AAAA,WAAA,EAE9C;AAAA,SAAA,EACF,CAAA;AAAA,6BACC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gCAAA,EACb,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA,CAAG,UAAA,CAAW,KAAA,EAAO,cAAc,CAAA;AAAA,kBAC9C,WAAA,EAAU,gBAAA;AAAA,kBAET,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,cACC,UAAU,MAAA,oBACT,IAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA,CAAG,8BAAA,EAAgC,UAAU,CAAA;AAAA,kBACxD,WAAA,EAAU,gBAAA;AAAA,kBACV,YAAA,EAAY,aAAA;AAAA,kBAEX,QAAA,EAAA;AAAA,oBAAA,SAAA,mBACC,IAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACC,OACE,aAAA,KAAkB,IAAA,GACd,SAAA,GACA,aAAA,KAAkB,SAClB,aAAA,GACA,OAAA;AAAA,wBAEN,WAAA,kBAAa,GAAA,CAAC,SAAA,EAAA,EAAU,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,wBAC3C,IAAA,EAAK,IAAA;AAAA,wBACL,IAAA,EAAK,YAAA;AAAA,wBAEJ,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,0BAAE;AAAA;AAAA;AAAA,wCAGnB,IAAA,CAAC,MAAA,EAAA,EAAK,WAAW,EAAA,CAAG,2BAAA,EAA6B,UAAU,CAAA,EACzD,QAAA,EAAA;AAAA,sCAAA,GAAA,CAAC,SAAA,EAAA,EAAU,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,sCACtD,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,wBAAE;AAAA,uBAAA,EAAC;AAAA,qBAAA,EAClD,CAAA;AAAA,oBAED,UAAA,oBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCACb,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,oBAED,wBACC,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,SAAA,EAAU,WAAA,EAAU,iBACjC,QAAA,EAAA,IAAA,EACH;AAAA;AAAA;AAAA;AAEJ,aAAA,EAEJ,CAAA;AAAA,YACC,SAAA,IAAa,SAAA,CAAU,MAAA,GAAS,CAAA,oBAC/B,GAAA;AAAA,cAAC,SAAA;AAAA,cAAA;AAAA,gBACC,aAAA,EAAY,MAAA;AAAA,gBACZ,KAAA,EAAO,cAAA;AAAA,gBACP,IAAA,EAAM,SAAA;AAAA,gBACN,WAAA,EAAU,oBAAA;AAAA,gBACV,MAAA,EAAQ,EAAA;AAAA,gBACR,KAAA,EAAO,EAAE,OAAA,EAAS,mCAAA,EAAoC;AAAA,gBACtD,OAAA,EAAQ,KAAA;AAAA,gBACR,KAAA,EAAO;AAAA;AAAA;AACT,WAAA,EAEJ,CAAA;AAAA,UACC,gBAAgB,MAAA,oBACf,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAO,WAAA,EAAU,mBAAA,EAC7B,QAAA,EAAA,OAAO,WAAA,KAAgB,2BACtB,GAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAO,WAAA,EAAa,IAEjC,WAAA,EAEJ;AAAA,SAAA,EAEJ,CAAA;AAAA,wBAEA,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EACb,QAAA,EAAA;AAAA,UAAA,KAAA;AAAA,UAAM,IAAA;AAAA,UAAG,KAAA;AAAA,UACT,UAAU,MAAA,IAAa,CAAA,EAAA,EAAK,aAAA,KAAkB,IAAA,GAAO,OAAO,aAAA,KAAkB,MAAA,GAAS,MAAA,GAAS,WAAW,IAAI,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,UACtI,UAAA,IAAc,IAAI,UAAU,CAAA;AAAA,SAAA,EAC/B;AAAA;AAAA;AAAA,GACF;AAEJ;AAgBA,SAAS,YAAA,CAAa;AAAA,EACpB,QAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,GAAA,GAAM,IAAA;AAAA,EACN,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsB;AACpB,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,MAAA;AAAA,QACA,WAAA,KAAgB,eACZ,uBAAA,GACA,UAAA;AAAA,QACJ,WAAW,GAAG,CAAA;AAAA,QACd;AAAA,OACF;AAAA,MACA,kBAAA,EAAkB,WAAA;AAAA,MAClB,WAAA,EAAU,gBAAA;AAAA,MACT,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ","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":"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","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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/workflow/TaskStatus/TaskStatus.variants.ts","../src/components/workflow/TaskStatus/TaskStatus.tsx"],"names":[],"mappings":"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","file":"chunk-E2TI5V67.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * TaskStatus container variants\n */\nexport const taskStatusVariants = cva(\n \"inline-flex items-center gap-1.5 font-medium transition-all duration-200\",\n {\n compoundVariants: [\n // Interactive states\n {\n className: \"cursor-pointer hover:opacity-80\",\n interactive: true,\n },\n {\n className: \"cursor-not-allowed opacity-50\",\n disabled: true,\n },\n ],\n defaultVariants: {\n disabled: false,\n interactive: false,\n size: \"default\",\n variant: \"default\",\n },\n variants: {\n disabled: {\n false: \"\",\n true: \"\",\n },\n interactive: {\n false: \"\",\n true: \"\",\n },\n size: {\n default: \"px-3 py-1.5 text-sm\",\n lg: \"px-4 py-2 text-base\",\n sm: \"px-2 py-1 text-xs\",\n },\n variant: {\n default: \"rounded-md bg-muted\",\n outline: \"rounded-md border border-current bg-transparent\",\n pill: \"rounded-full bg-muted\",\n subtle: \"rounded-md bg-muted/30\",\n },\n },\n }\n)\n\n/**\n * Status-specific color variants using semantic tokens\n * Only applies text colors - background is controlled by variant prop\n */\nexport const taskStatusColorVariants = cva(\"\", {\n defaultVariants: {\n status: \"todo\",\n },\n variants: {\n status: {\n backlog: \"text-[color:var(--task-status-backlog-text)]\",\n blocked: \"text-[color:var(--task-status-blocked-text)]\",\n done: \"text-[color:var(--task-status-done-text)]\",\n \"in-progress\": \"text-[color:var(--task-status-in-progress-text)]\",\n \"in-review\": \"text-[color:var(--task-status-in-review-text)]\",\n todo: \"text-[color:var(--task-status-todo-text)]\",\n },\n },\n})\n\n/**\n * Icon container variants\n */\nexport const taskStatusIconVariants = cva(\"shrink-0\", {\n defaultVariants: {\n size: \"default\",\n },\n variants: {\n size: {\n default: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n sm: \"h-3.5 w-3.5\",\n },\n },\n})\n\n/**\n * Label variants\n */\nexport const taskStatusLabelVariants = cva(\"font-medium leading-none\", {\n defaultVariants: {\n size: \"default\",\n },\n variants: {\n size: {\n default: \"text-sm\",\n lg: \"text-base\",\n sm: \"text-xs\",\n },\n },\n})\n\n/**\n * Trigger button variants (for interactive mode)\n */\nexport const taskStatusTriggerVariants = cva(\n \"ml-1 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n {\n defaultVariants: {\n size: \"default\",\n },\n variants: {\n size: {\n default: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n sm: \"h-3 w-3\",\n },\n },\n }\n)\n\n/**\n * Dropdown menu item variants\n */\nexport const taskStatusMenuItemVariants = cva(\n \"flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground\",\n {\n defaultVariants: {\n selected: false,\n },\n variants: {\n selected: {\n false: \"\",\n true: \"bg-accent/50\",\n },\n },\n }\n)\n\n// Export variant prop types\nexport type TaskStatusVariantProps = VariantProps<typeof taskStatusVariants>\nexport type TaskStatusColorVariantProps = VariantProps<typeof taskStatusColorVariants>\nexport type TaskStatusIconVariantProps = VariantProps<typeof taskStatusIconVariants>\nexport type TaskStatusLabelVariantProps = VariantProps<typeof taskStatusLabelVariants>\nexport type TaskStatusTriggerVariantProps = VariantProps<typeof taskStatusTriggerVariants>\nexport type TaskStatusMenuItemVariantProps = VariantProps<typeof taskStatusMenuItemVariants>\n","\"use client\"\n\nimport type { StatusType, TaskStatusConfigMap, TaskStatusProps } from \"./TaskStatus.types\"\n\nimport {\n AlertCircleIcon,\n ArchiveIcon,\n CheckIcon,\n ChevronDownIcon,\n ClockIcon,\n EyeIcon,\n} from \"lucide-react\"\nimport { useId, useMemo, useState } from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../../navigation/DropdownMenu\"\nimport {\n taskStatusColorVariants,\n taskStatusIconVariants,\n taskStatusLabelVariants,\n taskStatusTriggerVariants,\n taskStatusVariants,\n} from \"./TaskStatus.variants\"\n\n/**\n * Default status configurations with labels, colors, and icons\n */\nconst DEFAULT_STATUS_CONFIGS: TaskStatusConfigMap = {\n backlog: {\n color: \"text-muted-foreground\",\n icon: <ArchiveIcon />,\n label: \"Backlog\",\n },\n blocked: {\n color: \"text-destructive\",\n icon: <AlertCircleIcon />,\n label: \"Blocked\",\n },\n done: {\n color: \"text-green-600 dark:text-green-400\",\n icon: <CheckIcon />,\n label: \"Done\",\n },\n \"in-progress\": {\n color: \"text-blue-600 dark:text-blue-400\",\n icon: <ClockIcon />,\n label: \"In Progress\",\n },\n \"in-review\": {\n color: \"text-yellow-600 dark:text-yellow-400\",\n icon: <EyeIcon />,\n label: \"In Review\",\n },\n todo: {\n color: \"text-muted-foreground\",\n icon: null,\n label: \"To Do\",\n },\n}\n\n/**\n * List of all available statuses for the dropdown\n */\nconst ALL_STATUSES: StatusType[] = [\n \"todo\",\n \"in-progress\",\n \"in-review\",\n \"done\",\n \"blocked\",\n \"backlog\",\n]\n\n/**\n * TaskStatus - A component that displays the status of a task visually.\n *\n * Can be used as a simple badge or as an interactive dropdown to change status.\n * Supports multiple visual variants and sizes.\n *\n * @example\n * // Simple status badge\n * <TaskStatus status=\"in-progress\" />\n *\n * @example\n * // Interactive status dropdown\n * <TaskStatus\n * status={status}\n * interactive\n * onChange={setStatus}\n * />\n *\n * @example\n * // Pill variant without icon\n * <TaskStatus\n * status=\"done\"\n * variant=\"pill\"\n * showIcon={false}\n * />\n */\nfunction TaskStatus({\n children,\n className,\n customStatuses,\n disabled = false,\n interactive = false,\n onChange,\n ref,\n showIcon = true,\n showLabel = true,\n size = \"default\",\n status,\n variant = \"default\",\n ...props\n}: TaskStatusProps) {\n const id = useId()\n const [isOpen, setIsOpen] = useState(false)\n\n // Merge custom status configs with defaults\n const statusConfigs = useMemo(\n () => ({\n ...DEFAULT_STATUS_CONFIGS,\n ...customStatuses,\n }),\n [customStatuses]\n )\n\n const currentConfig = statusConfigs[status]\n\n const handleStatusSelect = (newStatus: StatusType) => {\n if (!disabled && onChange) {\n onChange(newStatus)\n }\n setIsOpen(false)\n }\n\n // Render content (icon + label)\n const renderContent = () => {\n if (children) {\n return children\n }\n\n return (\n <>\n {showIcon && currentConfig.icon && (\n <span\n className={cn(taskStatusIconVariants({ size }))}\n data-slot=\"task-status-icon\"\n >\n {currentConfig.icon}\n </span>\n )}\n {showLabel && (\n <span\n className={cn(taskStatusLabelVariants({ size }))}\n data-slot=\"task-status-label\"\n >\n {currentConfig.label}\n </span>\n )}\n </>\n )\n }\n\n // Base status element\n const statusElement = (\n <div\n ref={ref}\n className={cn(\n taskStatusVariants({ disabled, interactive, size, variant }),\n taskStatusColorVariants({ status }),\n className\n )}\n aria-disabled={disabled}\n aria-label={`Status: ${currentConfig.label}`}\n aria-live=\"polite\"\n data-slot=\"task-status\"\n data-status={status}\n id={`task-status-${id}`}\n role=\"status\"\n {...props}\n >\n {renderContent()}\n {interactive && !disabled && (\n <ChevronDownIcon\n className={cn(\n taskStatusTriggerVariants({ size }),\n isOpen && \"rotate-180 transition-transform\"\n )}\n data-slot=\"task-status-trigger\"\n />\n )}\n </div>\n )\n\n // If not interactive, just return the status element\n if (!interactive || disabled) {\n return statusElement\n }\n\n // Interactive mode with dropdown\n return (\n <DropdownMenu open={isOpen} onOpenChange={setIsOpen}>\n <DropdownMenuTrigger asChild disabled={disabled}>\n {statusElement}\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"min-w-36\">\n {ALL_STATUSES.map((statusOption) => {\n const config = statusConfigs[statusOption]\n const isSelected = statusOption === status\n\n return (\n <DropdownMenuItem\n key={statusOption}\n className={cn(\n \"flex items-center gap-2\",\n isSelected && \"bg-accent/50\"\n )}\n onClick={() => { handleStatusSelect(statusOption); }}\n >\n {config.icon && (\n <span\n className={cn(\n taskStatusIconVariants({ size: \"sm\" }),\n config.color\n )}\n >\n {config.icon}\n </span>\n )}\n <span className=\"flex-1\">{config.label}</span>\n {isSelected && (\n <CheckIcon className=\"h-4 w-4 text-primary\" />\n )}\n </DropdownMenuItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport { ALL_STATUSES, DEFAULT_STATUS_CONFIGS, TaskStatus }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/workflow/TaskStatus/TaskStatus.variants.ts","../src/components/workflow/TaskStatus/TaskStatus.tsx"],"names":[],"mappings":";;;;;;;AAKO,IAAM,kBAAA,GAAqB,GAAA;AAAA,EAChC,0EAAA;AAAA,EACA;AAAA,IACE,gBAAA,EAAkB;AAAA;AAAA,MAEhB;AAAA,QACE,SAAA,EAAW,iCAAA;AAAA,QACX,WAAA,EAAa;AAAA,OACf;AAAA,MACA;AAAA,QACE,SAAA,EAAW,+BAAA;AAAA,QACX,QAAA,EAAU;AAAA;AACZ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,QAAA,EAAU,KAAA;AAAA,MACV,WAAA,EAAa,KAAA;AAAA,MACb,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA,IACA,QAAA,EAAU;AAAA,MACR,QAAA,EAAU;AAAA,QACR,KAAA,EAAO,EAAA;AAAA,QACP,IAAA,EAAM;AAAA,OACR;AAAA,MACA,WAAA,EAAa;AAAA,QACX,KAAA,EAAO,EAAA;AAAA,QACP,IAAA,EAAM;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,qBAAA;AAAA,QACT,EAAA,EAAI,qBAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,qBAAA;AAAA,QACT,OAAA,EAAS,iDAAA;AAAA,QACT,IAAA,EAAM,uBAAA;AAAA,QACN,MAAA,EAAQ;AAAA;AACV;AACF;AAEJ;AAMO,IAAM,uBAAA,GAA0B,IAAI,EAAA,EAAI;AAAA,EAC7C,eAAA,EAAiB;AAAA,IACf,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,QAAA,EAAU;AAAA,IACR,MAAA,EAAQ;AAAA,MACN,OAAA,EAAS,8CAAA;AAAA,MACT,OAAA,EAAS,8CAAA;AAAA,MACT,IAAA,EAAM,2CAAA;AAAA,MACN,aAAA,EAAe,kDAAA;AAAA,MACf,WAAA,EAAa,gDAAA;AAAA,MACb,IAAA,EAAM;AAAA;AACR;AAEJ,CAAC;AAKM,IAAM,sBAAA,GAAyB,IAAI,UAAA,EAAY;AAAA,EACpD,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM;AAAA,GACR;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,SAAA;AAAA,MACT,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI;AAAA;AACN;AAEJ,CAAC;AAKM,IAAM,uBAAA,GAA0B,IAAI,0BAAA,EAA4B;AAAA,EACrE,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM;AAAA,GACR;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,SAAA;AAAA,MACT,EAAA,EAAI,WAAA;AAAA,MACJ,EAAA,EAAI;AAAA;AACN;AAEJ,CAAC;AAKM,IAAM,yBAAA,GAA4B,GAAA;AAAA,EACvC,qKAAA;AAAA,EACA;AAAA,IACE,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA,KACR;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,SAAA;AAAA,QACT,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN;AACF;AAEJ;AAKO,IAAM,0BAAA,GAA6B,GAAA;AAAA,EACxC,uMAAA;AAAA,EACA;AAAA,IACE,eAAA,EAAiB;AAAA,MACf,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,QAAA,EAAU;AAAA,QACR,KAAA,EAAO,EAAA;AAAA,QACP,IAAA,EAAM;AAAA;AACR;AACF;AAEJ;ACxGA,IAAM,sBAAA,GAA8C;AAAA,EAClD,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,uBAAA;AAAA,IACP,IAAA,sBAAO,WAAA,EAAA,EAAY,CAAA;AAAA,IACnB,KAAA,EAAO;AAAA,GACT;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,kBAAA;AAAA,IACP,IAAA,sBAAO,eAAA,EAAA,EAAgB,CAAA;AAAA,IACvB,KAAA,EAAO;AAAA,GACT;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,oCAAA;AAAA,IACP,IAAA,sBAAO,SAAA,EAAA,EAAU,CAAA;AAAA,IACjB,KAAA,EAAO;AAAA,GACT;AAAA,EACA,aAAA,EAAe;AAAA,IACb,KAAA,EAAO,kCAAA;AAAA,IACP,IAAA,sBAAO,SAAA,EAAA,EAAU,CAAA;AAAA,IACjB,KAAA,EAAO;AAAA,GACT;AAAA,EACA,WAAA,EAAa;AAAA,IACX,KAAA,EAAO,sCAAA;AAAA,IACP,IAAA,sBAAO,OAAA,EAAA,EAAQ,CAAA;AAAA,IACf,KAAA,EAAO;AAAA,GACT;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,uBAAA;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAEX;AAKA,IAAM,YAAA,GAA6B;AAAA,EACjC,MAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF;AA4BA,SAAS,UAAA,CAAW;AAAA,EAClB,QAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,WAAA,GAAc,KAAA;AAAA,EACd,QAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,SAAA,GAAY,IAAA;AAAA,EACZ,IAAA,GAAO,SAAA;AAAA,EACP,MAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,GAAG;AACL,CAAA,EAAoB;AAClB,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAG1C,EAAA,MAAM,aAAA,GAAgB,OAAA;AAAA,IACpB,OAAO;AAAA,MACL,GAAG,sBAAA;AAAA,MACH,GAAG;AAAA,KACL,CAAA;AAAA,IACA,CAAC,cAAc;AAAA,GACjB;AAEA,EAAA,MAAM,aAAA,GAAgB,cAAc,MAAM,CAAA;AAE1C,EAAA,MAAM,kBAAA,GAAqB,CAAC,SAAA,KAA0B;AACpD,IAAA,IAAI,CAAC,YAAY,QAAA,EAAU;AACzB,MAAA,QAAA,CAAS,SAAS,CAAA;AAAA,IACpB;AACA,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAGA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,QAAA,IAAY,cAAc,IAAA,oBACzB,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,WAAW,EAAA,CAAG,sBAAA,CAAuB,EAAE,IAAA,EAAM,CAAC,CAAA;AAAA,UAC9C,WAAA,EAAU,kBAAA;AAAA,UAET,QAAA,EAAA,aAAA,CAAc;AAAA;AAAA,OACjB;AAAA,MAED,SAAA,oBACC,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,WAAW,EAAA,CAAG,uBAAA,CAAwB,EAAE,IAAA,EAAM,CAAC,CAAA;AAAA,UAC/C,WAAA,EAAU,mBAAA;AAAA,UAET,QAAA,EAAA,aAAA,CAAc;AAAA;AAAA;AACjB,KAAA,EAEJ,CAAA;AAAA,EAEJ,CAAA;AAGA,EAAA,MAAM,aAAA,mBACJ,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,mBAAmB,EAAE,QAAA,EAAU,WAAA,EAAa,IAAA,EAAM,SAAS,CAAA;AAAA,QAC3D,uBAAA,CAAwB,EAAE,MAAA,EAAQ,CAAA;AAAA,QAClC;AAAA,OACF;AAAA,MACA,eAAA,EAAe,QAAA;AAAA,MACf,YAAA,EAAY,CAAA,QAAA,EAAW,aAAA,CAAc,KAAK,CAAA,CAAA;AAAA,MAC1C,WAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAU,aAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MACb,EAAA,EAAI,eAAe,EAAE,CAAA,CAAA;AAAA,MACrB,IAAA,EAAK,QAAA;AAAA,MACJ,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,aAAA,EAAc;AAAA,QACd,WAAA,IAAe,CAAC,QAAA,oBACf,GAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,yBAAA,CAA0B,EAAE,IAAA,EAAM,CAAA;AAAA,cAClC,MAAA,IAAU;AAAA,aACZ;AAAA,YACA,WAAA,EAAU;AAAA;AAAA;AACZ;AAAA;AAAA,GAEJ;AAIF,EAAA,IAAI,CAAC,eAAe,QAAA,EAAU;AAC5B,IAAA,OAAO,aAAA;AAAA,EACT;AAGA,EAAA,uBACE,IAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,MAAA,EAAQ,cAAc,SAAA,EACxC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,mBAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EAAC,QAAA,EAC1B,QAAA,EAAA,aAAA,EACH,CAAA;AAAA,oBACA,GAAA,CAAC,uBAAoB,KAAA,EAAM,OAAA,EAAQ,WAAU,UAAA,EAC1C,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,YAAA,KAAiB;AAClC,MAAA,MAAM,MAAA,GAAS,cAAc,YAAY,CAAA;AACzC,MAAA,MAAM,aAAa,YAAA,KAAiB,MAAA;AAEpC,MAAA,uBACE,IAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UAEC,SAAA,EAAW,EAAA;AAAA,YACT,yBAAA;AAAA,YACA,UAAA,IAAc;AAAA,WAChB;AAAA,UACA,SAAS,MAAM;AAAE,YAAA,kBAAA,CAAmB,YAAY,CAAA;AAAA,UAAG,CAAA;AAAA,UAElD,QAAA,EAAA;AAAA,YAAA,MAAA,CAAO,IAAA,oBACN,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,sBAAA,CAAuB,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AAAA,kBACrC,MAAA,CAAO;AAAA,iBACT;AAAA,gBAEC,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,aACV;AAAA,4BAEF,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAU,iBAAO,KAAA,EAAM,CAAA;AAAA,YACtC,UAAA,oBACC,GAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,sBAAA,EAAuB;AAAA;AAAA,SAAA;AAAA,QAnBzC;AAAA,OAqBP;AAAA,IAEJ,CAAC,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ","file":"chunk-A4O3USMA.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * TaskStatus container variants\n */\nexport const taskStatusVariants = cva(\n \"inline-flex items-center gap-1.5 font-medium transition-all duration-200\",\n {\n compoundVariants: [\n // Interactive states\n {\n className: \"cursor-pointer hover:opacity-80\",\n interactive: true,\n },\n {\n className: \"cursor-not-allowed opacity-50\",\n disabled: true,\n },\n ],\n defaultVariants: {\n disabled: false,\n interactive: false,\n size: \"default\",\n variant: \"default\",\n },\n variants: {\n disabled: {\n false: \"\",\n true: \"\",\n },\n interactive: {\n false: \"\",\n true: \"\",\n },\n size: {\n default: \"px-3 py-1.5 text-sm\",\n lg: \"px-4 py-2 text-base\",\n sm: \"px-2 py-1 text-xs\",\n },\n variant: {\n default: \"rounded-md bg-muted\",\n outline: \"rounded-md border border-current bg-transparent\",\n pill: \"rounded-full bg-muted\",\n subtle: \"rounded-md bg-muted/30\",\n },\n },\n }\n)\n\n/**\n * Status-specific color variants using semantic tokens\n * Only applies text colors - background is controlled by variant prop\n */\nexport const taskStatusColorVariants = cva(\"\", {\n defaultVariants: {\n status: \"todo\",\n },\n variants: {\n status: {\n backlog: \"text-[color:var(--task-status-backlog-text)]\",\n blocked: \"text-[color:var(--task-status-blocked-text)]\",\n done: \"text-[color:var(--task-status-done-text)]\",\n \"in-progress\": \"text-[color:var(--task-status-in-progress-text)]\",\n \"in-review\": \"text-[color:var(--task-status-in-review-text)]\",\n todo: \"text-[color:var(--task-status-todo-text)]\",\n },\n },\n})\n\n/**\n * Icon container variants\n */\nexport const taskStatusIconVariants = cva(\"shrink-0\", {\n defaultVariants: {\n size: \"default\",\n },\n variants: {\n size: {\n default: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n sm: \"h-3.5 w-3.5\",\n },\n },\n})\n\n/**\n * Label variants\n */\nexport const taskStatusLabelVariants = cva(\"font-medium leading-none\", {\n defaultVariants: {\n size: \"default\",\n },\n variants: {\n size: {\n default: \"text-sm\",\n lg: \"text-base\",\n sm: \"text-xs\",\n },\n },\n})\n\n/**\n * Trigger button variants (for interactive mode)\n */\nexport const taskStatusTriggerVariants = cva(\n \"ml-1 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n {\n defaultVariants: {\n size: \"default\",\n },\n variants: {\n size: {\n default: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n sm: \"h-3 w-3\",\n },\n },\n }\n)\n\n/**\n * Dropdown menu item variants\n */\nexport const taskStatusMenuItemVariants = cva(\n \"flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground\",\n {\n defaultVariants: {\n selected: false,\n },\n variants: {\n selected: {\n false: \"\",\n true: \"bg-accent/50\",\n },\n },\n }\n)\n\n// Export variant prop types\nexport type TaskStatusVariantProps = VariantProps<typeof taskStatusVariants>\nexport type TaskStatusColorVariantProps = VariantProps<typeof taskStatusColorVariants>\nexport type TaskStatusIconVariantProps = VariantProps<typeof taskStatusIconVariants>\nexport type TaskStatusLabelVariantProps = VariantProps<typeof taskStatusLabelVariants>\nexport type TaskStatusTriggerVariantProps = VariantProps<typeof taskStatusTriggerVariants>\nexport type TaskStatusMenuItemVariantProps = VariantProps<typeof taskStatusMenuItemVariants>\n","\"use client\"\n\nimport type { StatusType, TaskStatusConfigMap, TaskStatusProps } from \"./TaskStatus.types\"\n\nimport {\n AlertCircleIcon,\n ArchiveIcon,\n CheckIcon,\n ChevronDownIcon,\n ClockIcon,\n EyeIcon,\n} from \"lucide-react\"\nimport { useId, useMemo, useState } from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../../navigation/DropdownMenu\"\nimport {\n taskStatusColorVariants,\n taskStatusIconVariants,\n taskStatusLabelVariants,\n taskStatusTriggerVariants,\n taskStatusVariants,\n} from \"./TaskStatus.variants\"\n\n/**\n * Default status configurations with labels, colors, and icons\n */\nconst DEFAULT_STATUS_CONFIGS: TaskStatusConfigMap = {\n backlog: {\n color: \"text-muted-foreground\",\n icon: <ArchiveIcon />,\n label: \"Backlog\",\n },\n blocked: {\n color: \"text-destructive\",\n icon: <AlertCircleIcon />,\n label: \"Blocked\",\n },\n done: {\n color: \"text-green-600 dark:text-green-400\",\n icon: <CheckIcon />,\n label: \"Done\",\n },\n \"in-progress\": {\n color: \"text-blue-600 dark:text-blue-400\",\n icon: <ClockIcon />,\n label: \"In Progress\",\n },\n \"in-review\": {\n color: \"text-yellow-600 dark:text-yellow-400\",\n icon: <EyeIcon />,\n label: \"In Review\",\n },\n todo: {\n color: \"text-muted-foreground\",\n icon: null,\n label: \"To Do\",\n },\n}\n\n/**\n * List of all available statuses for the dropdown\n */\nconst ALL_STATUSES: StatusType[] = [\n \"todo\",\n \"in-progress\",\n \"in-review\",\n \"done\",\n \"blocked\",\n \"backlog\",\n]\n\n/**\n * TaskStatus - A component that displays the status of a task visually.\n *\n * Can be used as a simple badge or as an interactive dropdown to change status.\n * Supports multiple visual variants and sizes.\n *\n * @example\n * // Simple status badge\n * <TaskStatus status=\"in-progress\" />\n *\n * @example\n * // Interactive status dropdown\n * <TaskStatus\n * status={status}\n * interactive\n * onChange={setStatus}\n * />\n *\n * @example\n * // Pill variant without icon\n * <TaskStatus\n * status=\"done\"\n * variant=\"pill\"\n * showIcon={false}\n * />\n */\nfunction TaskStatus({\n children,\n className,\n customStatuses,\n disabled = false,\n interactive = false,\n onChange,\n ref,\n showIcon = true,\n showLabel = true,\n size = \"default\",\n status,\n variant = \"default\",\n ...props\n}: TaskStatusProps) {\n const id = useId()\n const [isOpen, setIsOpen] = useState(false)\n\n // Merge custom status configs with defaults\n const statusConfigs = useMemo(\n () => ({\n ...DEFAULT_STATUS_CONFIGS,\n ...customStatuses,\n }),\n [customStatuses]\n )\n\n const currentConfig = statusConfigs[status]\n\n const handleStatusSelect = (newStatus: StatusType) => {\n if (!disabled && onChange) {\n onChange(newStatus)\n }\n setIsOpen(false)\n }\n\n // Render content (icon + label)\n const renderContent = () => {\n if (children) {\n return children\n }\n\n return (\n <>\n {showIcon && currentConfig.icon && (\n <span\n className={cn(taskStatusIconVariants({ size }))}\n data-slot=\"task-status-icon\"\n >\n {currentConfig.icon}\n </span>\n )}\n {showLabel && (\n <span\n className={cn(taskStatusLabelVariants({ size }))}\n data-slot=\"task-status-label\"\n >\n {currentConfig.label}\n </span>\n )}\n </>\n )\n }\n\n // Base status element\n const statusElement = (\n <div\n ref={ref}\n className={cn(\n taskStatusVariants({ disabled, interactive, size, variant }),\n taskStatusColorVariants({ status }),\n className\n )}\n aria-disabled={disabled}\n aria-label={`Status: ${currentConfig.label}`}\n aria-live=\"polite\"\n data-slot=\"task-status\"\n data-status={status}\n id={`task-status-${id}`}\n role=\"status\"\n {...props}\n >\n {renderContent()}\n {interactive && !disabled && (\n <ChevronDownIcon\n className={cn(\n taskStatusTriggerVariants({ size }),\n isOpen && \"rotate-180 transition-transform\"\n )}\n data-slot=\"task-status-trigger\"\n />\n )}\n </div>\n )\n\n // If not interactive, just return the status element\n if (!interactive || disabled) {\n return statusElement\n }\n\n // Interactive mode with dropdown\n return (\n <DropdownMenu open={isOpen} onOpenChange={setIsOpen}>\n <DropdownMenuTrigger asChild disabled={disabled}>\n {statusElement}\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"min-w-36\">\n {ALL_STATUSES.map((statusOption) => {\n const config = statusConfigs[statusOption]\n const isSelected = statusOption === status\n\n return (\n <DropdownMenuItem\n key={statusOption}\n className={cn(\n \"flex items-center gap-2\",\n isSelected && \"bg-accent/50\"\n )}\n onClick={() => { handleStatusSelect(statusOption); }}\n >\n {config.icon && (\n <span\n className={cn(\n taskStatusIconVariants({ size: \"sm\" }),\n config.color\n )}\n >\n {config.icon}\n </span>\n )}\n <span className=\"flex-1\">{config.label}</span>\n {isSelected && (\n <CheckIcon className=\"h-4 w-4 text-primary\" />\n )}\n </DropdownMenuItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport { ALL_STATUSES, DEFAULT_STATUS_CONFIGS, TaskStatus }\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Badge } from './chunk-
|
|
1
|
+
import { Badge } from './chunk-6ABGMOE2.js';
|
|
2
2
|
import { cn } from './chunk-HRNDJU7D.js';
|
|
3
3
|
import { useRef, useState, useId, useCallback } from 'react';
|
|
4
4
|
import { cva } from 'class-variance-authority';
|
|
@@ -6,7 +6,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
6
6
|
|
|
7
7
|
var tagsInputVariants = cva(
|
|
8
8
|
[
|
|
9
|
-
"flex flex-wrap items-center gap-1.5 w-full min-w-0 rounded-
|
|
9
|
+
"flex flex-wrap items-center gap-1.5 w-full min-w-0 rounded-[var(--tags-input-root-radius)] border bg-transparent transition-[color,box-shadow] outline-none",
|
|
10
10
|
"dark:bg-input/30",
|
|
11
11
|
"focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]",
|
|
12
12
|
"aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed aria-disabled:opacity-50",
|
|
@@ -20,7 +20,7 @@ var tagsInputVariants = cva(
|
|
|
20
20
|
lg: "min-h-10 px-3.5 py-2 text-base"
|
|
21
21
|
},
|
|
22
22
|
variant: {
|
|
23
|
-
default: "border-input shadow-xs",
|
|
23
|
+
default: "border-[color:var(--tags-input-root-border)] shadow-xs",
|
|
24
24
|
filled: "border-transparent bg-muted",
|
|
25
25
|
flushed: "rounded-none border-x-0 border-t-0 border-b-input px-0"
|
|
26
26
|
}
|
|
@@ -33,7 +33,7 @@ var tagsInputVariants = cva(
|
|
|
33
33
|
);
|
|
34
34
|
var tagsInputInputVariants = cva(
|
|
35
35
|
[
|
|
36
|
-
"flex-1 min-w-24 bg-
|
|
36
|
+
"flex-1 min-w-24 bg-[color:var(--tags-input-input-background)] outline-none",
|
|
37
37
|
"placeholder:text-muted-foreground",
|
|
38
38
|
"disabled:cursor-not-allowed"
|
|
39
39
|
],
|
|
@@ -195,5 +195,5 @@ function TagsInput({
|
|
|
195
195
|
}
|
|
196
196
|
|
|
197
197
|
export { TagsInput, tagsInputInputVariants, tagsInputVariants };
|
|
198
|
-
//# sourceMappingURL=chunk-
|
|
199
|
-
//# sourceMappingURL=chunk-
|
|
198
|
+
//# sourceMappingURL=chunk-AKRVZ2YW.js.map
|
|
199
|
+
//# sourceMappingURL=chunk-AKRVZ2YW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/forms/TagsInput/TagsInput.variants.ts","../src/components/forms/TagsInput/TagsInput.tsx"],"names":[],"mappings":"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","file":"chunk-AKRVZ2YW.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * TagsInput container variant styles using CVA\n */\nexport const tagsInputVariants = cva(\n [\n \"flex flex-wrap items-center gap-1.5 w-full min-w-0 rounded-[var(--tags-input-root-radius)] border bg-transparent transition-[color,box-shadow] outline-none\",\n \"dark:bg-input/30\",\n \"focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]\",\n \"aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed aria-disabled:opacity-50\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n ],\n {\n variants: {\n size: {\n sm: \"min-h-8 px-2 py-1 text-sm\",\n md: \"min-h-9 px-3 py-1.5 text-base md:text-sm\",\n lg: \"min-h-10 px-3.5 py-2 text-base\",\n },\n variant: {\n default: \"border-[color:var(--tags-input-root-border)] shadow-xs\",\n filled: \"border-transparent bg-muted\",\n flushed: \"rounded-none border-x-0 border-t-0 border-b-input px-0\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n)\n\n/**\n * TagsInput inner input variant styles\n */\nexport const tagsInputInputVariants = cva(\n [\n \"flex-1 min-w-24 bg-[color:var(--tags-input-input-background)] outline-none\",\n \"placeholder:text-muted-foreground\",\n \"disabled:cursor-not-allowed\",\n ],\n {\n variants: {\n size: {\n sm: \"text-sm h-5\",\n md: \"text-base md:text-sm h-5\",\n lg: \"text-base h-6\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\nexport type TagsInputVariantProps = VariantProps<typeof tagsInputVariants>\nexport type TagsInputInputVariantProps = VariantProps<typeof tagsInputInputVariants>\n","\"use client\"\n\nimport type { TagsInputProps } from \"./TagsInput.types\"\n\nimport * as React from \"react\"\nimport { useCallback, useId, useRef, useState } from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Badge } from \"../../primitives/Badge\"\nimport { tagsInputInputVariants, tagsInputVariants } from \"./TagsInput.variants\"\n\n/**\n * TagsInput - A multi-tag input component for entering and managing tags\n *\n * @example\n * ```tsx\n * // Uncontrolled\n * <TagsInput\n * defaultValue={[\"react\", \"typescript\"]}\n * placeholder=\"Add tags...\"\n * />\n *\n * // Controlled\n * const [tags, setTags] = useState([\"hello\"])\n * <TagsInput\n * value={tags}\n * onChange={setTags}\n * maxTags={5}\n * />\n * ```\n */\nfunction TagsInput({\n value: controlledValue,\n defaultValue = [],\n onChange,\n onTagAdd,\n onTagRemove,\n placeholder = \"Add tag...\",\n maxTags,\n allowDuplicates = false,\n disabled,\n size = \"md\",\n variant,\n invalid,\n delimiters = [\",\"],\n className,\n ...props\n}: TagsInputProps) {\n const inputRef = useRef<HTMLInputElement>(null)\n const [inputValue, setInputValue] = useState(\"\")\n const [internalTags, setInternalTags] = useState<string[]>(defaultValue)\n const id = useId()\n\n // Determine if controlled or uncontrolled\n const isControlled = controlledValue !== undefined\n const tags = isControlled ? controlledValue : internalTags\n\n const updateTags = useCallback(\n (newTags: string[]) => {\n if (!isControlled) {\n setInternalTags(newTags)\n }\n onChange?.(newTags)\n },\n [isControlled, onChange]\n )\n\n const addTag = useCallback(\n (tag: string) => {\n const trimmedTag = tag.trim()\n if (!trimmedTag) return\n\n // Check for duplicates\n if (!allowDuplicates && tags.includes(trimmedTag)) {\n setInputValue(\"\")\n return\n }\n\n // Check max tags\n if (maxTags && tags.length >= maxTags) {\n setInputValue(\"\")\n return\n }\n\n const newTags = [...tags, trimmedTag]\n updateTags(newTags)\n onTagAdd?.(trimmedTag)\n setInputValue(\"\")\n },\n [tags, allowDuplicates, maxTags, updateTags, onTagAdd]\n )\n\n const removeTag = useCallback(\n (tagToRemove: string) => {\n const newTags = tags.filter((tag) => tag !== tagToRemove)\n updateTags(newTags)\n onTagRemove?.(tagToRemove)\n },\n [tags, updateTags, onTagRemove]\n )\n\n const removeLastTag = useCallback(() => {\n const lastTag = tags[tags.length - 1]\n if (lastTag) {\n removeTag(lastTag)\n }\n }, [tags, removeTag])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" || delimiters.includes(e.key)) {\n e.preventDefault()\n addTag(inputValue)\n } else if (e.key === \"Backspace\" && inputValue === \"\" && tags.length > 0) {\n removeLastTag()\n }\n },\n [inputValue, tags.length, addTag, removeLastTag, delimiters]\n )\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value\n\n // Check if any delimiter is in the pasted/typed value\n for (const delimiter of delimiters) {\n if (value.includes(delimiter)) {\n const parts = value.split(delimiter)\n parts.forEach((part, index) => {\n if (index < parts.length - 1) {\n addTag(part)\n } else {\n setInputValue(part)\n }\n })\n return\n }\n }\n\n setInputValue(value)\n },\n [delimiters, addTag]\n )\n\n const handleContainerClick = useCallback(() => {\n inputRef.current?.focus()\n }, [])\n\n // Map size to Tag size\n const tagSize = size === \"lg\" ? \"default\" : \"sm\"\n\n return (\n <div\n aria-disabled={disabled ?? undefined}\n aria-invalid={invalid ?? undefined}\n className={cn(tagsInputVariants({ size, variant }), className)}\n data-slot=\"tags-input\"\n onClick={handleContainerClick}\n {...props}\n >\n {tags.map((tag, index) => (\n <Badge\n key={`${tag}-${String(index)}`}\n color=\"muted\"\n size={tagSize}\n type=\"pill-color\"\n onDismiss={disabled ? undefined : () => { removeTag(tag); }}\n >\n {tag}\n </Badge>\n ))}\n <input\n ref={inputRef}\n aria-label=\"Add tag\"\n className={tagsInputInputVariants({ size })}\n data-slot=\"tags-input-field\"\n disabled={disabled}\n id={id}\n placeholder={tags.length === 0 ? placeholder : undefined}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n />\n </div>\n )\n}\n\nexport { TagsInput }\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator } from './chunk-N3I6GA4I.js';
|
|
2
|
-
import { Field, FieldLabel, FieldError, FieldDescription } from './chunk-
|
|
2
|
+
import { Field, FieldLabel, FieldError, FieldDescription } from './chunk-7VGF6ZVE.js';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
5
5
|
import { cva } from 'class-variance-authority';
|
|
@@ -143,5 +143,5 @@ var inputOTPFieldErrorVariants = cva(
|
|
|
143
143
|
);
|
|
144
144
|
|
|
145
145
|
export { InputOTPField, inputOTPFieldDescriptionVariants, inputOTPFieldErrorVariants, inputOTPFieldLabelVariants, inputOTPFieldVariants };
|
|
146
|
-
//# sourceMappingURL=chunk-
|
|
147
|
-
//# sourceMappingURL=chunk-
|
|
146
|
+
//# sourceMappingURL=chunk-AP3T3KMY.js.map
|
|
147
|
+
//# sourceMappingURL=chunk-AP3T3KMY.js.map
|