11"use client" ;
22
3- import * as SelectPrimitive from "@radix-ui/react-select" ;
4- import { Check , ChevronDown } from "lucide-react" ;
53import * as React from "react" ;
4+ import * as SelectPrimitive from "@radix-ui/react-select" ;
5+ import { Check , ChevronDown , ChevronUp } from "lucide-react" ;
66
77import { cn } from "@/lib/utils" ;
88
@@ -19,7 +19,7 @@ const SelectTrigger = React.forwardRef<
1919 < SelectPrimitive . Trigger
2020 ref = { ref }
2121 className = { cn (
22- "flex h-10 w-full items-center justify-between rounded-md border border-input bg-transparent px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50" ,
22+ "flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 " ,
2323 className
2424 ) }
2525 { ...props }
@@ -32,6 +32,41 @@ const SelectTrigger = React.forwardRef<
3232) ) ;
3333SelectTrigger . displayName = SelectPrimitive . Trigger . displayName ;
3434
35+ const SelectScrollUpButton = React . forwardRef <
36+ React . ElementRef < typeof SelectPrimitive . ScrollUpButton > ,
37+ React . ComponentPropsWithoutRef < typeof SelectPrimitive . ScrollUpButton >
38+ > ( ( { className, ...props } , ref ) => (
39+ < SelectPrimitive . ScrollUpButton
40+ ref = { ref }
41+ className = { cn (
42+ "flex cursor-default items-center justify-center py-1" ,
43+ className
44+ ) }
45+ { ...props }
46+ >
47+ < ChevronUp className = "h-4 w-4" />
48+ </ SelectPrimitive . ScrollUpButton >
49+ ) ) ;
50+ SelectScrollUpButton . displayName = SelectPrimitive . ScrollUpButton . displayName ;
51+
52+ const SelectScrollDownButton = React . forwardRef <
53+ React . ElementRef < typeof SelectPrimitive . ScrollDownButton > ,
54+ React . ComponentPropsWithoutRef < typeof SelectPrimitive . ScrollDownButton >
55+ > ( ( { className, ...props } , ref ) => (
56+ < SelectPrimitive . ScrollDownButton
57+ ref = { ref }
58+ className = { cn (
59+ "flex cursor-default items-center justify-center py-1" ,
60+ className
61+ ) }
62+ { ...props }
63+ >
64+ < ChevronDown className = "h-4 w-4" />
65+ </ SelectPrimitive . ScrollDownButton >
66+ ) ) ;
67+ SelectScrollDownButton . displayName =
68+ SelectPrimitive . ScrollDownButton . displayName ;
69+
3570const SelectContent = React . forwardRef <
3671 React . ElementRef < typeof SelectPrimitive . Content > ,
3772 React . ComponentPropsWithoutRef < typeof SelectPrimitive . Content >
@@ -40,13 +75,15 @@ const SelectContent = React.forwardRef<
4075 < SelectPrimitive . Content
4176 ref = { ref }
4277 className = { cn (
43- "relative z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md animate-in fade-in-80" ,
44- position === "popper" && "translate-y-1" ,
78+ "relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md 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" ,
79+ position === "popper" &&
80+ "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1" ,
4581 className
4682 ) }
4783 position = { position }
4884 { ...props }
4985 >
86+ < SelectScrollUpButton />
5087 < SelectPrimitive . Viewport
5188 className = { cn (
5289 "p-1" ,
@@ -56,6 +93,7 @@ const SelectContent = React.forwardRef<
5693 >
5794 { children }
5895 </ SelectPrimitive . Viewport >
96+ < SelectScrollDownButton />
5997 </ SelectPrimitive . Content >
6098 </ SelectPrimitive . Portal >
6199) ) ;
@@ -80,7 +118,7 @@ const SelectItem = React.forwardRef<
80118 < SelectPrimitive . Item
81119 ref = { ref }
82120 className = { cn (
83- "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-base outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50" ,
121+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50" ,
84122 className
85123 ) }
86124 { ...props }
@@ -117,4 +155,6 @@ export {
117155 SelectLabel ,
118156 SelectItem ,
119157 SelectSeparator ,
158+ SelectScrollUpButton ,
159+ SelectScrollDownButton ,
120160} ;
0 commit comments