Getting Started
App Providerglobal.d.tsThemesTypes
cn(...args)Text ParserUnits Converters
AnchorAvatarBreadcrumbBurgerButtonCardCarouselCheckerCodeColor PickerCommandConfettiCopyButtonDouble Helix WordsFloating IndicatorGroupHighlight TextIndicatorInputKbdLabelLoaderPaginationPassword RequirementPolymorphic SlotProgressProseRatingRunning AreaScroll AreaSheetsSkeletonSliderStackSvgTableTabsTextareaTimelineTimesToasterTooltipTyping WordsTypography
useClickOutsideuseClipboarduseDeviceInfouseDialoguseDidUpdateuseDirectionuseDisclosureuseDocumentTitleuseDocumentVisibilityuseElementInfouseEyeDropperuseFetchuseFullscreenuseGeoLocationuseHotkeysuseHoveruseIduseImagePopupuseInputStateuseIntersectionuseIntervaluseIsomorphicEffectuseListStateuseLocalStorageuseMeasureScrollbaruseMediaQueryuseMergedRefuseMouseuseMoveuseMutationObserveruseNetworkuseOpenStateuseOrientationuseOSusePaginationusePWAInstalleruseRandomColorsuseReducedMotionuseReloaduseResizeObserveruseScrollIntoViewuseStateHistoryuseTimeoutuseTouchuseTriggeruseUncontrolleduseValidatedStateuseViewportSizeuseWindowEventuseWindowScroll
Docs
Web
Hooks
useHotkeys
useGeoLocation

Provides real-time access to user geolocation data.

useHover

Tracks hover state for any element.


Edit this page on GitHub
  • Started
  • Utilities
  • Configuration
  • Components
  • Hooks
  • Examples
  • Github
  • Contributing
⌘+J

© 2025 oeri rights MIT


Designed in Earth-616

Built by oeri

useHotkeys

Registers and listens for keyboard shortcuts, supporting global and scoped hotkey bindings.

Usage

Basic usage example to quickly see how the useHotkeys works.

ctrl+X to open
"use client";
import { useState } from "react";
import { Group } from "@/ui/group";
import { Button } from "@/ui/button";
import { Kbd, kbdMatcher } from "@/ui/kbd";
import { useHotkeys } from "@/hooks/use-hotkeys";

export function UseHotkeysDemo({ hotKeys = "ctrl+X" }: { hotKeys?: string }) {
  const [open, setOpen] = useState<boolean>(false);

  useHotkeys([[hotKeys, () => setOpen(o => !o)]]);

  const [items, separators] = kbdMatcher(hotKeys);
  const [items2, separators2] = kbdMatcher(["/", "M", "ctrl+X", "ctrl+K", "alt+mod+shift+X"].join("|"));

  return (
    <>
      <Button asChild variant="outline">
        <Group gap={4} className="h-auto w-max">
          <Kbd items={items} separator={index => separators[index]} /> to {open ? "close" : "open"}
        </Group>
      </Button>

      {open && (
        <div role="tooltip" aria-label="modal" className="absolute top-[calc(50%+20px)] rounded-md border bg-background p-4 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-100 data-[state=open]:zoom-in-100">
          <Group gap={4}>
            <Kbd size="sm" items={items2} separator={index => separators2[index]} />
          </Group>
        </div>
      )}
    </>
  );
}

Source Codes

Full working code example, including necessary markup and styles. You can copy and paste this code directly to start using the component immediately.

use-hotkeys.ts