Skip to content

feat: add physical hotkeys, recorder validation, hints, and display options - #151

Merged
KevinVandy merged 3 commits into
mainfrom
feat-physical-hotkeys-recording-hints
Sep 21, 2026
Merged

KevinVandy merged 3 commits into
mainfrom
feat-physical-hotkeys-recording-hints

Conversation

@KevinVandy

@KevinVandy KevinVandy commented Sep 21, 2026 •

Copy link
Copy Markdown
Member

Changes

Add explicit physical bindings (Mod+[KeyS] or { code: 'KeyS', mod: true }) alongside logical key bindings. Recorders default to physical codes so Option-modified characters and shifted digits can be recorded and triggered consistently. Parsed and raw bindings carry either key or code.

  • Add recorder validation, conflict detection, rejection callbacks, and reliable recording-event isolation for shortcuts and sequences.
  • Add meta.group, modifier-held hint helpers for every framework, and display parts, independent symbol options, readable physical labels, and optional caller-supplied layout maps.
  • Fix matching, release/reset handling, sequence normalization and repeats, Preact registration subscription rerenders, and Svelte recorder controls used as event handlers.
  • Reorganize core internals while retaining public type exports; update guides and generated API references throughout.
  • Add basic kitchen-sink examples for React, Preact, Solid, Vue, Svelte, Angular, and Lit. React uses TanStack Router; the other ports use small hash routes to demonstrate registration lifetimes. Expand the vanilla formatting example and move its docs navigation into the vanilla framework section.

Bindings and persistence remain application state. This does not introduce an action catalog or preferences store.

Issues addressed

Related discussions:

Validation

  • Passed pnpm format && pnpm test && pnpm generate-docs (139 test/build/check tasks across 70 projects).
  • Passed all kitchen-sink builds and available type/lint checks, plus docs/config link verification and size-limit (10.28 kB / 12 kB).
  • Browser smoke checks covered physical shortcuts, hints, enabled state, route cleanup, scoped saves, recorder conflicts/rejections, rebinding, sequences, and formatting.
  • Added regression tests for the Preact subscription loop and Svelte recorder event-handler binding discovered while porting examples.

TypeDoc reports its existing TypeScript 6 compatibility warning; generation succeeds.

Checklist

  • Followed the contributing workflow.
  • Tested locally with the full pnpm test suite, which includes the PR checks.
  • Added one combined changeset: minor bumps for all 13 packages.

Release impact

Recorders now default to recordBy: 'code'; choose 'key' for logical recording. Clear operations call only onClear. RawHotkey and ParsedHotkey are exclusive key/code unions, so consumers extending them with interfaces should use type intersections. See the changeset for the full public API list.

@KevinVandy
KevinVandy requested a review from a team as a code owner September 21, 2026 02:45
@coderabbitai

coderabbitai Bot commented Sep 21, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 224 files, which is 74 over the limit of 150.

To get a review, reduce the PR to 150 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Repository: TanStack/hotkeys/.coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: fe607282-7cd3-4247-9834-51c10be9c7e4

📥 Commits

Reviewing files that changed from the base of the PR and between 6cb79c6 and 6346178.

⛔ Files ignored due to path filters (145)
  • docs/framework/angular/reference/functions/injectHotkeyHint.md is excluded by !docs/**/reference/**
  • docs/framework/angular/reference/index.md is excluded by !docs/**/reference/**
  • docs/framework/angular/reference/interfaces/InjectHotkeyOptions.md is excluded by !docs/**/reference/**
  • docs/framework/angular/reference/interfaces/InjectHotkeySequenceOptions.md is excluded by !docs/**/reference/**
  • docs/framework/lit/reference/classes/HotkeyHintController.md is excluded by !docs/**/reference/**
  • docs/framework/lit/reference/index.md is excluded by !docs/**/reference/**
  • docs/framework/preact/reference/functions/useHotkeyHint.md is excluded by !docs/**/reference/**
  • docs/framework/preact/reference/functions/useHotkeyRegistrations.md is excluded by !docs/**/reference/**
  • docs/framework/preact/reference/index.md is excluded by !docs/**/reference/**
  • docs/framework/preact/reference/interfaces/HotkeyRegistrationsResult.md is excluded by !docs/**/reference/**
  • docs/framework/preact/reference/interfaces/UseHotkeyOptions.md is excluded by !docs/**/reference/**
  • docs/framework/preact/reference/interfaces/UseHotkeySequenceOptions.md is excluded by !docs/**/reference/**
  • docs/framework/react/reference/functions/useHotkeyHint.md is excluded by !docs/**/reference/**
  • docs/framework/react/reference/index.md is excluded by !docs/**/reference/**
  • docs/framework/react/reference/interfaces/UseHotkeyOptions.md is excluded by !docs/**/reference/**
  • docs/framework/react/reference/interfaces/UseHotkeySequenceOptions.md is excluded by !docs/**/reference/**
  • docs/framework/solid/reference/functions/createHotkeyHint.md is excluded by !docs/**/reference/**
  • docs/framework/solid/reference/index.md is excluded by !docs/**/reference/**
  • docs/framework/solid/reference/interfaces/CreateHotkeyOptions.md is excluded by !docs/**/reference/**
  • docs/framework/solid/reference/interfaces/CreateHotkeySequenceOptions.md is excluded by !docs/**/reference/**
  • docs/framework/svelte/reference/functions/createHotkeyRecorder.md is excluded by !docs/**/reference/**
  • docs/framework/svelte/reference/functions/createHotkeySequenceRecorder.md is excluded by !docs/**/reference/**
  • docs/framework/svelte/reference/functions/getHotkeyHint.md is excluded by !docs/**/reference/**
  • docs/framework/svelte/reference/index.md is excluded by !docs/**/reference/**
  • docs/framework/svelte/reference/interfaces/SvelteHotkeyHint.md is excluded by !docs/**/reference/**
  • docs/framework/vue/reference/functions/useHotkeyHint.md is excluded by !docs/**/reference/**
  • docs/framework/vue/reference/index.md is excluded by !docs/**/reference/**
  • docs/reference/classes/HotkeyManager.md is excluded by !docs/**/reference/**
  • docs/reference/classes/HotkeyRecorder.md is excluded by !docs/**/reference/**
  • docs/reference/classes/HotkeySequenceRecorder.md is excluded by !docs/**/reference/**
  • docs/reference/classes/KeyStateTracker.md is excluded by !docs/**/reference/**
  • docs/reference/classes/SequenceManager.md is excluded by !docs/**/reference/**
  • docs/reference/functions/areHotkeysEqual.md is excluded by !docs/**/reference/**
  • docs/reference/functions/assertValidHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/functions/checkHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/functions/createHotkeyHandler.md is excluded by !docs/**/reference/**
  • docs/reference/functions/createMultiHotkeyHandler.md is excluded by !docs/**/reference/**
  • docs/reference/functions/createSequenceMatcher.md is excluded by !docs/**/reference/**
  • docs/reference/functions/detectPlatform.md is excluded by !docs/**/reference/**
  • docs/reference/functions/findHotkeyConflicts.md is excluded by !docs/**/reference/**
  • docs/reference/functions/formatForDisplay.md is excluded by !docs/**/reference/**
  • docs/reference/functions/formatHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/functions/formatHotkeySequence.md is excluded by !docs/**/reference/**
  • docs/reference/functions/formatWithLabels.md is excluded by !docs/**/reference/**
  • docs/reference/functions/getHotkeyManager.md is excluded by !docs/**/reference/**
  • docs/reference/functions/getKeyStateTracker.md is excluded by !docs/**/reference/**
  • docs/reference/functions/getSequenceManager.md is excluded by !docs/**/reference/**
  • docs/reference/functions/hasNonModifierKey.md is excluded by !docs/**/reference/**
  • docs/reference/functions/isModifierKey.md is excluded by !docs/**/reference/**
  • docs/reference/functions/isSingleLetterKey.md is excluded by !docs/**/reference/**
  • docs/reference/functions/matchesHeldModifiers.md is excluded by !docs/**/reference/**
  • docs/reference/functions/matchesKeyboardEvent.md is excluded by !docs/**/reference/**
  • docs/reference/functions/normalizeHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/functions/normalizeHotkeyFromEvent.md is excluded by !docs/**/reference/**
  • docs/reference/functions/normalizeHotkeyFromParsed.md is excluded by !docs/**/reference/**
  • docs/reference/functions/normalizeKeyName.md is excluded by !docs/**/reference/**
  • docs/reference/functions/normalizeRegisterableHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/functions/parseHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/functions/parseKeyboardEvent.md is excluded by !docs/**/reference/**
  • docs/reference/functions/parseRegisterableHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/functions/rawHotkeyToParsedHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/functions/resolveModifier.md is excluded by !docs/**/reference/**
  • docs/reference/functions/toHotkeyRegistrationView.md is excluded by !docs/**/reference/**
  • docs/reference/functions/validateHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/index.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/CreateHotkeyHandlerOptions.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/FormatDisplayOptions.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/HeldModifierOptions.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/HotkeyCallbackContext.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/HotkeyConflictOptions.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/HotkeyMeta.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/HotkeyOptions.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/HotkeyRecorderOptions.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/HotkeyRecorderState.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/HotkeyRecorderValidationContext.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/HotkeyRegistration.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/HotkeyRegistrationHandle.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/HotkeyRegistrationView.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/HotkeySequenceRecorderOptions.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/HotkeySequenceRecorderState.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/HotkeySequenceRecorderValidationContext.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/KeyboardEventMatch.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/NormalizedKeyboardEvent.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/ParsedHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/ParsedModifiers.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/RawHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/RawModifiers.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/RecorderOptions.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/RecorderRejection.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/SequenceOptions.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/SequenceRegistration.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/SequenceRegistrationHandle.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/SequenceRegistrationView.md is excluded by !docs/**/reference/**
  • docs/reference/interfaces/ValidationResult.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/CanonicalModifier.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/ConflictBehavior.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/DisplayHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/EditingKey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/FourModifierHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/FunctionKey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/Hotkey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/HotkeyCallback.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/HotkeyConflict.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/HotkeySequence.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/HotkeySequenceRecorderCommitKeys.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/IndividualKey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/Key.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/LetterKey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/LogicalKey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/Modifier.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/MultiHotkeyHandler.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/NamedKey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/NavigationKey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/NonPunctuationKey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/NumberKey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/ParsedHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/PhysicalKey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/PhysicalKeyCode.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/PunctuationKey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/RawHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/RecorderKeyMode.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/RegisterableHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/SingleModifierHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/Target.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/ThreeModifierHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/type-aliases/TwoModifierHotkey.md is excluded by !docs/**/reference/**
  • docs/reference/variables/ALL_KEYS.md is excluded by !docs/**/reference/**
  • docs/reference/variables/DEFAULT_SEQUENCE_TIMEOUT.md is excluded by !docs/**/reference/**
  • docs/reference/variables/EDITING_KEYS.md is excluded by !docs/**/reference/**
  • docs/reference/variables/FUNCTION_KEYS.md is excluded by !docs/**/reference/**
  • docs/reference/variables/KEY_DISPLAY_SYMBOLS.md is excluded by !docs/**/reference/**
  • docs/reference/variables/LETTER_KEYS.md is excluded by !docs/**/reference/**
  • docs/reference/variables/LINUX_MODIFIER_LABELS.md is excluded by !docs/**/reference/**
  • docs/reference/variables/MAC_MODIFIER_LABELS.md is excluded by !docs/**/reference/**
  • docs/reference/variables/MAC_MODIFIER_SYMBOLS.md is excluded by !docs/**/reference/**
  • docs/reference/variables/MODIFIER_ALIASES.md is excluded by !docs/**/reference/**
  • docs/reference/variables/MODIFIER_KEYS.md is excluded by !docs/**/reference/**
  • docs/reference/variables/MODIFIER_ORDER.md is excluded by !docs/**/reference/**
  • docs/reference/variables/NAVIGATION_KEYS.md is excluded by !docs/**/reference/**
  • docs/reference/variables/NUMBER_KEYS.md is excluded by !docs/**/reference/**
  • docs/reference/variables/PUNCTUATION_CODE_MAP.md is excluded by !docs/**/reference/**
  • docs/reference/variables/PUNCTUATION_KEYS.md is excluded by !docs/**/reference/**
  • docs/reference/variables/PUNCTUATION_KEY_DISPLAY_LABELS.md is excluded by !docs/**/reference/**
  • docs/reference/variables/WINDOWS_MODIFIER_LABELS.md is excluded by !docs/**/reference/**
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml, !**/pnpm-lock.yaml
📒 Files selected for processing (224)
  • .changeset/physical-recording-hints-display.md
  • docs/config.json
  • docs/devtools.md
  • docs/framework/angular/guides/formatting-display.md
  • docs/framework/angular/guides/hotkey-recording.md
  • docs/framework/angular/guides/hotkeys.md
  • docs/framework/angular/guides/key-state-tracking.md
  • docs/framework/angular/guides/sequence-recording.md
  • docs/framework/angular/guides/sequences.md
  • docs/framework/angular/quick-start.md
  • docs/framework/lit/guides/formatting-display.md
  • docs/framework/lit/guides/hotkey-recording.md
  • docs/framework/lit/guides/hotkeys.md
  • docs/framework/lit/guides/key-state-tracking.md
  • docs/framework/lit/guides/sequence-recording.md
  • docs/framework/lit/guides/sequences.md
  • docs/framework/lit/quick-start.md
  • docs/framework/preact/guides/formatting-display.md
  • docs/framework/preact/guides/hotkey-recording.md
  • docs/framework/preact/guides/hotkeys.md
  • docs/framework/preact/guides/key-state-tracking.md
  • docs/framework/preact/guides/sequence-recording.md
  • docs/framework/preact/guides/sequences.md
  • docs/framework/react/guides/formatting-display.md
  • docs/framework/react/guides/hotkey-recording.md
  • docs/framework/react/guides/hotkeys.md
  • docs/framework/react/guides/key-state-tracking.md
  • docs/framework/react/guides/sequence-recording.md
  • docs/framework/react/guides/sequences.md
  • docs/framework/react/quick-start.md
  • docs/framework/solid/guides/formatting-display.md
  • docs/framework/solid/guides/hotkey-recording.md
  • docs/framework/solid/guides/hotkeys.md
  • docs/framework/solid/guides/key-state-tracking.md
  • docs/framework/solid/guides/sequence-recording.md
  • docs/framework/solid/guides/sequences.md
  • docs/framework/svelte/guides/formatting-display.md
  • docs/framework/svelte/guides/hotkey-recording.md
  • docs/framework/svelte/guides/hotkeys.md
  • docs/framework/svelte/guides/key-state-tracking.md
  • docs/framework/svelte/guides/sequence-recording.md
  • docs/framework/svelte/guides/sequences.md
  • docs/framework/svelte/quick-start.md
  • docs/framework/vue/guides/formatting-display.md
  • docs/framework/vue/guides/hotkey-recording.md
  • docs/framework/vue/guides/hotkeys.md
  • docs/framework/vue/guides/key-state-tracking.md
  • docs/framework/vue/guides/sequence-recording.md
  • docs/framework/vue/guides/sequences.md
  • docs/framework/vue/quick-start.md
  • docs/installation.md
  • docs/overview.md
  • examples/angular/injectHotkey/src/app/app.component.html
  • examples/angular/injectHotkey/src/app/app.component.ts
  • examples/angular/kitchen-sink/README.md
  • examples/angular/kitchen-sink/angular.json
  • examples/angular/kitchen-sink/package.json
  • examples/angular/kitchen-sink/src/app/app.component.ts
  • examples/angular/kitchen-sink/src/app/app.config.ts
  • examples/angular/kitchen-sink/src/index.html
  • examples/angular/kitchen-sink/src/main.ts
  • examples/angular/kitchen-sink/src/styles.css
  • examples/angular/kitchen-sink/tsconfig.json
  • examples/lit/hotkey/src/app.ts
  • examples/lit/kitchen-sink/README.md
  • examples/lit/kitchen-sink/index.html
  • examples/lit/kitchen-sink/package.json
  • examples/lit/kitchen-sink/src/app.ts
  • examples/lit/kitchen-sink/src/styles.css
  • examples/lit/kitchen-sink/tsconfig.json
  • examples/preact/kitchen-sink/README.md
  • examples/preact/kitchen-sink/eslint.config.js
  • examples/preact/kitchen-sink/index.html
  • examples/preact/kitchen-sink/package.json
  • examples/preact/kitchen-sink/src/index.tsx
  • examples/preact/kitchen-sink/src/styles.css
  • examples/preact/kitchen-sink/tsconfig.json
  • examples/preact/kitchen-sink/vite.config.ts
  • examples/preact/useHotkey/src/index.tsx
  • examples/react/kitchen-sink/README.md
  • examples/react/kitchen-sink/eslint.config.js
  • examples/react/kitchen-sink/index.html
  • examples/react/kitchen-sink/package.json
  • examples/react/kitchen-sink/src/index.tsx
  • examples/react/kitchen-sink/src/styles.css
  • examples/react/kitchen-sink/tsconfig.json
  • examples/react/kitchen-sink/vite.config.ts
  • examples/react/useHotkey/src/index.tsx
  • examples/react/useHotkeyRecorder/src/index.tsx
  • examples/react/useHotkeySequence/src/index.tsx
  • examples/solid/createHotkey/src/index.tsx
  • examples/solid/kitchen-sink/README.md
  • examples/solid/kitchen-sink/index.html
  • examples/solid/kitchen-sink/package.json
  • examples/solid/kitchen-sink/src/index.tsx
  • examples/solid/kitchen-sink/src/styles.css
  • examples/solid/kitchen-sink/tsconfig.json
  • examples/solid/kitchen-sink/vite.config.ts
  • examples/svelte/create-hotkey/src/App.svelte
  • examples/svelte/kitchen-sink/.gitignore
  • examples/svelte/kitchen-sink/.npmrc
  • examples/svelte/kitchen-sink/README.md
  • examples/svelte/kitchen-sink/eslint.config.js
  • examples/svelte/kitchen-sink/index.html
  • examples/svelte/kitchen-sink/package.json
  • examples/svelte/kitchen-sink/src/App.svelte
  • examples/svelte/kitchen-sink/src/Editor.svelte
  • examples/svelte/kitchen-sink/src/EditorPane.svelte
  • examples/svelte/kitchen-sink/src/Formatting.svelte
  • examples/svelte/kitchen-sink/src/Hint.svelte
  • examples/svelte/kitchen-sink/src/Recording.svelte
  • examples/svelte/kitchen-sink/src/Root.svelte
  • examples/svelte/kitchen-sink/src/Sequences.svelte
  • examples/svelte/kitchen-sink/src/Tickets.svelte
  • examples/svelte/kitchen-sink/src/main.ts
  • examples/svelte/kitchen-sink/src/styles.css
  • examples/svelte/kitchen-sink/svelte.config.js
  • examples/svelte/kitchen-sink/tsconfig.json
  • examples/svelte/kitchen-sink/vite.config.ts
  • examples/vanilla/formatForDisplay/src/main.ts
  • examples/vanilla/formatForDisplay/src/styles.css
  • examples/vue/kitchen-sink/README.md
  • examples/vue/kitchen-sink/eslint.config.js
  • examples/vue/kitchen-sink/index.html
  • examples/vue/kitchen-sink/package.json
  • examples/vue/kitchen-sink/src/App.vue
  • examples/vue/kitchen-sink/src/Editor.vue
  • examples/vue/kitchen-sink/src/EditorPane.vue
  • examples/vue/kitchen-sink/src/Formatting.vue
  • examples/vue/kitchen-sink/src/Hint.vue
  • examples/vue/kitchen-sink/src/Recording.vue
  • examples/vue/kitchen-sink/src/Sequences.vue
  • examples/vue/kitchen-sink/src/Tickets.vue
  • examples/vue/kitchen-sink/src/index.ts
  • examples/vue/kitchen-sink/src/styles.css
  • examples/vue/kitchen-sink/src/vue.d.ts
  • examples/vue/kitchen-sink/tsconfig.json
  • examples/vue/kitchen-sink/vite.config.ts
  • examples/vue/useHotkey/src/App.vue
  • package.json
  • packages/angular-hotkeys/src/index.ts
  • packages/angular-hotkeys/src/injectHotkeyHint.ts
  • packages/angular-hotkeys/tests/injectHotkeyHint.test.ts
  • packages/hotkeys-devtools/src/_registrations.ts
  • packages/hotkeys-devtools/src/components/DetailsPanel.tsx
  • packages/hotkeys-devtools/src/components/HotkeyList.tsx
  • packages/hotkeys-devtools/tests/registrations.test.tsx
  • packages/hotkeys-devtools/vitest.config.ts
  • packages/hotkeys/src/_event-target.ts
  • packages/hotkeys/src/_keyboard-event.ts
  • packages/hotkeys/src/_match.ts
  • packages/hotkeys/src/_named-keys.ts
  • packages/hotkeys/src/_recorder-chord.ts
  • packages/hotkeys/src/_recording-guard.ts
  • packages/hotkeys/src/_registration.ts
  • packages/hotkeys/src/conflicts.ts
  • packages/hotkeys/src/constants.ts
  • packages/hotkeys/src/display-labels.ts
  • packages/hotkeys/src/format.ts
  • packages/hotkeys/src/hint.ts
  • packages/hotkeys/src/hotkey-manager.ts
  • packages/hotkeys/src/hotkey-recorder.ts
  • packages/hotkeys/src/hotkey-sequence-recorder.ts
  • packages/hotkeys/src/hotkey.types.ts
  • packages/hotkeys/src/index.ts
  • packages/hotkeys/src/key-state-tracker.ts
  • packages/hotkeys/src/key.types.ts
  • packages/hotkeys/src/match.ts
  • packages/hotkeys/src/parse.ts
  • packages/hotkeys/src/platform.ts
  • packages/hotkeys/src/recorder-chord.ts
  • packages/hotkeys/src/recorder-options.ts
  • packages/hotkeys/src/sequence-manager.ts
  • packages/hotkeys/src/validate.ts
  • packages/hotkeys/tests/constants.test.ts
  • packages/hotkeys/tests/format.test.ts
  • packages/hotkeys/tests/hotkey-manager.test.ts
  • packages/hotkeys/tests/hotkey-recorder.test.ts
  • packages/hotkeys/tests/hotkey-sequence-recorder.test.ts
  • packages/hotkeys/tests/key-coverage.test.ts
  • packages/hotkeys/tests/key-state-tracker.test.ts
  • packages/hotkeys/tests/match.test.ts
  • packages/hotkeys/tests/parse.test.ts
  • packages/hotkeys/tests/parsed-identity.test.ts
  • packages/hotkeys/tests/physical-key.test.ts
  • packages/hotkeys/tests/public-api.test.ts
  • packages/hotkeys/tests/recording-and-display.test.ts
  • packages/hotkeys/tests/registration-and-target.test.ts
  • packages/hotkeys/tests/review-regressions.test.ts
  • packages/hotkeys/tests/sequence-regressions.test.ts
  • packages/lit-hotkeys/src/controllers/hotkey-hint.ts
  • packages/lit-hotkeys/src/controllers/index.ts
  • packages/lit-hotkeys/tests/hotkey-hint.spec.ts
  • packages/preact-hotkeys/src/index.ts
  • packages/preact-hotkeys/src/useHotkey.ts
  • packages/preact-hotkeys/src/useHotkeyHint.ts
  • packages/preact-hotkeys/src/useHotkeyRegistrations.ts
  • packages/preact-hotkeys/src/useHotkeySequence.ts
  • packages/preact-hotkeys/src/useHotkeySequences.ts
  • packages/preact-hotkeys/src/useHotkeys.ts
  • packages/preact-hotkeys/tests/useHotkeyHint.test.tsx
  • packages/preact-hotkeys/tests/useHotkeyRegistrations.test.tsx
  • packages/react-hotkeys/src/index.ts
  • packages/react-hotkeys/src/useHotkey.ts
  • packages/react-hotkeys/src/useHotkeyHint.ts
  • packages/react-hotkeys/src/useHotkeySequence.ts
  • packages/react-hotkeys/src/useHotkeySequences.ts
  • packages/react-hotkeys/src/useHotkeys.ts
  • packages/react-hotkeys/tests/useHotkeyHint.test.tsx
  • packages/solid-hotkeys/src/createHotkeyHint.ts
  • packages/solid-hotkeys/src/index.ts
  • packages/solid-hotkeys/tests/createHotkeyHint.test.tsx
  • packages/svelte-hotkeys/src/createHotkeyRecorder.svelte.ts
  • packages/svelte-hotkeys/src/createHotkeySequenceRecorder.svelte.ts
  • packages/svelte-hotkeys/src/getHotkeyHint.svelte.ts
  • packages/svelte-hotkeys/src/index.ts
  • packages/svelte-hotkeys/tests/RecorderHarness.svelte
  • packages/svelte-hotkeys/tests/getHotkeyHint.test.ts
  • packages/svelte-hotkeys/tests/hint-harness.svelte.ts
  • packages/svelte-hotkeys/tests/recorders.test.ts
  • packages/svelte-hotkeys/vitest.config.ts
  • packages/vue-hotkeys/src/index.ts
  • packages/vue-hotkeys/src/useHotkeyHint.ts
  • packages/vue-hotkeys/tests/hints.test.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@socket-security

socket-security Bot commented Sep 21, 2026 •

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​tanstack/​react-router@​1.170.38931008798100

View full report

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Changeset Version Preview

13 package(s) bumped directly, 0 bumped as dependents.

🟥 Major bumps

Package Version Reason
@tanstack/hotkeys-devtools 0.9.0 → 1.0.0 Changeset

🟨 Minor bumps

Package Version Reason
@tanstack/angular-hotkeys 0.10.0 → 0.11.0 Changeset
@tanstack/hotkeys 0.8.0 → 0.9.0 Changeset
@tanstack/lit-hotkeys 0.11.0 → 0.12.0 Changeset
@tanstack/preact-hotkeys 0.10.0 → 0.11.0 Changeset
@tanstack/preact-hotkeys-devtools 0.7.0 → 0.8.0 Changeset
@tanstack/react-hotkeys 0.10.0 → 0.11.0 Changeset
@tanstack/react-hotkeys-devtools 0.7.0 → 0.8.0 Changeset
@tanstack/solid-hotkeys 0.10.0 → 0.11.0 Changeset
@tanstack/solid-hotkeys-devtools 0.7.0 → 0.8.0 Changeset
@tanstack/svelte-hotkeys 0.10.0 → 0.11.0 Changeset
@tanstack/vue-hotkeys 0.10.0 → 0.11.0 Changeset
@tanstack/vue-hotkeys-devtools 0.7.0 → 0.8.0 Changeset

@pkg-pr-new

pkg-pr-new Bot commented Sep 21, 2026 •

Copy link
Copy Markdown

Open in StackBlitz

@tanstack/angular-hotkeys

npm i https://pkg.pr.new/@tanstack/angular-hotkeys@151

@tanstack/hotkeys

npm i https://pkg.pr.new/@tanstack/hotkeys@151

@tanstack/hotkeys-devtools

npm i https://pkg.pr.new/@tanstack/hotkeys-devtools@151

@tanstack/lit-hotkeys

npm i https://pkg.pr.new/@tanstack/lit-hotkeys@151

@tanstack/preact-hotkeys

npm i https://pkg.pr.new/@tanstack/preact-hotkeys@151

@tanstack/preact-hotkeys-devtools

npm i https://pkg.pr.new/@tanstack/preact-hotkeys-devtools@151

@tanstack/react-hotkeys

npm i https://pkg.pr.new/@tanstack/react-hotkeys@151

@tanstack/react-hotkeys-devtools

npm i https://pkg.pr.new/@tanstack/react-hotkeys-devtools@151

@tanstack/solid-hotkeys

npm i https://pkg.pr.new/@tanstack/solid-hotkeys@151

@tanstack/solid-hotkeys-devtools

npm i https://pkg.pr.new/@tanstack/solid-hotkeys-devtools@151

@tanstack/svelte-hotkeys

npm i https://pkg.pr.new/@tanstack/svelte-hotkeys@151

@tanstack/vue-hotkeys

npm i https://pkg.pr.new/@tanstack/vue-hotkeys@151

@tanstack/vue-hotkeys-devtools

npm i https://pkg.pr.new/@tanstack/vue-hotkeys-devtools@151

commit: 6346178

@KevinVandy
KevinVandy merged commit 10c2555 into main Sep 21, 2026
9 checks passed
@KevinVandy
KevinVandy deleted the feat-physical-hotkeys-recording-hints branch September 21, 2026 17:15
@github-actions github-actions Bot mentioned this pull request Sep 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment