Kbd
Migration guide for Kbd from HeroUI v2 to v3
Refer to the v3 Kbd documentation for complete API reference, styling guide, and advanced examples. This guide only focuses on migrating from HeroUI v2.
Overview
The Kbd component in HeroUI v3 has been redesigned with a compound component pattern, requiring explicit structure with Kbd.Abbr and Kbd.Content components.
Structure Changes
v2: Keys Prop
In v2, Kbd used a keys prop to automatically render keyboard keys:
import { Kbd } from "@heroui/react";
<Kbd keys={["command"]}>K</Kbd>v3: Compound Components
In v3, Kbd requires manual definition of keys using compound components:
import { Kbd } from "@heroui/react";
<Kbd>
<Kbd.Abbr keyValue="command" />
<Kbd.Content>K</Kbd.Content>
</Kbd>Key Changes
1. Component Structure
v2: Single component with keys prop
v3: Compound components: Kbd.Abbr, Kbd.Content
2. Prop Changes
| v2 Prop | v3 Prop | Notes |
|---|---|---|
keys | - | Removed (use Kbd.Abbr with keyValue) |
classNames | - | Use className props |
| - | variant | New prop (default | light) |
3. Removed Props
The following props are no longer available in v3:
keys- UseKbd.Abbrcomponents withkeyValueprop insteadclassNames- UseclassNameprops on individual components
Migration Examples
Basic Usage
import { Kbd } from "@heroui/react";
export default function App() {
return <Kbd keys={["command"]}>K</Kbd>;
}import { Kbd } from "@heroui/react";
export default function App() {
return (
<Kbd>
<Kbd.Abbr keyValue="command" />
<Kbd.Content>K</Kbd.Content>
</Kbd>
);
}Multiple Keys
<Kbd keys={["command", "shift"]}>N</Kbd><Kbd>
<Kbd.Abbr keyValue="command" />
<Kbd.Abbr keyValue="shift" />
<Kbd.Content>N</Kbd.Content>
</Kbd>Key Only (No Content)
<Kbd keys={["enter"]} /><Kbd>
<Kbd.Abbr keyValue="enter" />
</Kbd>Variants
<Kbd keys={["command"]}>K</Kbd><Kbd variant="default">
<Kbd.Abbr keyValue="command" />
<Kbd.Content>K</Kbd.Content>
</Kbd>
<Kbd variant="light">
<Kbd.Abbr keyValue="command" />
<Kbd.Content>K</Kbd.Content>
</Kbd>Custom Styling
<Kbd
keys={["command"]}
classNames={{
base: "custom-base",
abbr: "custom-abbr",
content: "custom-content"
}}
>
K
</Kbd><Kbd className="custom-base">
<Kbd.Abbr keyValue="command" className="custom-abbr" />
<Kbd.Content className="custom-content">K</Kbd.Content>
</Kbd>Component Anatomy
The v3 Kbd follows this structure:
Kbd (Root)
├── Kbd.Abbr (keyValue="command")
├── Kbd.Abbr (keyValue="shift") [optional, multiple]
└── Kbd.Content [optional, for text content]Available Key Values
The keyValue prop accepts the same keyboard key types as v2:
Modifier Keys:
command,shift,ctrl,option,alt,win
Special Keys:
enter,delete,escape,tab,space,capslock,help
Navigation Keys:
up,down,left,right,pageup,pagedown,home,end
Function Keys:
fn
Breaking Changes Summary
- Component Structure: Must manually define keys using
Kbd.Abbrcomponents - keys Prop Removed: Use
Kbd.AbbrwithkeyValueprop instead - Children Wrapping: Wrap text content in
Kbd.Contentcomponent - ClassNames Removed: Use
classNameprops on individual components - New Variant Prop: Added
variantprop for styling (default|light)
Tips for Migration
- Replace keys prop: Convert
keys={["command"]}to<Kbd.Abbr keyValue="command" /> - Multiple keys: Add multiple
Kbd.Abbrcomponents for key combinations - Wrap content: Wrap text children in
Kbd.Contentcomponent - Key-only display: Omit
Kbd.Contentif only displaying keys - Custom styling: Apply
classNameprops directly toKbd,Kbd.Abbr, andKbd.Content - Use variants: Apply
variant="light"for a lighter appearance
Need Help?
For v3 Kbd features and API:
- See the API Reference
- Check interactive examples
For community support: