IconPicker

Searchable icon selection popover grid supporting Lucide icons for builder, form customizers, and toolbar triggers.

// Plain markup
import { IconPicker } from "@shavin/ui";

1. Default Select-Style Trigger

import { useState } from "react";
import { IconPicker } from "@shavin/ui";

export function Form() {
  const [icon, setIcon] = useState("sparkles");

  return (
    <div className="w-64">
      <IconPicker value={icon} onChange={setIcon} />
    </div>
  );
}

2. Compact Icon-Button Variant (variant="icon")

sm
md
lg
import { useState } from "react";
import { IconPicker } from "@shavin/ui";

export function Toolbar() {
  const [icon, setIcon] = useState("settings");

  return (
    <div className="flex items-center gap-3">
      <IconPicker variant="icon" size="sm" value={icon} onChange={setIcon} />
      <IconPicker variant="icon" size="md" value={icon} onChange={setIcon} />
      <IconPicker variant="icon" size="lg" value={icon} onChange={setIcon} />
    </div>
  );
}

3. Custom Component Trigger (children)

import { useState } from "react";
import { IconPicker, Icon, Button } from "@shavin/ui";

export function CustomTriggerDemo() {
  const [icon, setIcon] = useState("heart");

  return (
    <IconPicker value={icon} onChange={setIcon}>
      <Button variant="outline" size="sm" className="gap-2">
        <Icon name={icon} size="sm" color="accent" />
        <span>Change Glyph ({icon})</span>
      </Button>
    </IconPicker>
  );
}

4. Clearable (allowNone)

import { useState } from "react";
import { IconPicker } from "@shavin/ui";

export function OptionalIconField() {
  const [icon, setIcon] = useState("none");

  return (
    <div className="w-64">
      <IconPicker value={icon} onChange={setIcon} allowNone />
    </div>
  );
}

Props

PropTypeDefault
value*string
onChange*(v: string) => void
childrenReact.ReactNode
variant"default" | "icon"
size"sm" | "md" | "lg"
allowNoneboolean
librariesstring[]
classNamestring

* required

Configure Theme
Theme
Accent Color
Custom
Gray Family
Appearance
Radius
Scaling
Panel Style
Heading Font
Body Font