@versini/ui-icon-renderer
v2.3.1
Published
[](https://www.npmjs.com/package/@versini/ui-icon-renderer) .
import { useIconRenderer } from "@versini/ui-icon-renderer";
function App() {
const [IconRenderer] = useIconRenderer();
const [selectedIcon, setSelectedIcon] = useState<string | null>(null);
return (
<div>
<button onClick={() => setSelectedIcon("IconAdd")}>Show Icon</button>
{selectedIcon && IconRenderer && <IconRenderer icon={selectedIcon} />}
</div>
);
}Preload Icons to Prevent Flash
When you know which icons will be needed, preload them before rendering to avoid a flash of empty content.
import { useIconRenderer } from "@versini/ui-icon-renderer";
function App() {
const [IconRenderer, preloadIcons] = useIconRenderer();
const [showIcons, setShowIcons] = useState(false);
return (
<div>
<button
onMouseEnter={() => preloadIcons(["IconAdd", "IconDelete", "IconEdit"])}
onClick={() => setShowIcons(true)}
>
Show Icons
</button>
{showIcons && IconRenderer && (
<div>
<IconRenderer icon="IconAdd" />
<IconRenderer icon="IconDelete" />
<IconRenderer icon="IconEdit" />
</div>
)}
</div>
);
}Icon Picker
Load all available icons lazily for an icon picker component.
import { useIconRenderer } from "@versini/ui-icon-renderer";
const ALL_ICON_NAMES = ["IconAdd", "IconDelete", "IconEdit", "IconSearch"];
function IconPicker({ onSelect }: { onSelect: (name: string) => void }) {
const [IconRenderer, preloadIcons] = useIconRenderer();
useEffect(() => {
preloadIcons(ALL_ICON_NAMES);
}, [preloadIcons]);
if (!IconRenderer) {
return null;
}
return (
<div className="grid grid-cols-6 gap-2">
{ALL_ICON_NAMES.map((name) => (
<button key={name} onClick={() => onSelect(name)}>
<IconRenderer icon={name} />
</button>
))}
</div>
);
}API
useIconRenderer
const [IconRenderer, preloadIcons] = useIconRenderer();Returns a tuple:
| Index | Name | Type | Description |
| ----- | ------------ | ------------------------------------- | ---------------------------------------------------------------------------------------------- |
| 0 | IconRenderer | React.FC<IconRendererProps> \| null | The icon component, or null while the module is loading. Available after first render cycle. |
| 1 | preloadIcons | (icons: string[]) => Promise<void> | Preloads icon data into the cache. Optional — icons auto-load when rendered if not preloaded. |
IconRenderer Props
| Prop | Type | Default | Description |
| --------- | -------- | ------- | ---------------------------------------------------------------------- |
| icon | string | - | The name of the icon to render (e.g. "IconAdd", "IconDeleteLight") |
| className | string | - | CSS class(es) to add to the SVG element |
Also accepts all standard SVG element props (React.ComponentPropsWithoutRef<"svg">).
