MCPcopy Create free account
hub / github.com/untitleduico/react / NativeSelect

Function NativeSelect

components/base/select/select-native.tsx:32–97  ·  view source on GitHub ↗
({ label, hint, options, className, selectClassName, size = "md", ...props }: NativeSelectProps)

Source from the content-addressed store, hash-verified

30};
31
32export const NativeSelect = ({ label, hint, options, className, selectClassName, size = "md", ...props }: NativeSelectProps) => {
33 const id = useId();
34 const selectId = `select-native-${id}`;
35 const hintId = `select-native-hint-${id}`;
36
37 return (
38 <div className={cx("w-full in-data-input-wrapper:w-max", className)}>
39 {label && (
40 <Label htmlFor={selectId} id={selectId} className="mb-1.5">
41 {label}
42 </Label>
43 )}
44
45 <div className="relative grid w-full items-center">
46 <select
47 {...props}
48 id={selectId}
49 aria-describedby={hintId}
50 aria-labelledby={selectId}
51 className={cx(
52 "appearance-none rounded-lg bg-primary font-medium text-primary shadow-xs ring-1 ring-primary outline-hidden transition duration-100 ease-linear ring-inset placeholder:text-fg-quaternary focus-visible:ring-2 focus-visible:ring-brand disabled:cursor-not-allowed disabled:opacity-50",
53
54 styles[size].root,
55
56 // Styles when the select is within an `InputGroup`
57 "in-data-input-wrapper:flex in-data-input-wrapper:h-full in-data-input-wrapper:gap-1 in-data-input-wrapper:bg-inherit in-data-input-wrapper:px-3 in-data-input-wrapper:py-2 in-data-input-wrapper:font-normal in-data-input-wrapper:text-tertiary in-data-input-wrapper:shadow-none in-data-input-wrapper:ring-transparent in-data-input-wrapper:in-data-[size=sm]:text-sm",
58 // Styles for the select when `TextField` is disabled
59 "in-data-input-wrapper:group-disabled:pointer-events-none in-data-input-wrapper:group-disabled:cursor-not-allowed in-data-input-wrapper:group-disabled:bg-transparent",
60 // Common styles for sizes and border radius within `InputGroup`
61 "in-data-input-wrapper:in-data-leading:rounded-r-none in-data-input-wrapper:in-data-trailing:rounded-l-none in-data-input-wrapper:in-data-[input-size=lg]:py-2.5 in-data-input-wrapper:in-data-[input-size=md]:py-2 in-data-input-wrapper:in-data-[input-size=md]:pl-3 in-data-input-wrapper:in-data-[input-size=sm]:text-sm",
62 // For "leading" dropdown within `InputGroup`
63 "in-data-input-wrapper:in-data-leading:pr-4.5 in-data-input-wrapper:in-data-leading:in-data-[input-size=lg]:pl-3.5 in-data-input-wrapper:in-data-leading:in-data-[input-size=md]:pr-4.5 in-data-input-wrapper:in-data-leading:in-data-[input-size=md]:pl-3 in-data-input-wrapper:in-data-leading:in-data-[input-size=sm]:pr-3.5",
64 // For "trailing" dropdown within `InputGroup`
65 "in-data-input-wrapper:in-data-trailing:in-data-[input-size=lg]:pr-8 in-data-input-wrapper:in-data-trailing:in-data-[input-size=md]:pr-7.5 in-data-input-wrapper:in-data-trailing:in-data-[input-size=sm]:pr-6.5",
66 selectClassName,
67 )}
68 >
69 {options.map((opt) => (
70 <option key={opt.value} value={opt.value}>
71 {opt.label}
72 </option>
73 ))}
74 </select>
75
76 <ChevronDown
77 aria-hidden="true"
78 className={cx(
79 "pointer-events-none absolute text-fg-quaternary",
80
81 styles[size].icon,
82 // Styles for the icon when the select is within an `InputGroup`
83 "in-data-input-wrapper:right-0 in-data-input-wrapper:size-4 in-data-input-wrapper:stroke-[2.625px]",
84 // For "trailing" dropdown within `InputGroup`
85 "in-data-input-wrapper:in-data-trailing:in-data-[input-size=md]:right-3 in-data-input-wrapper:in-data-trailing:in-data-[input-size=sm]:right-3",
86 )}
87 />
88 </div>
89

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected