Skip to content
Back to skills

Chip

ASecurity

Compact element for tags, filters, labels, or selections. Supports colors, variants, sizes, adornments, and interactive states (clickable, selectable). Uses `forwardRef` and keyboard accessibility (Enter/Space).

  • 4 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 27, 2026
data-aitypescriptreact

Works with

  • cursor
  • cli

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add reaviz/skills --skill chip --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Chip?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Chip
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/reaviz-chip/badge)](https://www.skillsdirectory.com/skills/reaviz-chip)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# Chip

Compact element for tags, filters, labels, or selections. Supports colors, variants, sizes, adornments, and interactive states (clickable, selectable). Uses `forwardRef` and keyboard accessibility (Enter/Space).

## Import

```tsx
import { Chip, DeletableChip } from 'reablocks';
```

## Chip Props

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `color` | `'default' \| 'primary' \| 'secondary' \| 'success' \| 'warning' \| 'error' \| 'info' \| string` | `'default'` | Color variant |
| `variant` | `'filled' \| 'outline' \| string` | `'filled'` | Style variant |
| `size` | `'small' \| 'medium' \| 'large' \| string` | `'medium'` | Size variant |
| `selected` | `boolean` | — | Selected state (applies the variant's `selected` styles when clickable) |
| `disabled` | `boolean` | — | Disabled state |
| `disableMargins` | `boolean` | — | Remove default margins |
| `start` | `ReactElement \| string` | — | Content before the label |
| `end` | `ReactElement \| string` | — | Content after the label |
| `theme` | `ChipTheme` | — | Per-instance theme override |
| `className` | `string` | — | Additional CSS classes |

Also accepts all standard `HTMLDivElement` attributes including `onClick`. Children are wrapped in a `<div>` styled by `theme.label`.

## Basic Usage

```tsx
<Chip color="primary">Label</Chip>
```

## Variants

```tsx
<Chip variant="filled">Filled</Chip>
<Chip variant="outline">Outline</Chip>
```

## Colors

All seven colors work with every variant:

```tsx
<Chip color="default">Default</Chip>
<Chip color="primary">Primary</Chip>
<Chip color="secondary">Secondary</Chip>
<Chip color="success">Success</Chip>
<Chip color="warning">Warning</Chip>
<Chip color="error">Error</Chip>
<Chip color="info">Info</Chip>
```

## Sizes

```tsx
<Chip size="small">Small</Chip>
<Chip size="medium">Medium</Chip>
<Chip size="large">Large</Chip>
```

## Adornments

Use `start` and `end` to add icons or text before/after the label. Adornment containers are sized via `theme.adornment.sizes[size]`:

```tsx
<Chip start={<StarIcon />}>With Icon</Chip>
<Chip end={<ArrowIcon />}>With End</Chip>
<Chip start="$" end={<CloseIcon />}>Both</Chip>
```

## Clickable

When `onClick` is provided, the chip becomes a button: `role="button"`, `tabIndex={0}`, and `Enter`/`Space` keyboard handling. The color's `selectable` styles (hover + selected) apply only when `onClick` is present.

```tsx
<Chip variant="outline" onClick={() => handleClick()}>
  Clickable
</Chip>
```

## Selected State

```tsx
<Chip
  variant="outline"
  color="primary"
  selected={isSelected}
  onClick={() => setIsSelected(!isSelected)}
>
  Toggle Me
</Chip>
```

## DeletableChip

`DeletableChip` is a wrapper that injects a delete button into the `end` slot. It accepts all `ChipProps` except `end`.

```tsx
import { DeletableChip } from 'reablocks';

<DeletableChip
  variant="filled"
  color="success"
  onDelete={() => removeItem(id)}
>
  Removable
</DeletableChip>
```

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `onDelete` | `() => void` | — | Called when the delete icon is clicked |
| `deleteIcon` | `ReactElement` | `<CloseIcon />` | Custom delete icon |

The delete button styles come from `theme.deleteButton.base` + `theme.deleteButton[size]`.

## ChipTheme Interface

```typescript
interface ThemeColor {
  base?: string;
  variants?: {
    filled?: string;
    outline?: string;
    [key: string]: string;
  };
  selectable?: {
    base?: string;                  // Applied on hover when clickable (e.g. cursor-pointer)
    variants?: {
      filled?:  { base?: string; selected?: string };
      outline?: { base?: string; selected?: string };
      [key: string]: { base?: string; selected?: string };
    };
  };
}

interface ChipTheme {
  base: string;                     // Inline-flex container, transitions, font
  label: string;                    // Inner wrapper around children (flex items-center)
  focus: string;                    // focus-visible ring/outline
  disabled: string;                 // Disabled state (opacity, cursor)
  adornment: {
    base: string;                   // Adornment container (flex)
    start: string;                  // Start adornment spacing
    end: string;                    // End adornment spacing
    sizes: {
      small: string;                // Icon sizing per chip size
      medium: string;
      large: string;
      [key: string]: string;
    };
  };
  variants: {
    filled: string;
    outline: string;
    [key: string]: string;
  };
  colors: {
    default?: ThemeColor;
    primary?: ThemeColor;
    secondary?: ThemeColor;
    success?: ThemeColor;
    warning?: ThemeColor;
    error?: ThemeColor;
    info?: ThemeColor;
    [key: string]: ThemeColor;
  };
  sizes: {
    small: string;
    medium: string;
    large: string;
    [key: string]: string;
  };
  deleteButton: {                   // Used by DeletableChip's injected close button
    base: string;
    sizes: { small: string; medium: string; large: string; [key: string]: string };
  };
}
```

`theme.label` styles the children wrapper — customize it (font weight, color, padding) without touching `theme.base`.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.