Kbd

Displays a keyboard key or shortcut inline.

Quick Start

<%= kui(:kbd) { "⌘K" } %>

Locals

Local Type Default
size: :sm | :md | :lg :md
css_classes: String ""
**component_options Hash {}

Sub-parts

Part Element Description
:group <kbd> Wraps multiple Kbd elements inline

Usage

Modifier Symbols

Display modifier keys as individual keycaps grouped together.

<%= kui(:kbd, :group) do %>
  <%= kui(:kbd) { "⌘" } %>
  <%= kui(:kbd) { "⇧" } %>
  <%= kui(:kbd) { "⌥" } %>
  <%= kui(:kbd) { "⌃" } %>
<% end %>

Key Combination

Use a group with a separator for multi-key shortcuts.

<%= kui(:kbd, :group) do %>
  <%= kui(:kbd) { "Ctrl" } %>
  <span>+</span>
  <%= kui(:kbd) { "B" } %>
<% end %>

Inline with Text

Embed key references naturally in prose.

<p class="text-muted-foreground text-sm">
  Use
  <%= kui(:kbd, :group) do %>
    <%= kui(:kbd) { "Ctrl + B" } %>
    <%= kui(:kbd) { "Ctrl + K" } %>
  <% end %>
  to open the command palette
</p>

Sizes

Three sizes match the spatial system.

<%= kui(:kbd, size: :sm) { "⌘K" } %>
<%= kui(:kbd, size: :md) { "⌘K" } %>
<%= kui(:kbd, size: :lg) { "⌘K" } %>

Inside a Button

<%= kui(:button, variant: :outline) do %>
  Accept <%= kui(:kbd) { "⏎" } %>
<% end %>

Inside an Input Group

<%= kui(:input_group) do %>
  <%= kui(:input_group, :addon) do %>
    <%= kiso_icon("search", class: "size-4") %>
  <% end %>
  <%= kui(:input, placeholder: "Search...") %>
  <%= kui(:input_group, :addon, align: :end) do %>
    <%= kui(:kbd) { "⌘" } %>
    <%= kui(:kbd) { "K" } %>
  <% end %>
<% end %>

Theme

# lib/kiso/themes/kbd.rb
Kiso::Themes::Kbd = ClassVariants.build(
  base: "bg-muted text-muted-foreground pointer-events-none inline-flex items-center " \
        "justify-center gap-1 rounded-sm font-sans font-medium select-none " \
        "[&_svg:not([class*='size-'])]:size-3",
  variants: {
    size: {
      sm: "h-4 min-w-4 px-0.5 text-xs",
      md: "h-5 min-w-5 px-1 text-xs",
      lg: "h-6 min-w-6 px-1.5 text-xs"
    }
  },
  defaults: { size: :md }
)

Kiso::Themes::KbdGroup = ClassVariants.build(
  base: "inline-flex items-center gap-1"
)

Accessibility

The <kbd> element is semantic HTML that represents user keyboard input. Screen readers announce it as keyboard input without any additional ARIA attributes needed.

Attribute Value
data-slot "kbd" / "kbd-group"
Element <kbd> (semantic HTML)