# Tag

A compact label with an optional icon and a named removal action.

Connect Flood once using [the installation guide](https://flood.md/docs/installation). Then import the components you use; no per-component add command is needed.

## Example

```tsx
"use client";

import { FloodRoot, Tag } from "@flood-md/react";
import "@flood-md/react/styles.css";

export function Example() {
  return (
    <FloodRoot>
      <Tag onRemove={() => { /* Update the host collection. */ }}>Design</Tag>
    </FloodRoot>
  );
}
```

## Design notes

- Tag is a label, not a status Badge or a selection toggle. The host owns removal; onRemove never hides the element automatically. Use ordinary noninteractive label content.
- Plain text gets a default Remove label. Rich content needs explicit removeLabel. disabled prevents removal; size and decorative icon are independent. removeButtonProps customizes the nested native action while Tag owns type, name, disabled and removal.
- Standalone removal is an ordinary Tab stop. MultiSelect supplies its composite keyboard model. Geometry uses relative Flood sizing; long labels wrap and touch targets remain distinct. Available in 0.2.5.

## API reference

| Prop | Values | Default |
| --- | --- | --- |
| `size` | `"sm" \| "md" \| "lg"` | `"md"` |
| `icon` | `ReactNode` | `—` |
| `disabled` | `boolean` | `false` |
| `onRemove` | `() => void` | `—` |
| `removeLabel` | `string` | `—` |
| `removeButtonProps` | `Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children" \| "type" \| "disabled" \| "onClick" \| "aria-label">` | `—` |
| `Native HTML props` | `HTMLAttributes<HTMLSpanElement>` | `Forwarded` |
