Kbd
blode-ui/kbdFreeComponent
A styled keyboard key indicator for displaying shortcuts and key combinations.
Install it
npx shadcn@latest add https://raw.githubusercontent.com/mblode/blode-ui/main/public/r/kbd.jsonSource
1import {2 ArrowCornerDownLeftIcon,3 ArrowDownIcon,4 ArrowLeftXIcon,5 ArrowUpIcon,6 ArrowWall2RightIcon,7 CmdIcon,8 ControlIcon,9 OptIcon,10 ShiftIcon,11} from "blode-icons-react";12import { cva } from "class-variance-authority";13import type { VariantProps } from "class-variance-authority";14import type * as React from "react";1516import { cn } from "@/lib/utils";1718type KbdIcon =19 | "mod"20 | "shift"21 | "enter"22 | "command"23 | "ctrl"24 | "alt"25 | "tab"26 | "backspace"27 | "up"28 | "down";2930const kbdVariants = cva(31 "pointer-events-none inline-flex h-5 w-fit min-w-5 select-none items-center justify-center gap-1 rounded-sm px-1.5 font-medium font-sans text-xs ring-1 ring-inset [&_svg:not([class*='size-'])]:size-3",32 {33 defaultVariants: {34 variant: "default",35 },36 variants: {37 variant: {38 default:39 "bg-muted text-muted-foreground ring-border [[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background [[data-slot=tooltip-content]_&]:ring-background/20 dark:[[data-slot=tooltip-content]_&]:bg-background/10 dark:[[data-slot=tooltip-content]_&]:ring-background/10",40 tooltip:41 "bg-background/20 text-background ring-background/20 dark:bg-background/10 dark:ring-background/10",42 },43 },44 },45);4647interface KbdProps extends React.ComponentProps<"kbd">, VariantProps<typeof kbdVariants> {48 icon?: KbdIcon;49}5051const iconMap: Record<KbdIcon, React.ReactNode> = {52 alt: <OptIcon className="size-3" />,53 backspace: <ArrowLeftXIcon className="size-3" />,54 command: <CmdIcon className="size-3" />,55 ctrl: <ControlIcon className="size-3" />,56 down: <ArrowDownIcon className="size-3" />,57 enter: <ArrowCornerDownLeftIcon className="size-3" />,58 mod: <CmdIcon className="size-3" />,59 shift: <ShiftIcon className="size-3" />,60 tab: <ArrowWall2RightIcon className="size-3" />,61 up: <ArrowUpIcon className="size-3" />,62};6364const Kbd = ({ className, variant, children, icon, ...props }: KbdProps) => {65 const content = icon ? iconMap[icon] : children;6667 return (68 <kbd className={cn(kbdVariants({ variant }), className)} data-slot="kbd" {...props}>69 {content}70 </kbd>71 );72};7374const KbdGroup = ({ className, ...props }: React.ComponentProps<"kbd">) => (75 <kbd76 className={cn("inline-flex items-center gap-1", className)}77 data-slot="kbd-group"78 {...props}79 />80);8182export { Kbd, KbdGroup };
Files it writes
More from blode/ui
All 85 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | blode/ui | Components | Free | 2 deps | |
| Alertalert | blode/ui | Components | Free | no deps | |
| Alert Dialogalert-dialog | blode/ui | Components | Free | 1 dep | |
| Ask User Questionsask-user-questions | blode/ui | Components | Free | 1 dep | |
| Aspect Ratioaspect-ratio | blode/ui | Components | Free | 1 dep | |
| Attachmentattachment | blode/ui | Components | Free | 1 dep | |
| Autocompleteautocomplete | blode/ui | Components | Free | 1 dep | |
| Avataravatar | blode/ui | Components | Free | 1 dep |
