Skip to content

Commit a1b335c

Browse files
committed
added : select component added
1 parent 68b0b97 commit a1b335c

File tree

1 file changed

+69
-8
lines changed

1 file changed

+69
-8
lines changed

src/showcase/effects/gradients/CustomGradientGenerator.tsx

Lines changed: 69 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,27 @@
22
import Card from '@/showcase/ui-group/Card'
33
import { motion, AnimatePresence } from 'framer-motion'
44
import { Check, Copy } from 'lucide-react'
5-
import { useState } from 'react'
65
import { toast } from 'sonner'
76
import { HexColorPicker } from "react-colorful";
8-
import { Popover } from '@headlessui/react'
7+
import { Fragment, useState } from 'react'
8+
import { Listbox, Popover, Transition } from '@headlessui/react'
9+
10+
const people = [
11+
{ name: 'Wade Cooper' },
12+
{ name: 'Arlene Mccoy' },
13+
{ name: 'Devon Webb' },
14+
{ name: 'Tom Cook' },
15+
{ name: 'Tanya Fox' },
16+
{ name: 'Hellen Schmidt' },
17+
]
918

1019
const CustomGradientGenerator = () => {
1120
const [copied, setCopied] = useState(false)
1221
const [fromColor, setFromColor] = useState("#aabbcc");
1322
const [viaColor, setViaColor] = useState("#aabbcc");
1423
const [toColor, setToColor] = useState("#ddeeff");
15-
let gradient = `radial-gradient(circle, ${fromColor},${viaColor} ,${toColor})`;
24+
const [selected, setSelected] = useState(people[0])
25+
let gradient = `radial-gradient(circle at top left, ${fromColor},${viaColor} ,${toColor})`;
1626

1727
const copyGradient = () => {
1828
navigator.clipboard.writeText(gradient)
@@ -65,11 +75,13 @@ const CustomGradientGenerator = () => {
6575
</button>
6676
</div>
6777

68-
<div className="flex items-start justify-between px-5 pt-2 gap-3 rounded-xl border border-white ring-1 ring-zinc-200 transition-all ease-in-out hover:cursor-pointer dark:border-transparent dark:ring-zinc-700">
69-
<Popover className="relative ">
78+
<div className="flex flex-col items-start justify-start px-5 pt-2 gap-3 rounded-xl border border-white ring-1 ring-zinc-200 transition-all ease-in-out hover:cursor-pointer dark:border-transparent dark:ring-zinc-700 ">
79+
<div className='flex items-center w-full mx-auto justify-center gap-3
80+
'>
81+
<Popover className="relative ">
7082
<Popover.Button className="p-2 border-2 dark:border-zinc-800 border-zinc-200 flex items-center gap-2 justify-between rounded-lg">
7183
<span>From</span>
72-
<div className='h-5 w-5' style={{ backgroundColor: fromColor }}></div>
84+
<div className='h-5 w-5' style={{ backgroundColor: fromColor }}></div><span className='hidden md:block'> {fromColor}</span>
7385
</Popover.Button>
7486

7587

@@ -82,7 +94,7 @@ const CustomGradientGenerator = () => {
8294

8395
<Popover.Button className="p-2 border-2 dark:border-zinc-800 border-zinc-200 flex items-center gap-2 justify-between rounded-lg">
8496
<span>Via</span>
85-
<div className='h-5 w-5' style={{ backgroundColor: viaColor }}></div>
97+
<div className='h-5 w-5' style={{ backgroundColor: viaColor }}></div><span className='hidden md:block'> {viaColor}</span>
8698
</Popover.Button>
8799

88100

@@ -95,14 +107,63 @@ const CustomGradientGenerator = () => {
95107

96108
<Popover.Button className="p-2 border-2 dark:border-zinc-800 border-zinc-200 flex items-center gap-2 justify-between rounded-lg">
97109
<span>To</span>
98-
<div className='h-5 w-5' style={{ backgroundColor: toColor }}></div>
110+
<div className='h-5 w-5' style={{ backgroundColor: toColor }}></div><span className='hidden md:block'> {toColor}</span>
99111
</Popover.Button>
100112

101113

102114
<Popover.Panel className="absolute z-10 right-0">
103115
<HexColorPicker color={toColor} onChange={setToColor} />
104116
</Popover.Panel>
105117
</Popover>
118+
</div>
119+
<div className="w-full px-6 py-3">
120+
<Listbox value={selected} onChange={setSelected}>
121+
<div className="relative mt-1">
122+
<Listbox.Button className="relative w-full cursor-default rounded-lg bg-white py-2 pl-3 pr-10 text-left shadow-md focus:outline-none focus-visible:border-indigo-500 focus-visible:ring-2 focus-visible:ring-white/75 focus-visible:ring-offset-2 focus-visible:ring-offset-orange-300 sm:text-sm">
123+
<span className="block truncate">{selected.name}</span>
124+
125+
</Listbox.Button>
126+
<Transition
127+
as={Fragment}
128+
leave="transition ease-in duration-100"
129+
leaveFrom="opacity-100"
130+
leaveTo="opacity-0"
131+
>
132+
<Listbox.Options className="absolute mt-1 max-h-60 w-full overflow-auto rounded-md z-30 bg-white py-1 text-base shadow-lg ring-1 ring-black/5 focus:outline-none sm:text-sm">
133+
{people.map((person, personIdx) => (
134+
<Listbox.Option
135+
key={personIdx}
136+
className={({ active }) =>
137+
`relative cursor-default select-none z-30 py-2 pl-10 pr-4 ${
138+
active ? 'bg-amber-100 text-amber-900' : 'text-gray-900'
139+
}`
140+
}
141+
value={person}
142+
>
143+
{({ selected }) => (
144+
<>
145+
<span
146+
className={`block truncate ${
147+
selected ? 'font-medium' : 'font-normal'
148+
}`}
149+
>
150+
{person.name}
151+
</span>
152+
{selected ? (
153+
<span className="absolute inset-y-0 left-0 flex items-center pl-3 text-amber-600">
154+
Wow
155+
</span>
156+
) : null}
157+
</>
158+
)}
159+
</Listbox.Option>
160+
))}
161+
</Listbox.Options>
162+
</Transition>
163+
</div>
164+
</Listbox>
165+
</div>
166+
106167
</div>
107168
</div>
108169
);

0 commit comments

Comments
 (0)