Skip to content

ci: Version Packages - #215

Merged
KevinVandy merged 1 commit into
mainfrom
changeset-release/main
Oct 31, 2026
Merged

KevinVandy merged 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@tanstack/alpine-hotkeys@0.9.0

Minor Changes

  • #214 a179ef6 - Hotkey hooks and functions in every adapter accept undefined and null as the hotkey, for components with an optional shortcut. No hotkey registers nothing, and its hint is false. When a hotkey changes to undefined or null, its registration is removed; when it changes back, it registers again. Before, a nullish hotkey threw: in React it unmounted the tree, in Vue, Solid, Angular, and Svelte the old hotkey kept firing, Ember failed to render, and Alpine stopped updating the page. In Angular, injectHotkey(() => this.shortcut(), …) now works with an optional input, without ?? [].

    • The plural forms skip a definition whose hotkey is nullish.
    • An empty hotkey, such as '' or { key: '' }, also registers nothing, so clearing a hotkey to '' removes its registration. Before, an empty hotkey registered and fired on keydown events with no key, such as those some autofill tools send.
    • HotkeyManager.register still requires a hotkey. It throws a clear error for undefined, null, or an empty hotkey, as it already did for an empty sequence.
    • hasActiveRegistration and matchesHeldModifiers return false for no hotkey.
    • The Lit @hotkey decorator still needs a hotkey, because it is set when the class is defined.

Patch Changes

  • #214 a179ef6 - An option set to undefined now keeps its default, the same as leaving it out. Before, a wrapper component that forwarded unset props, such as preventDefault: props.preventDefault, turned off preventDefault and stopPropagation, so Mod+S also opened the browser's Save dialog. eventType: undefined made a hotkey never fire, and scope: undefined moved a hotkey out of its provider's scope.

    • This applies to register, provider defaults, createHotkeysScope defaults in Alpine and Ember, and recorder options merged with provider defaults.
    • In setOptions, undefined resets an option to its default, or removes it when it has no default.

    Behavior changes:

    • In React and Preact, a null target registers nothing, like a ref that is still empty. Before, it listened on document. To listen on document, leave out target. prepareHotkeyDefinitions in @tanstack/hotkeys/adapter does the same when no resolveTarget is given, which also applies to Svelte. Vue, Solid, Angular, Lit, Alpine, Ember, and Octane already skipped a null target.
  • Updated dependencies [a179ef6, a179ef6, a179ef6]:

    • @tanstack/hotkeys@0.21.0

@tanstack/angular-hotkeys@0.19.0

Minor Changes

  • #214 a179ef6 - HotkeysProvider now applies a changed customHotkeys prop. Before, the provider read it only on the first render, so saved shortcuts that loaded asynchronously, or another user's shortcuts after sign-in, were ignored until the provider remounted.

    • When the value of customHotkeys changes, it replaces the current custom hotkeys without calling onCustomHotkeysChange. The prop is compared by value, so passing equal data again, such as JSON.parse(localStorage.getItem('hotkeys')) on every render, keeps changes the user made since. undefined leaves the custom hotkeys unchanged, such as while saved data loads, and null clears them, such as on sign-out.
    • AppHotkeysStore.setOptions accepts customHotkeys with the same behavior. Lit, Alpine, and Ember apps can call it on the store that provideAppHotkeys returns when saved data loads later.
    • In Angular, provideHotkeys accepts customHotkeys as a signal or function. In Vue, provideHotkeysContext accepts it as a ref or getter.
  • #214 a179ef6 - Hotkey hooks and functions in every adapter accept undefined and null as the hotkey, for components with an optional shortcut. No hotkey registers nothing, and its hint is false. When a hotkey changes to undefined or null, its registration is removed; when it changes back, it registers again. Before, a nullish hotkey threw: in React it unmounted the tree, in Vue, Solid, Angular, and Svelte the old hotkey kept firing, Ember failed to render, and Alpine stopped updating the page. In Angular, injectHotkey(() => this.shortcut(), …) now works with an optional input, without ?? [].

    • The plural forms skip a definition whose hotkey is nullish.
    • An empty hotkey, such as '' or { key: '' }, also registers nothing, so clearing a hotkey to '' removes its registration. Before, an empty hotkey registered and fired on keydown events with no key, such as those some autofill tools send.
    • HotkeyManager.register still requires a hotkey. It throws a clear error for undefined, null, or an empty hotkey, as it already did for an empty sequence.
    • hasActiveRegistration and matchesHeldModifiers return false for no hotkey.
    • The Lit @hotkey decorator still needs a hotkey, because it is set when the class is defined.

Patch Changes

  • #214 a179ef6 - An option set to undefined now keeps its default, the same as leaving it out. Before, a wrapper component that forwarded unset props, such as preventDefault: props.preventDefault, turned off preventDefault and stopPropagation, so Mod+S also opened the browser's Save dialog. eventType: undefined made a hotkey never fire, and scope: undefined moved a hotkey out of its provider's scope.

    • This applies to register, provider defaults, createHotkeysScope defaults in Alpine and Ember, and recorder options merged with provider defaults.
    • In setOptions, undefined resets an option to its default, or removes it when it has no default.

    Behavior changes:

    • In React and Preact, a null target registers nothing, like a ref that is still empty. Before, it listened on document. To listen on document, leave out target. prepareHotkeyDefinitions in @tanstack/hotkeys/adapter does the same when no resolveTarget is given, which also applies to Svelte. Vue, Solid, Angular, Lit, Alpine, Ember, and Octane already skipped a null target.
  • Updated dependencies [a179ef6, a179ef6, a179ef6]:

    • @tanstack/hotkeys@0.21.0

@tanstack/ember-hotkeys@0.8.0

Minor Changes

  • #214 a179ef6 - Hotkey hooks and functions in every adapter accept undefined and null as the hotkey, for components with an optional shortcut. No hotkey registers nothing, and its hint is false. When a hotkey changes to undefined or null, its registration is removed; when it changes back, it registers again. Before, a nullish hotkey threw: in React it unmounted the tree, in Vue, Solid, Angular, and Svelte the old hotkey kept firing, Ember failed to render, and Alpine stopped updating the page. In Angular, injectHotkey(() => this.shortcut(), …) now works with an optional input, without ?? [].

    • The plural forms skip a definition whose hotkey is nullish.
    • An empty hotkey, such as '' or { key: '' }, also registers nothing, so clearing a hotkey to '' removes its registration. Before, an empty hotkey registered and fired on keydown events with no key, such as those some autofill tools send.
    • HotkeyManager.register still requires a hotkey. It throws a clear error for undefined, null, or an empty hotkey, as it already did for an empty sequence.
    • hasActiveRegistration and matchesHeldModifiers return false for no hotkey.
    • The Lit @hotkey decorator still needs a hotkey, because it is set when the class is defined.

Patch Changes

  • #214 a179ef6 - An option set to undefined now keeps its default, the same as leaving it out. Before, a wrapper component that forwarded unset props, such as preventDefault: props.preventDefault, turned off preventDefault and stopPropagation, so Mod+S also opened the browser's Save dialog. eventType: undefined made a hotkey never fire, and scope: undefined moved a hotkey out of its provider's scope.

    • This applies to register, provider defaults, createHotkeysScope defaults in Alpine and Ember, and recorder options merged with provider defaults.
    • In setOptions, undefined resets an option to its default, or removes it when it has no default.

    Behavior changes:

    • In React and Preact, a null target registers nothing, like a ref that is still empty. Before, it listened on document. To listen on document, leave out target. prepareHotkeyDefinitions in @tanstack/hotkeys/adapter does the same when no resolveTarget is given, which also applies to Svelte. Vue, Solid, Angular, Lit, Alpine, Ember, and Octane already skipped a null target.
  • Updated dependencies [a179ef6, a179ef6, a179ef6]:

    • @tanstack/hotkeys@0.21.0

@tanstack/hotkeys@0.21.0

Minor Changes

  • #214 a179ef6 - HotkeysProvider now applies a changed customHotkeys prop. Before, the provider read it only on the first render, so saved shortcuts that loaded asynchronously, or another user's shortcuts after sign-in, were ignored until the provider remounted.

    • When the value of customHotkeys changes, it replaces the current custom hotkeys without calling onCustomHotkeysChange. The prop is compared by value, so passing equal data again, such as JSON.parse(localStorage.getItem('hotkeys')) on every render, keeps changes the user made since. undefined leaves the custom hotkeys unchanged, such as while saved data loads, and null clears them, such as on sign-out.
    • AppHotkeysStore.setOptions accepts customHotkeys with the same behavior. Lit, Alpine, and Ember apps can call it on the store that provideAppHotkeys returns when saved data loads later.
    • In Angular, provideHotkeys accepts customHotkeys as a signal or function. In Vue, provideHotkeysContext accepts it as a ref or getter.
  • #214 a179ef6 - Hotkey hooks and functions in every adapter accept undefined and null as the hotkey, for components with an optional shortcut. No hotkey registers nothing, and its hint is false. When a hotkey changes to undefined or null, its registration is removed; when it changes back, it registers again. Before, a nullish hotkey threw: in React it unmounted the tree, in Vue, Solid, Angular, and Svelte the old hotkey kept firing, Ember failed to render, and Alpine stopped updating the page. In Angular, injectHotkey(() => this.shortcut(), …) now works with an optional input, without ?? [].

    • The plural forms skip a definition whose hotkey is nullish.
    • An empty hotkey, such as '' or { key: '' }, also registers nothing, so clearing a hotkey to '' removes its registration. Before, an empty hotkey registered and fired on keydown events with no key, such as those some autofill tools send.
    • HotkeyManager.register still requires a hotkey. It throws a clear error for undefined, null, or an empty hotkey, as it already did for an empty sequence.
    • hasActiveRegistration and matchesHeldModifiers return false for no hotkey.
    • The Lit @hotkey decorator still needs a hotkey, because it is set when the class is defined.
  • #214 a179ef6 - An option set to undefined now keeps its default, the same as leaving it out. Before, a wrapper component that forwarded unset props, such as preventDefault: props.preventDefault, turned off preventDefault and stopPropagation, so Mod+S also opened the browser's Save dialog. eventType: undefined made a hotkey never fire, and scope: undefined moved a hotkey out of its provider's scope.

    • This applies to register, provider defaults, createHotkeysScope defaults in Alpine and Ember, and recorder options merged with provider defaults.
    • In setOptions, undefined resets an option to its default, or removes it when it has no default.

    Behavior changes:

    • In React and Preact, a null target registers nothing, like a ref that is still empty. Before, it listened on document. To listen on document, leave out target. prepareHotkeyDefinitions in @tanstack/hotkeys/adapter does the same when no resolveTarget is given, which also applies to Svelte. Vue, Solid, Angular, Lit, Alpine, Ember, and Octane already skipped a null target.

@tanstack/lit-hotkeys@0.20.0

Minor Changes

  • #214 a179ef6 - Hotkey hooks and functions in every adapter accept undefined and null as the hotkey, for components with an optional shortcut. No hotkey registers nothing, and its hint is false. When a hotkey changes to undefined or null, its registration is removed; when it changes back, it registers again. Before, a nullish hotkey threw: in React it unmounted the tree, in Vue, Solid, Angular, and Svelte the old hotkey kept firing, Ember failed to render, and Alpine stopped updating the page. In Angular, injectHotkey(() => this.shortcut(), …) now works with an optional input, without ?? [].

    • The plural forms skip a definition whose hotkey is nullish.
    • An empty hotkey, such as '' or { key: '' }, also registers nothing, so clearing a hotkey to '' removes its registration. Before, an empty hotkey registered and fired on keydown events with no key, such as those some autofill tools send.
    • HotkeyManager.register still requires a hotkey. It throws a clear error for undefined, null, or an empty hotkey, as it already did for an empty sequence.
    • hasActiveRegistration and matchesHeldModifiers return false for no hotkey.
    • The Lit @hotkey decorator still needs a hotkey, because it is set when the class is defined.

Patch Changes

  • #214 a179ef6 - An option set to undefined now keeps its default, the same as leaving it out. Before, a wrapper component that forwarded unset props, such as preventDefault: props.preventDefault, turned off preventDefault and stopPropagation, so Mod+S also opened the browser's Save dialog. eventType: undefined made a hotkey never fire, and scope: undefined moved a hotkey out of its provider's scope.

    • This applies to register, provider defaults, createHotkeysScope defaults in Alpine and Ember, and recorder options merged with provider defaults.
    • In setOptions, undefined resets an option to its default, or removes it when it has no default.

    Behavior changes:

    • In React and Preact, a null target registers nothing, like a ref that is still empty. Before, it listened on document. To listen on document, leave out target. prepareHotkeyDefinitions in @tanstack/hotkeys/adapter does the same when no resolveTarget is given, which also applies to Svelte. Vue, Solid, Angular, Lit, Alpine, Ember, and Octane already skipped a null target.
  • Updated dependencies [a179ef6, a179ef6, a179ef6]:

    • @tanstack/hotkeys@0.21.0

@tanstack/octane-hotkeys@0.9.0

Minor Changes

  • #214 a179ef6 - Hotkey hooks and functions in every adapter accept undefined and null as the hotkey, for components with an optional shortcut. No hotkey registers nothing, and its hint is false. When a hotkey changes to undefined or null, its registration is removed; when it changes back, it registers again. Before, a nullish hotkey threw: in React it unmounted the tree, in Vue, Solid, Angular, and Svelte the old hotkey kept firing, Ember failed to render, and Alpine stopped updating the page. In Angular, injectHotkey(() => this.shortcut(), …) now works with an optional input, without ?? [].

    • The plural forms skip a definition whose hotkey is nullish.
    • An empty hotkey, such as '' or { key: '' }, also registers nothing, so clearing a hotkey to '' removes its registration. Before, an empty hotkey registered and fired on keydown events with no key, such as those some autofill tools send.
    • HotkeyManager.register still requires a hotkey. It throws a clear error for undefined, null, or an empty hotkey, as it already did for an empty sequence.
    • hasActiveRegistration and matchesHeldModifiers return false for no hotkey.
    • The Lit @hotkey decorator still needs a hotkey, because it is set when the class is defined.

Patch Changes

  • #214 a179ef6 - HotkeysProvider now applies a changed customHotkeys prop. Before, the provider read it only on the first render, so saved shortcuts that loaded asynchronously, or another user's shortcuts after sign-in, were ignored until the provider remounted.

    • When the value of customHotkeys changes, it replaces the current custom hotkeys without calling onCustomHotkeysChange. The prop is compared by value, so passing equal data again, such as JSON.parse(localStorage.getItem('hotkeys')) on every render, keeps changes the user made since. undefined leaves the custom hotkeys unchanged, such as while saved data loads, and null clears them, such as on sign-out.
    • AppHotkeysStore.setOptions accepts customHotkeys with the same behavior. Lit, Alpine, and Ember apps can call it on the store that provideAppHotkeys returns when saved data loads later.
    • In Angular, provideHotkeys accepts customHotkeys as a signal or function. In Vue, provideHotkeysContext accepts it as a ref or getter.
  • #214 a179ef6 - An option set to undefined now keeps its default, the same as leaving it out. Before, a wrapper component that forwarded unset props, such as preventDefault: props.preventDefault, turned off preventDefault and stopPropagation, so Mod+S also opened the browser's Save dialog. eventType: undefined made a hotkey never fire, and scope: undefined moved a hotkey out of its provider's scope.

    • This applies to register, provider defaults, createHotkeysScope defaults in Alpine and Ember, and recorder options merged with provider defaults.
    • In setOptions, undefined resets an option to its default, or removes it when it has no default.

    Behavior changes:

    • In React and Preact, a null target registers nothing, like a ref that is still empty. Before, it listened on document. To listen on document, leave out target. prepareHotkeyDefinitions in @tanstack/hotkeys/adapter does the same when no resolveTarget is given, which also applies to Svelte. Vue, Solid, Angular, Lit, Alpine, Ember, and Octane already skipped a null target.
  • Updated dependencies [a179ef6, a179ef6, a179ef6]:

    • @tanstack/hotkeys@0.21.0

@tanstack/preact-hotkeys@0.19.0

Minor Changes

  • #214 a179ef6 - Hotkey hooks and functions in every adapter accept undefined and null as the hotkey, for components with an optional shortcut. No hotkey registers nothing, and its hint is false. When a hotkey changes to undefined or null, its registration is removed; when it changes back, it registers again. Before, a nullish hotkey threw: in React it unmounted the tree, in Vue, Solid, Angular, and Svelte the old hotkey kept firing, Ember failed to render, and Alpine stopped updating the page. In Angular, injectHotkey(() => this.shortcut(), …) now works with an optional input, without ?? [].

    • The plural forms skip a definition whose hotkey is nullish.
    • An empty hotkey, such as '' or { key: '' }, also registers nothing, so clearing a hotkey to '' removes its registration. Before, an empty hotkey registered and fired on keydown events with no key, such as those some autofill tools send.
    • HotkeyManager.register still requires a hotkey. It throws a clear error for undefined, null, or an empty hotkey, as it already did for an empty sequence.
    • hasActiveRegistration and matchesHeldModifiers return false for no hotkey.
    • The Lit @hotkey decorator still needs a hotkey, because it is set when the class is defined.
  • #214 a179ef6 - An option set to undefined now keeps its default, the same as leaving it out. Before, a wrapper component that forwarded unset props, such as preventDefault: props.preventDefault, turned off preventDefault and stopPropagation, so Mod+S also opened the browser's Save dialog. eventType: undefined made a hotkey never fire, and scope: undefined moved a hotkey out of its provider's scope.

    • This applies to register, provider defaults, createHotkeysScope defaults in Alpine and Ember, and recorder options merged with provider defaults.
    • In setOptions, undefined resets an option to its default, or removes it when it has no default.

    Behavior changes:

    • In React and Preact, a null target registers nothing, like a ref that is still empty. Before, it listened on document. To listen on document, leave out target. prepareHotkeyDefinitions in @tanstack/hotkeys/adapter does the same when no resolveTarget is given, which also applies to Svelte. Vue, Solid, Angular, Lit, Alpine, Ember, and Octane already skipped a null target.

Patch Changes

  • #214 a179ef6 - HotkeysProvider now applies a changed customHotkeys prop. Before, the provider read it only on the first render, so saved shortcuts that loaded asynchronously, or another user's shortcuts after sign-in, were ignored until the provider remounted.

    • When the value of customHotkeys changes, it replaces the current custom hotkeys without calling onCustomHotkeysChange. The prop is compared by value, so passing equal data again, such as JSON.parse(localStorage.getItem('hotkeys')) on every render, keeps changes the user made since. undefined leaves the custom hotkeys unchanged, such as while saved data loads, and null clears them, such as on sign-out.
    • AppHotkeysStore.setOptions accepts customHotkeys with the same behavior. Lit, Alpine, and Ember apps can call it on the store that provideAppHotkeys returns when saved data loads later.
    • In Angular, provideHotkeys accepts customHotkeys as a signal or function. In Vue, provideHotkeysContext accepts it as a ref or getter.
  • Updated dependencies [a179ef6, a179ef6, a179ef6]:

    • @tanstack/hotkeys@0.21.0

@tanstack/react-hotkeys@0.20.0

Minor Changes

  • #214 a179ef6 - Hotkey hooks and functions in every adapter accept undefined and null as the hotkey, for components with an optional shortcut. No hotkey registers nothing, and its hint is false. When a hotkey changes to undefined or null, its registration is removed; when it changes back, it registers again. Before, a nullish hotkey threw: in React it unmounted the tree, in Vue, Solid, Angular, and Svelte the old hotkey kept firing, Ember failed to render, and Alpine stopped updating the page. In Angular, injectHotkey(() => this.shortcut(), …) now works with an optional input, without ?? [].

    • The plural forms skip a definition whose hotkey is nullish.
    • An empty hotkey, such as '' or { key: '' }, also registers nothing, so clearing a hotkey to '' removes its registration. Before, an empty hotkey registered and fired on keydown events with no key, such as those some autofill tools send.
    • HotkeyManager.register still requires a hotkey. It throws a clear error for undefined, null, or an empty hotkey, as it already did for an empty sequence.
    • hasActiveRegistration and matchesHeldModifiers return false for no hotkey.
    • The Lit @hotkey decorator still needs a hotkey, because it is set when the class is defined.
  • #214 a179ef6 - An option set to undefined now keeps its default, the same as leaving it out. Before, a wrapper component that forwarded unset props, such as preventDefault: props.preventDefault, turned off preventDefault and stopPropagation, so Mod+S also opened the browser's Save dialog. eventType: undefined made a hotkey never fire, and scope: undefined moved a hotkey out of its provider's scope.

    • This applies to register, provider defaults, createHotkeysScope defaults in Alpine and Ember, and recorder options merged with provider defaults.
    • In setOptions, undefined resets an option to its default, or removes it when it has no default.

    Behavior changes:

    • In React and Preact, a null target registers nothing, like a ref that is still empty. Before, it listened on document. To listen on document, leave out target. prepareHotkeyDefinitions in @tanstack/hotkeys/adapter does the same when no resolveTarget is given, which also applies to Svelte. Vue, Solid, Angular, Lit, Alpine, Ember, and Octane already skipped a null target.

Patch Changes

  • #214 a179ef6 - HotkeysProvider now applies a changed customHotkeys prop. Before, the provider read it only on the first render, so saved shortcuts that loaded asynchronously, or another user's shortcuts after sign-in, were ignored until the provider remounted.

    • When the value of customHotkeys changes, it replaces the current custom hotkeys without calling onCustomHotkeysChange. The prop is compared by value, so passing equal data again, such as JSON.parse(localStorage.getItem('hotkeys')) on every render, keeps changes the user made since. undefined leaves the custom hotkeys unchanged, such as while saved data loads, and null clears them, such as on sign-out.
    • AppHotkeysStore.setOptions accepts customHotkeys with the same behavior. Lit, Alpine, and Ember apps can call it on the store that provideAppHotkeys returns when saved data loads later.
    • In Angular, provideHotkeys accepts customHotkeys as a signal or function. In Vue, provideHotkeysContext accepts it as a ref or getter.
  • Updated dependencies [a179ef6, a179ef6, a179ef6]:

    • @tanstack/hotkeys@0.21.0

@tanstack/solid-hotkeys@0.19.0

Minor Changes

  • #214 a179ef6 - Hotkey hooks and functions in every adapter accept undefined and null as the hotkey, for components with an optional shortcut. No hotkey registers nothing, and its hint is false. When a hotkey changes to undefined or null, its registration is removed; when it changes back, it registers again. Before, a nullish hotkey threw: in React it unmounted the tree, in Vue, Solid, Angular, and Svelte the old hotkey kept firing, Ember failed to render, and Alpine stopped updating the page. In Angular, injectHotkey(() => this.shortcut(), …) now works with an optional input, without ?? [].

    • The plural forms skip a definition whose hotkey is nullish.
    • An empty hotkey, such as '' or { key: '' }, also registers nothing, so clearing a hotkey to '' removes its registration. Before, an empty hotkey registered and fired on keydown events with no key, such as those some autofill tools send.
    • HotkeyManager.register still requires a hotkey. It throws a clear error for undefined, null, or an empty hotkey, as it already did for an empty sequence.
    • hasActiveRegistration and matchesHeldModifiers return false for no hotkey.
    • The Lit @hotkey decorator still needs a hotkey, because it is set when the class is defined.

Patch Changes

  • #214 a179ef6 - HotkeysProvider now applies a changed customHotkeys prop. Before, the provider read it only on the first render, so saved shortcuts that loaded asynchronously, or another user's shortcuts after sign-in, were ignored until the provider remounted.

    • When the value of customHotkeys changes, it replaces the current custom hotkeys without calling onCustomHotkeysChange. The prop is compared by value, so passing equal data again, such as JSON.parse(localStorage.getItem('hotkeys')) on every render, keeps changes the user made since. undefined leaves the custom hotkeys unchanged, such as while saved data loads, and null clears them, such as on sign-out.
    • AppHotkeysStore.setOptions accepts customHotkeys with the same behavior. Lit, Alpine, and Ember apps can call it on the store that provideAppHotkeys returns when saved data loads later.
    • In Angular, provideHotkeys accepts customHotkeys as a signal or function. In Vue, provideHotkeysContext accepts it as a ref or getter.
  • #214 a179ef6 - An option set to undefined now keeps its default, the same as leaving it out. Before, a wrapper component that forwarded unset props, such as preventDefault: props.preventDefault, turned off preventDefault and stopPropagation, so Mod+S also opened the browser's Save dialog. eventType: undefined made a hotkey never fire, and scope: undefined moved a hotkey out of its provider's scope.

    • This applies to register, provider defaults, createHotkeysScope defaults in Alpine and Ember, and recorder options merged with provider defaults.
    • In setOptions, undefined resets an option to its default, or removes it when it has no default.

    Behavior changes:

    • In React and Preact, a null target registers nothing, like a ref that is still empty. Before, it listened on document. To listen on document, leave out target. prepareHotkeyDefinitions in @tanstack/hotkeys/adapter does the same when no resolveTarget is given, which also applies to Svelte. Vue, Solid, Angular, Lit, Alpine, Ember, and Octane already skipped a null target.
  • Updated dependencies [a179ef6, a179ef6, a179ef6]:

    • @tanstack/hotkeys@0.21.0

@tanstack/svelte-hotkeys@0.19.0

Minor Changes

  • #214 a179ef6 - Hotkey hooks and functions in every adapter accept undefined and null as the hotkey, for components with an optional shortcut. No hotkey registers nothing, and its hint is false. When a hotkey changes to undefined or null, its registration is removed; when it changes back, it registers again. Before, a nullish hotkey threw: in React it unmounted the tree, in Vue, Solid, Angular, and Svelte the old hotkey kept firing, Ember failed to render, and Alpine stopped updating the page. In Angular, injectHotkey(() => this.shortcut(), …) now works with an optional input, without ?? [].

    • The plural forms skip a definition whose hotkey is nullish.
    • An empty hotkey, such as '' or { key: '' }, also registers nothing, so clearing a hotkey to '' removes its registration. Before, an empty hotkey registered and fired on keydown events with no key, such as those some autofill tools send.
    • HotkeyManager.register still requires a hotkey. It throws a clear error for undefined, null, or an empty hotkey, as it already did for an empty sequence.
    • hasActiveRegistration and matchesHeldModifiers return false for no hotkey.
    • The Lit @hotkey decorator still needs a hotkey, because it is set when the class is defined.

Patch Changes

  • #214 a179ef6 - HotkeysProvider now applies a changed customHotkeys prop. Before, the provider read it only on the first render, so saved shortcuts that loaded asynchronously, or another user's shortcuts after sign-in, were ignored until the provider remounted.

    • When the value of customHotkeys changes, it replaces the current custom hotkeys without calling onCustomHotkeysChange. The prop is compared by value, so passing equal data again, such as JSON.parse(localStorage.getItem('hotkeys')) on every render, keeps changes the user made since. undefined leaves the custom hotkeys unchanged, such as while saved data loads, and null clears them, such as on sign-out.
    • AppHotkeysStore.setOptions accepts customHotkeys with the same behavior. Lit, Alpine, and Ember apps can call it on the store that provideAppHotkeys returns when saved data loads later.
    • In Angular, provideHotkeys accepts customHotkeys as a signal or function. In Vue, provideHotkeysContext accepts it as a ref or getter.
  • #214 a179ef6 - An option set to undefined now keeps its default, the same as leaving it out. Before, a wrapper component that forwarded unset props, such as preventDefault: props.preventDefault, turned off preventDefault and stopPropagation, so Mod+S also opened the browser's Save dialog. eventType: undefined made a hotkey never fire, and scope: undefined moved a hotkey out of its provider's scope.

    • This applies to register, provider defaults, createHotkeysScope defaults in Alpine and Ember, and recorder options merged with provider defaults.
    • In setOptions, undefined resets an option to its default, or removes it when it has no default.

    Behavior changes:

    • In React and Preact, a null target registers nothing, like a ref that is still empty. Before, it listened on document. To listen on document, leave out target. prepareHotkeyDefinitions in @tanstack/hotkeys/adapter does the same when no resolveTarget is given, which also applies to Svelte. Vue, Solid, Angular, Lit, Alpine, Ember, and Octane already skipped a null target.
  • Updated dependencies [a179ef6, a179ef6, a179ef6]:

    • @tanstack/hotkeys@0.21.0

@tanstack/vue-hotkeys@0.19.0

Minor Changes

  • #214 a179ef6 - HotkeysProvider now applies a changed customHotkeys prop. Before, the provider read it only on the first render, so saved shortcuts that loaded asynchronously, or another user's shortcuts after sign-in, were ignored until the provider remounted.

    • When the value of customHotkeys changes, it replaces the current custom hotkeys without calling onCustomHotkeysChange. The prop is compared by value, so passing equal data again, such as JSON.parse(localStorage.getItem('hotkeys')) on every render, keeps changes the user made since. undefined leaves the custom hotkeys unchanged, such as while saved data loads, and null clears them, such as on sign-out.
    • AppHotkeysStore.setOptions accepts customHotkeys with the same behavior. Lit, Alpine, and Ember apps can call it on the store that provideAppHotkeys returns when saved data loads later.
    • In Angular, provideHotkeys accepts customHotkeys as a signal or function. In Vue, provideHotkeysContext accepts it as a ref or getter.
  • #214 a179ef6 - Hotkey hooks and functions in every adapter accept undefined and null as the hotkey, for components with an optional shortcut. No hotkey registers nothing, and its hint is false. When a hotkey changes to undefined or null, its registration is removed; when it changes back, it registers again. Before, a nullish hotkey threw: in React it unmounted the tree, in Vue, Solid, Angular, and Svelte the old hotkey kept firing, Ember failed to render, and Alpine stopped updating the page. In Angular, injectHotkey(() => this.shortcut(), …) now works with an optional input, without ?? [].

    • The plural forms skip a definition whose hotkey is nullish.
    • An empty hotkey, such as '' or { key: '' }, also registers nothing, so clearing a hotkey to '' removes its registration. Before, an empty hotkey registered and fired on keydown events with no key, such as those some autofill tools send.
    • HotkeyManager.register still requires a hotkey. It throws a clear error for undefined, null, or an empty hotkey, as it already did for an empty sequence.
    • hasActiveRegistration and matchesHeldModifiers return false for no hotkey.
    • The Lit @hotkey decorator still needs a hotkey, because it is set when the class is defined.

Patch Changes

  • #214 a179ef6 - An option set to undefined now keeps its default, the same as leaving it out. Before, a wrapper component that forwarded unset props, such as preventDefault: props.preventDefault, turned off preventDefault and stopPropagation, so Mod+S also opened the browser's Save dialog. eventType: undefined made a hotkey never fire, and scope: undefined moved a hotkey out of its provider's scope.

    • This applies to register, provider defaults, createHotkeysScope defaults in Alpine and Ember, and recorder options merged with provider defaults.
    • In setOptions, undefined resets an option to its default, or removes it when it has no default.

    Behavior changes:

    • In React and Preact, a null target registers nothing, like a ref that is still empty. Before, it listened on document. To listen on document, leave out target. prepareHotkeyDefinitions in @tanstack/hotkeys/adapter does the same when no resolveTarget is given, which also applies to Svelte. Vue, Solid, Angular, Lit, Alpine, Ember, and Octane already skipped a null target.
  • Updated dependencies [a179ef6, a179ef6, a179ef6]:

    • @tanstack/hotkeys@0.21.0

@tanstack/angular-hotkeys-devtools@0.4.1

Patch Changes

  • Updated dependencies []:
    • @tanstack/hotkeys-devtools@1.7.1

@tanstack/hotkeys-devtools@1.7.1

Patch Changes

@tanstack/preact-hotkeys-devtools@0.12.1

Patch Changes

  • Updated dependencies []:
    • @tanstack/hotkeys-devtools@1.7.1

@tanstack/react-hotkeys-devtools@0.13.1

Patch Changes

  • Updated dependencies []:
    • @tanstack/hotkeys-devtools@1.7.1

@tanstack/solid-hotkeys-devtools@0.12.1

Patch Changes

  • Updated dependencies []:
    • @tanstack/hotkeys-devtools@1.7.1

@tanstack/svelte-hotkeys-devtools@0.4.1

Patch Changes

  • Updated dependencies []:
    • @tanstack/hotkeys-devtools@1.7.1

@tanstack/vue-hotkeys-devtools@0.12.1

Patch Changes

  • Updated dependencies []:
    • @tanstack/hotkeys-devtools@1.7.1

@coderabbitai

coderabbitai Bot commented Oct 31, 2026

Copy link
Copy Markdown

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

Run configuration

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

Use the checkbox below for a quick retry:

  • Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

@KevinVandy
KevinVandy merged commit 40451a5 into main Oct 31, 2026
3 checks passed
@KevinVandy
KevinVandy deleted the changeset-release/main branch October 31, 2026 13:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant