UNPKG

@undp/design-system-react

Version:

React based design system for UNDP

1 lines 6.06 kB
{"version":3,"file":"StatsPanel.cjs","names":[],"sources":["../src/components/ui/stats-panel.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\nimport { H2, H4, P } from '@/components/ui/typography';\nimport { cn } from '@/lib/utils';\n\nconst StatsPanel = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n '@container flex w-full flex-wrap items-stretch justify-start gap-0 bg-surface-2xl',\n className,\n )}\n {...props}\n />\n ),\n);\n\nconst hoverBGVariant = cva(\n 'w-full h-full absolute inset-0 top-0 left-0 transition-all opacity-0 duration-400 ease-[cubic-bezier(0.64,0.05,0.35,1.05)] group-hover:opacity-100',\n {\n variants: {\n hoverColor: {\n default:\n 'bg-[linear-gradient(0deg,_color-mix(in_srgb,_var(--card-hover-color)_80%,_transparent),_transparent_140%)]',\n primary:\n 'bg-[linear-gradient(0deg,_color-mix(in_srgb,_var(--primary)_80%,_transparent),_transparent_140%)]',\n secondary:\n 'bg-[linear-gradient(0deg,_color-mix(in_srgb,_var(--secondary)_80%,_transparent),_transparent_140%)]',\n tertiary:\n 'bg-[linear-gradient(0deg,_color-mix(in_srgb,_var(--tertiary)_80%,_transparent),_transparent_140%)]',\n quaternary:\n 'bg-[linear-gradient(0deg,_color-mix(in_srgb,_var(--quaternary)_80%,_transparent),_transparent_140%)]',\n info: 'bg-[linear-gradient(0deg,_color-mix(in_srgb,_var(--info)_80%,_transparent),_transparent_140%)]',\n success:\n 'bg-[linear-gradient(0deg,_color-mix(in_srgb,_var(--success)_80%,_transparent),_transparent_140%)]',\n warning:\n 'bg-[linear-gradient(0deg,_color-mix(in_srgb,_var(--warning)_80%,_transparent),_transparent_140%)]',\n error:\n 'bg-[linear-gradient(0deg,_color-mix(in_srgb,_var(--error)_80%,_transparent),_transparent_140%)]',\n background:\n 'bg-[linear-gradient(0deg,_color-mix(in_srgb,_var(--background)_80%,_transparent),_transparent_140%)]',\n foreground:\n 'bg-[linear-gradient(0deg,_color-mix(in_srgb,_var(--foreground)_80%,_transparent),_transparent_140%)]',\n },\n },\n defaultVariants: {\n hoverColor: 'default',\n },\n },\n);\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n hoverImage?: string;\n}\n\nconst StatsPanelCard = React.forwardRef<\n HTMLDivElement,\n VariantProps<typeof hoverBGVariant> & CardProps\n>(({ className, hoverColor = 'default', hoverImage, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'group relative box-border flex @2xl:min-h-196.75 min-h-94.5 @2xl:w-1/2 @3xl:w-1/4 w-full items-center bg-foreground-soft px-16',\n className,\n )}\n {...props}\n >\n {hoverImage && (\n <img\n alt=''\n src={hoverImage}\n className='absolute top-0 left-0 h-full w-full object-cover opacity-0 transition-all duration-300 group-hover:opacity-100'\n />\n )}\n <div className={hoverBGVariant({ hoverColor })} />\n <div className='relative z-5 flex flex-col'>{children}</div>\n </div>\n));\n\nStatsPanelCard.displayName = 'StatsPanelCard';\n\nconst StatsPanelCardValue = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <H2\n ref={ref}\n className={cn(\n 'text-left font-heading text-transparent leading-xs transition-all duration-400 [-webkit-text-stroke:2px_var(--content-reverse)] group-hover:text-content-primary rtl:text-right group-hover:[-webkit-text-stroke:0px]',\n className,\n )}\n {...props}\n />\n));\n\nStatsPanelCardValue.displayName = 'StatsPanelCardValue';\n\nconst StatsPanelCardTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <H4\n ref={ref}\n className={cn(\n 'text-white transition-all duration-400 group-hover:text-content-primary',\n className,\n )}\n {...props}\n />\n));\n\nStatsPanelCardTitle.displayName = 'StatsPanelCardTitle';\n\nconst StatsPanelCardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <P\n ref={ref}\n className={cn(\n '@2xl:h-25 h-auto text-white transition-all duration-400 group-hover:text-content-primary',\n className,\n )}\n {...props}\n />\n));\n\nStatsPanelCardDescription.displayName = 'StatsPanelCardDescription';\n\nexport {\n StatsPanel,\n StatsPanelCard,\n StatsPanelCardDescription,\n StatsPanelCardTitle,\n StatsPanelCardValue,\n};\n"],"mappings":"4RAKA,IAAM,EAAa,EAAM,YACtB,CAAE,YAAW,GAAG,GAAS,KACxB,EAAA,EAAA,IAAA,CAAC,MAAD,CACO,MACL,UAAW,EAAA,EACT,oFACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,EAEM,EAAiB,EAAA,EACrB,qJACA,CACE,SAAU,CACR,WAAY,CACV,QACE,6GACF,QACE,oGACF,UACE,sGACF,SACE,qGACF,WACE,uGACF,KAAM,iGACN,QACE,oGACF,QACE,oGACF,MACE,kGACF,WACE,uGACF,WACE,sGACJ,CACF,EACA,gBAAiB,CACf,WAAY,SACd,CACF,CACF,EAMM,EAAiB,EAAM,YAG1B,CAAE,YAAW,aAAa,UAAW,aAAY,WAAU,GAAG,GAAS,KACxE,EAAA,EAAA,KAAA,CAAC,MAAD,CACO,MACL,UAAW,EAAA,EACT,iIACA,CACF,EACA,GAAI,WANN,CAQG,IACC,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,IAAI,GACJ,IAAK,EACL,UAAU,gHACX,CAAA,GAEH,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAe,CAAE,YAAW,CAAC,CAAI,CAAA,GACjD,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,6BAA8B,UAAc,CAAA,CACxD,GACN,EAED,EAAe,YAAc,iBAE7B,IAAM,EAAsB,EAAM,YAG/B,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,IAAA,CAAC,EAAA,GAAD,CACO,MACL,UAAW,EAAA,EACT,wNACA,CACF,EACA,GAAI,CACL,CAAA,CACF,EAED,EAAoB,YAAc,sBAElC,IAAM,EAAsB,EAAM,YAG/B,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,IAAA,CAAC,EAAA,GAAD,CACO,MACL,UAAW,EAAA,EACT,0EACA,CACF,EACA,GAAI,CACL,CAAA,CACF,EAED,EAAoB,YAAc,sBAElC,IAAM,EAA4B,EAAM,YAGrC,CAAE,YAAW,GAAG,GAAS,KAC1B,EAAA,EAAA,IAAA,CAAC,EAAA,EAAD,CACO,MACL,UAAW,EAAA,EACT,2FACA,CACF,EACA,GAAI,CACL,CAAA,CACF,EAED,EAA0B,YAAc"}