Keyboard

A keycap for showing a keyboard shortcut.

Installation

Import the class, and @use the entry point in your global styles: without it the component renders unstyled.

import { Component } from '@angular/core';
import { WrKbd } from 'ngwr/keyboard';

@Component({ imports: [WrKbd] })
export class MyComponent {}

Basic

Put a plain + between caps for a chord.

<wr-kbd>⌘</wr-kbd> + <wr-kbd>K</wr-kbd>

Open the command palette: ⌘ + K

Sizes

<wr-kbd size="sm">Esc</wr-kbd>
<wr-kbd size="md">Enter</wr-kbd>
<wr-kbd size="lg">⌫</wr-kbd>
EscEnter⌫

Full keyboard

Lay caps out with flex or grid, and set the width of wide keys yourself.

<wr-kbd>Esc</wr-kbd>
<wr-kbd>1</wr-kbd> <wr-kbd>2</wr-kbd> …
<wr-kbd>⌃</wr-kbd> <wr-kbd>⌥</wr-kbd> <wr-kbd>⌘</wr-kbd> <wr-kbd>Space</wr-kbd>
Esc 1 2 3 4 5 6 7 8 9 0 - = Delete
Tab Q W E R T Y U I O P [ ] \
Caps A S D F G H J K L ; ' Return
⇧ Z X C V B N M , . / ⇧
⌃ ⌥ ⌘ Space ⌘ ⌥ ← ↓ ↑ →

Inside prose

A cap does not take the size of the text around it: use md in body copy and sm in small text.

<!-- wrTypography comes from ngwr/typography. -->
<p wrTypography>
  Press <wr-kbd>⌘</wr-kbd> + <wr-kbd>P</wr-kbd> to open the command palette.
</p>

Press ⌘ + P to open the command palette.

API

NameDescriptionTypeDefault
sizeVisual size variant.'sm' | 'md' | 'lg''md'

CSS variables

Set these on the component's selector or a wrapper, not on :root: the defaults are declared on ngwr/keyboard's own element.

VariableDefaultDeclared on
--wr-kbd-bgvar(--wr-color-surface).wr-kbd
--wr-kbd-bordercolor-mix(in srgb, var(--wr-color-on-surface) 18%, transparent).wr-kbd
--wr-kbd-border-bottomcolor-mix(in srgb, var(--wr-color-on-surface) 32%, transparent).wr-kbd
--wr-kbd-colorvar(--wr-color-on-surface).wr-kbd
--wr-kbd-depth1px.wr-kbd +1 variant override
--wr-kbd-font-familyvar(--wr-font-family-base, system-ui, sans-serif).wr-kbd
--wr-kbd-font-sizevar(--wr-text-sm).wr-kbd +2 variant overrides
--wr-kbd-font-weightvar(--wr-font-weight-semibold).wr-kbd
--wr-kbd-line-heightvar(--wr-leading-none).wr-kbd
--wr-kbd-padding-xvar(--wr-space-sm).wr-kbd +2 variant overrides
--wr-kbd-radiusvar(--wr-control-radius-md).wr-kbd +2 variant overrides
--wr-kbd-shadow0 var(--wr-kbd-depth) 0 color-mix(in srgb, var(--wr-color-backdrop) 25%, transparent).wr-kbd

See also