CoolFace
Apppublic

Leon4gr45/builder

sourceHugging Facemitupdated 2d agoView on Hugging Face
0likes
select.tsx186 linesDownload Raw Back to ui
1"use client"2 3import * as React from "react"4import * as SelectPrimitive from "@radix-ui/react-select"5import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react"6 7import { cn } from "@/lib/utils"8 9function Select({10  ...props11}: React.ComponentProps<typeof SelectPrimitive.Root>) {12  return <SelectPrimitive.Root data-slot="select" {...props} />13}14 15function SelectGroup({16  ...props17}: React.ComponentProps<typeof SelectPrimitive.Group>) {18  return <SelectPrimitive.Group data-slot="select-group" {...props} />19}20 21function SelectValue({22  ...props23}: React.ComponentProps<typeof SelectPrimitive.Value>) {24  return <SelectPrimitive.Value data-slot="select-value" {...props} />25}26 27function SelectTrigger({28  className,29  size = "default",30  children,31  ...props32}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {33  size?: "sm" | "default"34}) {35  return (36    <SelectPrimitive.Trigger37      data-slot="select-trigger"38      data-size={size}39      className={cn(40        "border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",41        className42      )}43      {...props}44    >45      {children}46      <SelectPrimitive.Icon asChild>47        <ChevronDownIcon className="size-4 opacity-50" />48      </SelectPrimitive.Icon>49    </SelectPrimitive.Trigger>50  )51}52 53function SelectContent({54  className,55  children,56  position = "popper",57  ...props58}: React.ComponentProps<typeof SelectPrimitive.Content>) {59  return (60    <SelectPrimitive.Portal>61      <SelectPrimitive.Content62        data-slot="select-content"63        className={cn(64          "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",65          position === "popper" &&66            "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",67          className68        )}69        position={position}70        {...props}71      >72        <SelectScrollUpButton />73        <SelectPrimitive.Viewport74          className={cn(75            "p-1",76            position === "popper" &&77              "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"78          )}79        >80          {children}81        </SelectPrimitive.Viewport>82        <SelectScrollDownButton />83      </SelectPrimitive.Content>84    </SelectPrimitive.Portal>85  )86}87 88function SelectLabel({89  className,90  ...props91}: React.ComponentProps<typeof SelectPrimitive.Label>) {92  return (93    <SelectPrimitive.Label94      data-slot="select-label"95      className={cn("text-muted-foreground px-2 py-1.5 text-xs", className)}96      {...props}97    />98  )99}100 101function SelectItem({102  className,103  children,104  ...props105}: React.ComponentProps<typeof SelectPrimitive.Item>) {106  return (107    <SelectPrimitive.Item108      data-slot="select-item"109      className={cn(110        "focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",111        className112      )}113      {...props}114    >115      <span className="absolute right-2 flex size-3.5 items-center justify-center">116        <SelectPrimitive.ItemIndicator>117          <CheckIcon className="size-4" />118        </SelectPrimitive.ItemIndicator>119      </span>120      <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>121    </SelectPrimitive.Item>122  )123}124 125function SelectSeparator({126  className,127  ...props128}: React.ComponentProps<typeof SelectPrimitive.Separator>) {129  return (130    <SelectPrimitive.Separator131      data-slot="select-separator"132      className={cn("bg-border pointer-events-none -mx-1 my-1 h-px", className)}133      {...props}134    />135  )136}137 138function SelectScrollUpButton({139  className,140  ...props141}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {142  return (143    <SelectPrimitive.ScrollUpButton144      data-slot="select-scroll-up-button"145      className={cn(146        "flex cursor-default items-center justify-center py-1",147        className148      )}149      {...props}150    >151      <ChevronUpIcon className="size-4" />152    </SelectPrimitive.ScrollUpButton>153  )154}155 156function SelectScrollDownButton({157  className,158  ...props159}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {160  return (161    <SelectPrimitive.ScrollDownButton162      data-slot="select-scroll-down-button"163      className={cn(164        "flex cursor-default items-center justify-center py-1",165        className166      )}167      {...props}168    >169      <ChevronDownIcon className="size-4" />170    </SelectPrimitive.ScrollDownButton>171  )172}173 174export {175  Select,176  SelectContent,177  SelectGroup,178  SelectItem,179  SelectLabel,180  SelectScrollDownButton,181  SelectScrollUpButton,182  SelectSeparator,183  SelectTrigger,184  SelectValue,185}186