Icon Picker Custom Color
ui-components/icon-picker-custom-colorFreeBlock
A simple icon picker component with custom color.
Install it
npx shadcn@latest add https://ui.raulcarini.dev/r/icon-picker-custom-color.jsonSource
1"use client";23import * as React from "react";4import { icons, PaletteIcon } from "lucide-react";56import { cn } from "@/lib/utils";7import { useDebounce } from "@/hooks/use-debounce";89import { Input } from "@/components/ui/input";10import { ScrollArea } from "@/components/ui/scroll-area";11import {12 Popover,13 PopoverContent,14 PopoverTrigger,15} from "@/components/ui/popover";16import { Button } from "@/components/ui/button";17import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group";1819const IconItem = React.memo(20 ({21 iconName,22 setSelectedIcon,23 selectedIcon,24 }: {25 iconName: string;26 setSelectedIcon?: (iconName: string) => void;27 selectedIcon?: string | null;28 }) => {29 const Icon = icons[iconName as keyof typeof icons];3031 const handleClick = React.useCallback(() => {32 setSelectedIcon?.(iconName);33 }, [iconName, setSelectedIcon]);3435 return (36 <button37 className={cn(38 "flex items-center justify-center size-7 rounded-md cursor-pointer text-popover-foreground/70 hover:bg-muted hover:text-popover-foreground transition-colors",39 selectedIcon === iconName &&40 "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground",41 )}42 onClick={handleClick}43 title={iconName}44 aria-label={`Select ${iconName} icon`}45 aria-pressed={selectedIcon === iconName}46 >47 <Icon size={16} />48 </button>49 );50 },51);5253IconItem.displayName = "IconItem";5455const IconPicker = React.memo(56 ({57 setSelectedIcon,58 selectedIcon,59 setSelectedColor,60 selectedColor,61 className,62 ...props63 }: {64 setSelectedIcon?: (iconName: string) => void;65 selectedIcon?: string | null;66 selectedColor?: string;67 setSelectedColor?: (color: string) => void;68 } & React.ComponentProps<"div">) => {69 const [searchQuery, setSearchQuery] = React.useState("");70 const debouncedSearchQuery = useDebounce(searchQuery, 200);7172 const iconsMap = React.useMemo(() => Object.keys(icons), []);7374 const filteredIcons = React.useMemo(() => {75 if (!debouncedSearchQuery.trim()) return iconsMap;76 return iconsMap.filter((iconName) =>77 iconName.toLowerCase().includes(debouncedSearchQuery.toLowerCase()),78 );79 }, [iconsMap, debouncedSearchQuery]);8081 const handleSearchChange = React.useCallback(82 (e: React.ChangeEvent<HTMLInputElement>) => {83 setSearchQuery(e.target.value);84 },85 [],86// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from UI Components
All 25 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| GitHub Contributionsgithub-contributions | UI Components | Blocks | Free | no deps | |
| GitHub Contributions Advancedgithub-contributions-advanced | UI Components | Blocks | Free | no deps | |
| GitHub Contributions Advanced Fetchergithub-contributions-advanced-fetcher | UI Components | Blocks | Free | no deps | |
| GitHub Contributions Fetchergithub-contributions-fetcher | UI Components | Blocks | Free | no deps | |
| GitHub Forksgithub-forks | UI Components | Blocks | Free | 1 dep | |
| GitHub Issuesgithub-issues | UI Components | Blocks | Free | 1 dep | |
| GitHub Pull Requestsgithub-pr | UI Components | Blocks | Free | 1 dep | |
| GitHub Starsgithub-stars | UI Components | Blocks | Free | 1 dep |
