a programming education platform www.hypercommit.com
education
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 56 lines 3.1 kB view raw
1import { Button as ButtonPrimitive } from "@base-ui/react/button" 2import { cva, type VariantProps } from "class-variance-authority" 3 4import { cn } from "@workspace/ui/lib/utils" 5 6const buttonVariants = cva( 7 "group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-xs/relaxed font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", 8 { 9 variants: { 10 variant: { 11 default: "bg-primary text-primary-foreground hover:bg-primary/80", 12 outline: 13 "border-border hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:bg-input/30", 14 secondary: 15 "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground", 16 ghost: 17 "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50", 18 destructive: 19 "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40", 20 link: "text-primary underline-offset-4 hover:underline", 21 }, 22 size: { 23 default: 24 "h-7 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5 [&_svg:not([class*='size-'])]:size-3.5", 25 xs: "h-5 gap-1 rounded-sm px-2 text-[0.625rem] has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5 [&_svg:not([class*='size-'])]:size-2.5", 26 sm: "h-6 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5 [&_svg:not([class*='size-'])]:size-3", 27 lg: "h-8 gap-1 px-2.5 text-xs/relaxed has-data-[icon=inline-end]:pe-2 has-data-[icon=inline-start]:ps-2 [&_svg:not([class*='size-'])]:size-4", 28 icon: "size-7 [&_svg:not([class*='size-'])]:size-3.5", 29 "icon-xs": "size-5 rounded-sm [&_svg:not([class*='size-'])]:size-2.5", 30 "icon-sm": "size-6 [&_svg:not([class*='size-'])]:size-3", 31 "icon-lg": "size-8 [&_svg:not([class*='size-'])]:size-4", 32 }, 33 }, 34 defaultVariants: { 35 variant: "default", 36 size: "default", 37 }, 38 } 39) 40 41function Button({ 42 className, 43 variant = "default", 44 size = "default", 45 ...props 46}: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) { 47 return ( 48 <ButtonPrimitive 49 data-slot="button" 50 className={cn(buttonVariants({ variant, size, className }))} 51 {...props} 52 /> 53 ) 54} 55 56export { Button, buttonVariants }