Skip to content

Icon

Renders Lucide icons as Ilha markup.

Source Code

Icon accepts a Lucide IconNode and converts it into raw SVG markup that can be passed into other Areia components, such as Button and Banner.

import ilha from "ilha";
import { CircleCheck, Info, TriangleAlert } from "lucide";
import { Icon } from "areia";

export default ilha.render(() => (
  <div class="flex flex-wrap items-center gap-3 text-areia-default">
    <Icon icon={Info} />
    <Icon icon={CircleCheck} class="text-areia-success" />
    <Icon
      icon={TriangleAlert}
      class="text-areia-warning-soft-foreground"
    />
  </div>
));

Import

import { Icon } from "areia";

You also need a Lucide icon node from lucide:

import { Info } from "lucide";

Usage

import ilha from "ilha";
import { Info } from "lucide";
import { Icon } from "areia";

export default ilha.render(() => <Icon icon={Info} />);

Examples

Sizes

Use class or className to change the rendered SVG size.

import ilha from "ilha";
import { Info } from "lucide";
import { Icon } from "areia";

export default ilha.render(() => (
  <div class="flex items-center gap-3 text-areia-default">
    <Icon icon={Info} class="size-3" />
    <Icon icon={Info} />
    <Icon icon={Info} class="size-5" />
    <Icon icon={Info} class="size-6" />
  </div>
));

Color

Icons use currentColor, so text color utilities can be used to control their color.

import ilha from "ilha";
import {
  CircleCheck,
  Info,
  TriangleAlert,
  CircleX,
} from "lucide";
import { Icon } from "areia";

export default ilha.render(() => (
  <div class="flex items-center gap-3">
    <Icon icon={Info} class="text-areia-info-soft-foreground" />
    <Icon
      icon={CircleCheck}
      class="text-areia-success-soft-foreground"
    />
    <Icon
      icon={TriangleAlert}
      class="text-areia-warning-soft-foreground"
    />
    <Icon
      icon={CircleX}
      class="text-areia-destructive-soft-foreground"
    />
  </div>
));

Stroke Width

Use strokeWidth to adjust the SVG stroke width.

import ilha from "ilha";
import { Info } from "lucide";
import { Icon } from "areia";

export default ilha.render(() => (
  <div class="flex items-center gap-3 text-areia-default">
    <Icon icon={Info} strokeWidth={1} />
    <Icon icon={Info} strokeWidth={1.75} />
    <Icon icon={Info} strokeWidth={2.5} />
  </div>
));

Accessible Icon

By default, icons are decorative and rendered with aria-hidden="true". Provide label when the icon itself communicates meaning without nearby text.

import ilha from "ilha";
import { CircleCheck } from "lucide";
import { Icon } from "areia";

export default ilha.render(() => (
  <Icon icon={CircleCheck} label="Success" />
));

In a Button

Use Icon to provide Lucide icons to components that accept an icon slot.

import ilha from "ilha";
import { Plus } from "lucide";
import { Button, Icon } from "areia";

export default ilha.render(() => (
  <Button variant="secondary" icon={<Icon icon={Plus} />}>
    Create item
  </Button>
));

Icon Only Button

When an icon is used without visible text, provide an accessible label on the button.

import ilha from "ilha";
import { Plus } from "lucide";
import { Button, Icon } from "areia";

export default ilha.render(() => (
  <Button
    variant="secondary"
    shape="square"
    icon={<Icon icon={Plus} />}
    aria-label="Create item"
  />
));

API Reference

PropTypeDefaultDescription
iconIconNode-Lucide icon node to render.
classstring-Additional CSS classes applied to the root SVG.
classNamestring-Alias for class.
labelstring-Accessible label. When omitted, the icon is hidden from assistive technology.
strokeWidthstring | number1.75SVG stroke width.