Skip to content
Esc
↑↓navigate↵open⌘Jpreview
On this page

Preact

Use free, open-source Vadivam SVG icon components in Preact with shared defaults, per-icon imports, and dynamic runtime names.

vadivam-preact supports Preact 10.29 and renders native SVG components.

npm install vadivam-preact

Basic usage

import { Activity } from "vadivam-preact";

export function Status() {
  return <Activity size={20} color="navy" strokeWidth={1.5} title="Activity" />;
}

Icons accept Preact SVG attributes plus size, color, strokeWidth, absoluteStrokeWidth, and title.

Shared defaults

import { Activity, Search, VadivamProvider } from "vadivam-preact";

export function Toolbar() {
  return (
    <VadivamProvider size={20} color="navy" strokeWidth={1.5}>
      <Activity />
      <Search color="tomato" />
    </VadivamProvider>
  );
}

The root entry point also exports useVadivamContext, a generic Icon, createVadivamIcon, and icon nodes for advanced use.

Solid icons

Every icon has a solid twin with the same name in vadivam-preact/solid:

import { House } from "vadivam-preact";
import { House as HouseSolid } from "vadivam-preact/solid";

export function HomeTab({ active }: { active: boolean }) {
  const Icon = active ? HouseSolid : House;
  return <Icon size={20} title="Home" />;
}

Solid icons fill their shapes with color and have no stroke props. VadivamProvider sets defaults for both styles, and vadivam-preact/solid/icons/house and vadivam-preact/solid/dynamic work like their outline counterparts.

Per-icon imports

import Activity from "vadivam-preact/activity";
import Search from "vadivam-preact/icons/search";

Runtime names

import { DynamicIcon } from "vadivam-preact/dynamic";

<DynamicIcon name="activity" size={20} fallback={null} />;

The /dynamic entry point exports DynamicIcon, iconNames, and dynamicIconImports. Dynamic components accept normal icon props, a kebab-case name, and optional Preact children as a fallback.

Use static imports for known names. See Dynamic icons, Usage, and Accessibility.

Last updated on

Was this page helpful?