From 08802d6c214fdcf0a3c2303f1b730b945320d1a9 Mon Sep 17 00:00:00 2001 From: Ryan Carniato Date: Thu, 29 Oct 2026 19:16:01 +0000 Subject: [PATCH] feat(solid-hotkeys): support Solid 2 Port @tanstack/solid-hotkeys and the Solid examples to solid-js 2.0 (rc.19+): reactive options are tracked by split effects, HotkeysProvider publishes its store in onSettled and reads its create-time props untracked, renders the Solid 2 context without JSX, and createHotkeyRegistrations reconciles its views by id. The internal store selector writes with ownedWrite, since store updates arrive from outside the owner. Tests flush after writes. The examples drop the devtools panel, which stays on Solid 1 for now. Enters changesets pre mode (rc) and lets the release workflow run on *-pre branches. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_0117BoWMMJ6aTSA3MvtgJWG2 --- .changeset/pre.json | 4 + .changeset/solid-hotkeys-solid-2.md | 12 + .github/workflows/release.yml | 2 +- .../guides/hotkeys-provider-and-scopes.md | 2 +- docs/framework/solid/guides/hotkeys.md | 4 +- docs/framework/solid/quick-start.md | 4 +- docs/installation.md | 2 +- examples/solid/createHeldKeys/package.json | 9 +- examples/solid/createHeldKeys/src/index.tsx | 9 +- examples/solid/createHeldKeys/tsconfig.json | 2 +- examples/solid/createHeldKeys/vite.config.ts | 2 +- .../solid/createHotkey-sequences/package.json | 9 +- .../createHotkey-sequences/src/index.tsx | 10 +- .../createHotkey-sequences/tsconfig.json | 2 +- .../createHotkey-sequences/vite.config.ts | 2 +- examples/solid/createHotkey/package.json | 9 +- examples/solid/createHotkey/src/index.tsx | 19 +- examples/solid/createHotkey/tsconfig.json | 2 +- examples/solid/createHotkey/vite.config.ts | 2 +- .../package.json | 9 +- .../src/index.tsx | 15 +- .../tsconfig.json | 2 +- .../vite.config.ts | 2 +- .../solid/createHotkeyRecorder/package.json | 9 +- .../solid/createHotkeyRecorder/src/index.tsx | 19 +- .../solid/createHotkeyRecorder/tsconfig.json | 2 +- .../solid/createHotkeyRecorder/vite.config.ts | 2 +- .../createHotkeys-sequences/package.json | 9 +- .../createHotkeys-sequences/src/index.tsx | 8 +- .../createHotkeys-sequences/tsconfig.json | 2 +- .../createHotkeys-sequences/vite.config.ts | 2 +- examples/solid/createHotkeys/package.json | 9 +- examples/solid/createHotkeys/src/index.tsx | 9 +- examples/solid/createHotkeys/tsconfig.json | 2 +- examples/solid/createHotkeys/vite.config.ts | 2 +- examples/solid/createKeyHold/package.json | 9 +- examples/solid/createKeyHold/src/index.tsx | 8 +- examples/solid/createKeyHold/tsconfig.json | 2 +- examples/solid/createKeyHold/vite.config.ts | 2 +- examples/solid/kitchen-sink/package.json | 9 +- examples/solid/kitchen-sink/src/index.tsx | 22 +- examples/solid/kitchen-sink/tsconfig.json | 2 +- examples/solid/kitchen-sink/vite.config.ts | 2 +- examples/solid/scopes/package.json | 9 +- examples/solid/scopes/src/index.tsx | 27 +- examples/solid/scopes/tsconfig.json | 2 +- examples/solid/scopes/vite.config.ts | 2 +- package.json | 2 +- packages/solid-hotkeys/package.json | 9 +- .../solid-hotkeys/src/HotkeysProvider.tsx | 59 ++- packages/solid-hotkeys/src/_useSelector.ts | 8 +- .../solid-hotkeys/src/createHotkeyRecorder.ts | 8 +- .../src/createHotkeyRegistrations.ts | 11 +- packages/solid-hotkeys/src/createHotkeys.ts | 40 +- .../solid-hotkeys/tests/appHotkeys.test.tsx | 8 +- .../solid-hotkeys/tests/createHotkey.test.tsx | 10 +- .../tests/createHotkeyHint.test.tsx | 59 ++- .../tests/createHotkeys-sequences.test.tsx | 7 +- .../tests/createHotkeys.test.tsx | 14 +- .../tests/reactive-options.test.tsx | 11 +- packages/solid-hotkeys/tests/scopes.test.tsx | 13 +- packages/solid-hotkeys/tsconfig.json | 2 +- packages/solid-hotkeys/tsdown.config.ts | 2 +- packages/solid-hotkeys/vitest.config.ts | 2 +- pnpm-lock.yaml | 483 ++++++++++++------ 65 files changed, 624 insertions(+), 430 deletions(-) create mode 100644 .changeset/pre.json create mode 100644 .changeset/solid-hotkeys-solid-2.md diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 00000000..d1deaa4c --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,4 @@ +{ + "mode": "pre", + "tag": "rc" +} diff --git a/.changeset/solid-hotkeys-solid-2.md b/.changeset/solid-hotkeys-solid-2.md new file mode 100644 index 00000000..c1396e2f --- /dev/null +++ b/.changeset/solid-hotkeys-solid-2.md @@ -0,0 +1,12 @@ +--- +'@tanstack/solid-hotkeys': minor +--- + +Support Solid 2. `@tanstack/solid-hotkeys` now requires `solid-js` 2 (`>=2.0.0-rc.19 <3.0.0`); stay on 0.18.x for Solid 1. + +- The primitives keep their API. Reactive options are tracked by split effects (compute reads the options, the effect applies them), `HotkeysProvider` publishes its store in `onSettled`, and provider props read once at creation are read untracked. +- `HotkeysProvider` renders the Solid 2 context without JSX, so the adapter depends on `solid-js` only. +- The internal store selector writes with `ownedWrite`, since store updates arrive from outside the owner. +- `createHotkeyRegistrations` returns a store reconciled by registration `id`, so `` rows keep their identity when registrations change. +- As with every Solid 2 signal, values read right after a write outside a reactive scope update after the next flush (`flush()` from `solid-js`, or the next microtask). +- `@tanstack/solid-hotkeys-devtools` stays on Solid 1 until TanStack Devtools has a Solid 2 entry. diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 324ad6b4..2c50d09a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,7 +2,7 @@ name: Release on: push: - branches: [main, alpha, beta, rc] + branches: [main, alpha, beta, rc, '*-pre'] concurrency: group: ${{ github.workflow }}-${{ github.event.number || github.ref }} diff --git a/docs/framework/solid/guides/hotkeys-provider-and-scopes.md b/docs/framework/solid/guides/hotkeys-provider-and-scopes.md index 6e31af45..f1be4c6f 100644 --- a/docs/framework/solid/guides/hotkeys-provider-and-scopes.md +++ b/docs/framework/solid/guides/hotkeys-provider-and-scopes.md @@ -99,7 +99,7 @@ function Editor() { // Also has a target: works only while focus is inside the outline createHotkey('Delete', () => deleteHeading(), () => ({ target: outline() })) - return + return } ``` diff --git a/docs/framework/solid/guides/hotkeys.md b/docs/framework/solid/guides/hotkeys.md index fcb00df4..c0e8b28f 100644 --- a/docs/framework/solid/guides/hotkeys.md +++ b/docs/framework/solid/guides/hotkeys.md @@ -304,7 +304,7 @@ function Panel() { createHotkey('Escape', () => closePanel(), () => ({ target: panel() })) return ( -
+
Panel content
) @@ -314,7 +314,7 @@ function Panel() { A `null` target waits until the element is attached. > [!NOTE] -> An element receives key presses only while it, or something inside it, has focus. Give it a `tabIndex` if it isn't focusable already. +> An element receives key presses only while it, or something inside it, has focus. Give it a `tabindex` if it isn't focusable already. While focus is inside the element, its hotkeys run before hotkeys on `document`. With the default `stopPropagation: true`, a `document` hotkey for the same key doesn't run at all. A sequence with a target advances only on key presses inside the target. diff --git a/docs/framework/solid/quick-start.md b/docs/framework/solid/quick-start.md index a1e7f3f7..6a3e9a8d 100644 --- a/docs/framework/solid/quick-start.md +++ b/docs/framework/solid/quick-start.md @@ -138,14 +138,14 @@ function Panel() { createHotkey('Escape', () => closePanel(), () => ({ target: panel() })) return ( -
+
...
) } ``` -A `null` target waits until the element is attached. The element must be focusable to receive key presses, so give it a `tabIndex` if it isn't a control. +A `null` target waits until the element is attached. The element must be focusable to receive key presses, so give it a `tabindex` if it isn't a control. ## Add providers and scopes (optional) diff --git a/docs/installation.md b/docs/installation.md index e950c291..9a906384 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -42,7 +42,7 @@ Start with the [Quick Start](./framework/preact/quick-start) guide and the Preac # Solid -Use Solid 1.7 or newer within version 1. The devtools panel needs Solid 1.9.15 or newer. +`@tanstack/solid-hotkeys` 0.19 and later work with Solid 2; for Solid 1 (1.7 or newer), install `@tanstack/solid-hotkeys@0.18`. The devtools panel still runs on Solid 1 (1.9.15 or newer) and isn't available for Solid 2 apps yet. Start with the [Quick Start](./framework/solid/quick-start) guide and the Solid-specific [guides](./framework/solid/guides/hotkeys). If you want the integrated devtools panel, also install: diff --git a/examples/solid/createHeldKeys/package.json b/examples/solid/createHeldKeys/package.json index 333edf71..d344254e 100644 --- a/examples/solid/createHeldKeys/package.json +++ b/examples/solid/createHeldKeys/package.json @@ -8,13 +8,12 @@ "preview": "vite preview" }, "dependencies": { - "@tanstack/solid-devtools": "0.8.14", + "@solidjs/web": "^2.0.0-rc.19", "@tanstack/solid-hotkeys": "^0.18.0", - "@tanstack/solid-hotkeys-devtools": "^0.12.0", - "solid-js": "^1.9.15" + "solid-js": "^2.0.0-rc.19" }, "devDependencies": { - "vite": "^8.3.2", - "vite-plugin-solid": "^2.11.14" + "@solidjs/vite-plugin": "^3.0.0-next.52", + "vite": "^8.3.2" } } diff --git a/examples/solid/createHeldKeys/src/index.tsx b/examples/solid/createHeldKeys/src/index.tsx index 43836609..d6510ab8 100644 --- a/examples/solid/createHeldKeys/src/index.tsx +++ b/examples/solid/createHeldKeys/src/index.tsx @@ -1,5 +1,5 @@ /* @refresh reload */ -import { render } from 'solid-js/web' +import { render } from '@solidjs/web' import { createEffect, createSignal } from 'solid-js' import { HotkeysProvider, @@ -7,8 +7,6 @@ import { createHeldKeys, formatForDisplay, } from '@tanstack/solid-hotkeys' -import { hotkeysDevtoolsPlugin } from '@tanstack/solid-hotkeys-devtools' -import { TanStackDevtools } from '@tanstack/solid-devtools' import './index.css' function App() { @@ -16,8 +14,7 @@ function App() { const heldCodes = createHeldKeyCodes() const [history, setHistory] = createSignal>([]) - createEffect(() => { - const keys = heldKeys() + createEffect(heldKeys, (keys) => { if (keys.length > 0) { const combo = keys .map((k) => formatForDisplay({ key: k }, { useSymbols: true })) @@ -120,8 +117,6 @@ function KeyDisplay() { - -
) } diff --git a/examples/solid/createHeldKeys/tsconfig.json b/examples/solid/createHeldKeys/tsconfig.json index d38d513e..4e4b6b44 100644 --- a/examples/solid/createHeldKeys/tsconfig.json +++ b/examples/solid/createHeldKeys/tsconfig.json @@ -6,7 +6,7 @@ "skipLibCheck": true, "moduleResolution": "Bundler", "jsx": "preserve", - "jsxImportSource": "solid-js", + "jsxImportSource": "@solidjs/web", "strict": true, "types": ["vite/client", "solid-js"] }, diff --git a/examples/solid/createHeldKeys/vite.config.ts b/examples/solid/createHeldKeys/vite.config.ts index 4095d9be..6a1fe32b 100644 --- a/examples/solid/createHeldKeys/vite.config.ts +++ b/examples/solid/createHeldKeys/vite.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vite' -import solid from 'vite-plugin-solid' +import solid from '@solidjs/vite-plugin' export default defineConfig({ plugins: [solid()], diff --git a/examples/solid/createHotkey-sequences/package.json b/examples/solid/createHotkey-sequences/package.json index 1a82f574..e7076bf4 100644 --- a/examples/solid/createHotkey-sequences/package.json +++ b/examples/solid/createHotkey-sequences/package.json @@ -8,13 +8,12 @@ "preview": "vite preview" }, "dependencies": { - "@tanstack/solid-devtools": "0.8.14", + "@solidjs/web": "^2.0.0-rc.19", "@tanstack/solid-hotkeys": "^0.18.0", - "@tanstack/solid-hotkeys-devtools": "^0.12.0", - "solid-js": "^1.9.15" + "solid-js": "^2.0.0-rc.19" }, "devDependencies": { - "vite": "^8.3.2", - "vite-plugin-solid": "^2.11.14" + "@solidjs/vite-plugin": "^3.0.0-next.52", + "vite": "^8.3.2" } } diff --git a/examples/solid/createHotkey-sequences/src/index.tsx b/examples/solid/createHotkey-sequences/src/index.tsx index 414bfd2a..829827b5 100644 --- a/examples/solid/createHotkey-sequences/src/index.tsx +++ b/examples/solid/createHotkey-sequences/src/index.tsx @@ -1,9 +1,7 @@ /* @refresh reload */ -import { render } from 'solid-js/web' -import { createSignal, Show } from 'solid-js' -import { createHotkey, HotkeysProvider } from '@tanstack/solid-hotkeys' -import { hotkeysDevtoolsPlugin } from '@tanstack/solid-hotkeys-devtools' -import { TanStackDevtools } from '@tanstack/solid-devtools' +import { render } from '@solidjs/web' +import { Show, createSignal } from 'solid-js' +import { HotkeysProvider, createHotkey } from '@tanstack/solid-hotkeys' import './index.css' function App() { @@ -243,8 +241,6 @@ function VimEditor() { Press Escape to clear history

- -
) } diff --git a/examples/solid/createHotkey-sequences/tsconfig.json b/examples/solid/createHotkey-sequences/tsconfig.json index d38d513e..4e4b6b44 100644 --- a/examples/solid/createHotkey-sequences/tsconfig.json +++ b/examples/solid/createHotkey-sequences/tsconfig.json @@ -6,7 +6,7 @@ "skipLibCheck": true, "moduleResolution": "Bundler", "jsx": "preserve", - "jsxImportSource": "solid-js", + "jsxImportSource": "@solidjs/web", "strict": true, "types": ["vite/client", "solid-js"] }, diff --git a/examples/solid/createHotkey-sequences/vite.config.ts b/examples/solid/createHotkey-sequences/vite.config.ts index 4095d9be..6a1fe32b 100644 --- a/examples/solid/createHotkey-sequences/vite.config.ts +++ b/examples/solid/createHotkey-sequences/vite.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vite' -import solid from 'vite-plugin-solid' +import solid from '@solidjs/vite-plugin' export default defineConfig({ plugins: [solid()], diff --git a/examples/solid/createHotkey/package.json b/examples/solid/createHotkey/package.json index c4e50b5b..e970ba9a 100644 --- a/examples/solid/createHotkey/package.json +++ b/examples/solid/createHotkey/package.json @@ -11,15 +11,14 @@ "test:types": "tsc" }, "dependencies": { - "@tanstack/solid-devtools": "0.8.14", + "@solidjs/web": "^2.0.0-rc.19", "@tanstack/solid-hotkeys": "^0.18.0", - "@tanstack/solid-hotkeys-devtools": "^0.12.0", - "solid-js": "^1.9.15" + "solid-js": "^2.0.0-rc.19" }, "devDependencies": { + "@solidjs/vite-plugin": "^3.0.0-next.52", "@types/node": "^26.6.4", "typescript": "6.0.3", - "vite": "^8.3.2", - "vite-plugin-solid": "^2.11.14" + "vite": "^8.3.2" } } diff --git a/examples/solid/createHotkey/src/index.tsx b/examples/solid/createHotkey/src/index.tsx index cd9a7cff..90444584 100644 --- a/examples/solid/createHotkey/src/index.tsx +++ b/examples/solid/createHotkey/src/index.tsx @@ -1,13 +1,11 @@ /* @refresh reload */ import { Show, createEffect, createSignal } from 'solid-js' -import { render } from 'solid-js/web' +import { render } from '@solidjs/web' import { HotkeysProvider, createHotkey, formatForDisplay, } from '@tanstack/solid-hotkeys' -import { hotkeysDevtoolsPlugin } from '@tanstack/solid-hotkeys-devtools' -import { TanStackDevtools } from '@tanstack/solid-devtools' import type { Hotkey } from '@tanstack/solid-hotkeys' import './index.css' @@ -200,11 +198,10 @@ function App() { setFunctionKeyCount((c) => c + 1) }) - createEffect(() => { - if (modalOpen()) { - modalRef()?.focus() - } - }) + createEffect( + () => (modalOpen() ? modalRef() : null), + (modal) => modal?.focus(), + ) createHotkey( 'Mod+B', @@ -528,7 +525,7 @@ createHotkey('Mod+Space', () => toggle())`}

-
+

Sidebar (Scoped Area)

Click here to focus, then try:

@@ -557,7 +554,7 @@ createHotkey('Mod+Space', () => toggle())`} ) } diff --git a/examples/solid/createHotkey/tsconfig.json b/examples/solid/createHotkey/tsconfig.json index 95a64aac..92de4360 100644 --- a/examples/solid/createHotkey/tsconfig.json +++ b/examples/solid/createHotkey/tsconfig.json @@ -10,7 +10,7 @@ "isolatedModules": true, "noEmit": true, "jsx": "preserve", - "jsxImportSource": "solid-js", + "jsxImportSource": "@solidjs/web", "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, diff --git a/examples/solid/createHotkey/vite.config.ts b/examples/solid/createHotkey/vite.config.ts index 4095d9be..6a1fe32b 100644 --- a/examples/solid/createHotkey/vite.config.ts +++ b/examples/solid/createHotkey/vite.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vite' -import solid from 'vite-plugin-solid' +import solid from '@solidjs/vite-plugin' export default defineConfig({ plugins: [solid()], diff --git a/examples/solid/createHotkeyRecorder-sequences/package.json b/examples/solid/createHotkeyRecorder-sequences/package.json index 02b34925..e08c7db0 100644 --- a/examples/solid/createHotkeyRecorder-sequences/package.json +++ b/examples/solid/createHotkeyRecorder-sequences/package.json @@ -8,13 +8,12 @@ "preview": "vite preview" }, "dependencies": { - "@tanstack/solid-devtools": "0.8.14", + "@solidjs/web": "^2.0.0-rc.19", "@tanstack/solid-hotkeys": "^0.18.0", - "@tanstack/solid-hotkeys-devtools": "^0.12.0", - "solid-js": "^1.9.15" + "solid-js": "^2.0.0-rc.19" }, "devDependencies": { - "vite": "^8.3.2", - "vite-plugin-solid": "^2.11.14" + "@solidjs/vite-plugin": "^3.0.0-next.52", + "vite": "^8.3.2" } } diff --git a/examples/solid/createHotkeyRecorder-sequences/src/index.tsx b/examples/solid/createHotkeyRecorder-sequences/src/index.tsx index bec8e981..f4e5adbf 100644 --- a/examples/solid/createHotkeyRecorder-sequences/src/index.tsx +++ b/examples/solid/createHotkeyRecorder-sequences/src/index.tsx @@ -1,16 +1,14 @@ /* @refresh reload */ -import { render } from 'solid-js/web' -import { createSignal, Show, For } from 'solid-js' +import { render } from '@solidjs/web' +import { For, Show, createSignal } from 'solid-js' import { - formatForDisplay, + HotkeysProvider, createHeldKeys, + createHotkeyRecorder, createHotkeyRegistrations, createHotkeys, - createHotkeyRecorder, - HotkeysProvider, + formatForDisplay, } from '@tanstack/solid-hotkeys' -import { hotkeysDevtoolsPlugin } from '@tanstack/solid-hotkeys-devtools' -import { TanStackDevtools } from '@tanstack/solid-devtools' import type { Hotkey, HotkeySequence } from '@tanstack/solid-hotkeys' import './index.css' @@ -299,7 +297,6 @@ const registrations = createHotkeyRegistrations() // registrations()[0].triggerCount → 3`} -
) } @@ -361,7 +358,7 @@ function RegistrationsViewer() { - + No hotkeys registered diff --git a/examples/solid/createHotkeyRecorder-sequences/tsconfig.json b/examples/solid/createHotkeyRecorder-sequences/tsconfig.json index d38d513e..4e4b6b44 100644 --- a/examples/solid/createHotkeyRecorder-sequences/tsconfig.json +++ b/examples/solid/createHotkeyRecorder-sequences/tsconfig.json @@ -6,7 +6,7 @@ "skipLibCheck": true, "moduleResolution": "Bundler", "jsx": "preserve", - "jsxImportSource": "solid-js", + "jsxImportSource": "@solidjs/web", "strict": true, "types": ["vite/client", "solid-js"] }, diff --git a/examples/solid/createHotkeyRecorder-sequences/vite.config.ts b/examples/solid/createHotkeyRecorder-sequences/vite.config.ts index 4095d9be..6a1fe32b 100644 --- a/examples/solid/createHotkeyRecorder-sequences/vite.config.ts +++ b/examples/solid/createHotkeyRecorder-sequences/vite.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vite' -import solid from 'vite-plugin-solid' +import solid from '@solidjs/vite-plugin' export default defineConfig({ plugins: [solid()], diff --git a/examples/solid/createHotkeyRecorder/package.json b/examples/solid/createHotkeyRecorder/package.json index 68b3d818..308b5237 100644 --- a/examples/solid/createHotkeyRecorder/package.json +++ b/examples/solid/createHotkeyRecorder/package.json @@ -8,13 +8,12 @@ "preview": "vite preview" }, "dependencies": { - "@tanstack/solid-devtools": "0.8.14", + "@solidjs/web": "^2.0.0-rc.19", "@tanstack/solid-hotkeys": "^0.18.0", - "@tanstack/solid-hotkeys-devtools": "^0.12.0", - "solid-js": "^1.9.15" + "solid-js": "^2.0.0-rc.19" }, "devDependencies": { - "vite": "^8.3.2", - "vite-plugin-solid": "^2.11.14" + "@solidjs/vite-plugin": "^3.0.0-next.52", + "vite": "^8.3.2" } } diff --git a/examples/solid/createHotkeyRecorder/src/index.tsx b/examples/solid/createHotkeyRecorder/src/index.tsx index 495d2835..71c671bf 100644 --- a/examples/solid/createHotkeyRecorder/src/index.tsx +++ b/examples/solid/createHotkeyRecorder/src/index.tsx @@ -1,16 +1,14 @@ /* @refresh reload */ -import { render } from 'solid-js/web' -import { createSignal, Show, For } from 'solid-js' +import { render } from '@solidjs/web' +import { For, Show, createSignal } from 'solid-js' import { - formatForDisplay, + HotkeysProvider, createHeldKeys, createHotkeyRecorder, - createHotkeys, createHotkeyRegistrations, - HotkeysProvider, + createHotkeys, + formatForDisplay, } from '@tanstack/solid-hotkeys' -import { hotkeysDevtoolsPlugin } from '@tanstack/solid-hotkeys-devtools' -import { TanStackDevtools } from '@tanstack/solid-devtools' import type { Hotkey } from '@tanstack/solid-hotkeys' import './index.css' @@ -115,7 +113,7 @@ function App() { s.id === id ? { ...s, - hotkey: '' as Hotkey | '', + hotkey: '', name: draftName(), description: draftDescription(), } @@ -273,7 +271,6 @@ const hotkeys = createHotkeyRegistrations() // hotkeys()[0].triggerCount → 3`} -
) } @@ -329,7 +326,7 @@ function RegistrationsViewer() { - + No hotkeys registered @@ -408,7 +405,7 @@ function ShortcutListItem(props: { )}
) : props.shortcut.hotkey ? ( - {formatForDisplay(props.shortcut.hotkey as Hotkey)} + {formatForDisplay(props.shortcut.hotkey)} ) : ( No shortcut )} diff --git a/examples/solid/createHotkeyRecorder/tsconfig.json b/examples/solid/createHotkeyRecorder/tsconfig.json index d38d513e..4e4b6b44 100644 --- a/examples/solid/createHotkeyRecorder/tsconfig.json +++ b/examples/solid/createHotkeyRecorder/tsconfig.json @@ -6,7 +6,7 @@ "skipLibCheck": true, "moduleResolution": "Bundler", "jsx": "preserve", - "jsxImportSource": "solid-js", + "jsxImportSource": "@solidjs/web", "strict": true, "types": ["vite/client", "solid-js"] }, diff --git a/examples/solid/createHotkeyRecorder/vite.config.ts b/examples/solid/createHotkeyRecorder/vite.config.ts index 4095d9be..6a1fe32b 100644 --- a/examples/solid/createHotkeyRecorder/vite.config.ts +++ b/examples/solid/createHotkeyRecorder/vite.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vite' -import solid from 'vite-plugin-solid' +import solid from '@solidjs/vite-plugin' export default defineConfig({ plugins: [solid()], diff --git a/examples/solid/createHotkeys-sequences/package.json b/examples/solid/createHotkeys-sequences/package.json index f2fb365c..bf21ab17 100644 --- a/examples/solid/createHotkeys-sequences/package.json +++ b/examples/solid/createHotkeys-sequences/package.json @@ -8,13 +8,12 @@ "preview": "vite preview" }, "dependencies": { - "@tanstack/solid-devtools": "0.8.14", + "@solidjs/web": "^2.0.0-rc.19", "@tanstack/solid-hotkeys": "^0.18.0", - "@tanstack/solid-hotkeys-devtools": "^0.12.0", - "solid-js": "^1.9.15" + "solid-js": "^2.0.0-rc.19" }, "devDependencies": { - "vite": "^8.3.2", - "vite-plugin-solid": "^2.11.14" + "@solidjs/vite-plugin": "^3.0.0-next.52", + "vite": "^8.3.2" } } diff --git a/examples/solid/createHotkeys-sequences/src/index.tsx b/examples/solid/createHotkeys-sequences/src/index.tsx index a09e619c..d94d707d 100644 --- a/examples/solid/createHotkeys-sequences/src/index.tsx +++ b/examples/solid/createHotkeys-sequences/src/index.tsx @@ -1,5 +1,5 @@ /* @refresh reload */ -import { render } from 'solid-js/web' +import { render } from '@solidjs/web' import { For, Show, createSignal } from 'solid-js' import { HotkeysProvider, @@ -8,8 +8,6 @@ import { createHotkeys, formatForDisplay, } from '@tanstack/solid-hotkeys' -import { hotkeysDevtoolsPlugin } from '@tanstack/solid-hotkeys-devtools' -import { TanStackDevtools } from '@tanstack/solid-devtools' import './index.css' function App() { @@ -335,8 +333,6 @@ function VimEditor() { Press Escape to clear history

- -
) } @@ -398,7 +394,7 @@ function RegistrationsViewer() {
- + No hotkeys registered diff --git a/examples/solid/createHotkeys-sequences/tsconfig.json b/examples/solid/createHotkeys-sequences/tsconfig.json index d38d513e..4e4b6b44 100644 --- a/examples/solid/createHotkeys-sequences/tsconfig.json +++ b/examples/solid/createHotkeys-sequences/tsconfig.json @@ -6,7 +6,7 @@ "skipLibCheck": true, "moduleResolution": "Bundler", "jsx": "preserve", - "jsxImportSource": "solid-js", + "jsxImportSource": "@solidjs/web", "strict": true, "types": ["vite/client", "solid-js"] }, diff --git a/examples/solid/createHotkeys-sequences/vite.config.ts b/examples/solid/createHotkeys-sequences/vite.config.ts index 4095d9be..6a1fe32b 100644 --- a/examples/solid/createHotkeys-sequences/vite.config.ts +++ b/examples/solid/createHotkeys-sequences/vite.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vite' -import solid from 'vite-plugin-solid' +import solid from '@solidjs/vite-plugin' export default defineConfig({ plugins: [solid()], diff --git a/examples/solid/createHotkeys/package.json b/examples/solid/createHotkeys/package.json index d49a52d0..b3791cec 100644 --- a/examples/solid/createHotkeys/package.json +++ b/examples/solid/createHotkeys/package.json @@ -11,15 +11,14 @@ "test:types": "tsc" }, "dependencies": { - "@tanstack/solid-devtools": "0.8.14", + "@solidjs/web": "^2.0.0-rc.19", "@tanstack/solid-hotkeys": "^0.18.0", - "@tanstack/solid-hotkeys-devtools": "^0.12.0", - "solid-js": "^1.9.15" + "solid-js": "^2.0.0-rc.19" }, "devDependencies": { + "@solidjs/vite-plugin": "^3.0.0-next.52", "@types/node": "^26.6.4", "typescript": "6.0.3", - "vite": "^8.3.2", - "vite-plugin-solid": "^2.11.14" + "vite": "^8.3.2" } } diff --git a/examples/solid/createHotkeys/src/index.tsx b/examples/solid/createHotkeys/src/index.tsx index a22b75d9..390e59d9 100644 --- a/examples/solid/createHotkeys/src/index.tsx +++ b/examples/solid/createHotkeys/src/index.tsx @@ -1,18 +1,14 @@ import { For, Show, createSignal } from 'solid-js' -import { render } from 'solid-js/web' +import { render } from '@solidjs/web' import { HotkeysProvider, createHotkeyRegistrations, createHotkeys, formatForDisplay, } from '@tanstack/solid-hotkeys' -import { hotkeysDevtoolsPlugin } from '@tanstack/solid-hotkeys-devtools' -import { TanStackDevtools } from '@tanstack/solid-devtools' import type { CreateHotkeyDefinition, Hotkey } from '@tanstack/solid-hotkeys' import './index.css' -const plugins = [hotkeysDevtoolsPlugin()] - function BasicMultiHotkeys() { const [log, setLog] = createSignal>([]) const [saveCount, setSaveCount] = createSignal(0) @@ -378,7 +374,7 @@ function RegistrationsViewer() { - + No hotkeys registered @@ -407,7 +403,6 @@ function App() { - ) } diff --git a/examples/solid/createHotkeys/tsconfig.json b/examples/solid/createHotkeys/tsconfig.json index 95a64aac..92de4360 100644 --- a/examples/solid/createHotkeys/tsconfig.json +++ b/examples/solid/createHotkeys/tsconfig.json @@ -10,7 +10,7 @@ "isolatedModules": true, "noEmit": true, "jsx": "preserve", - "jsxImportSource": "solid-js", + "jsxImportSource": "@solidjs/web", "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, diff --git a/examples/solid/createHotkeys/vite.config.ts b/examples/solid/createHotkeys/vite.config.ts index 4095d9be..6a1fe32b 100644 --- a/examples/solid/createHotkeys/vite.config.ts +++ b/examples/solid/createHotkeys/vite.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vite' -import solid from 'vite-plugin-solid' +import solid from '@solidjs/vite-plugin' export default defineConfig({ plugins: [solid()], diff --git a/examples/solid/createKeyHold/package.json b/examples/solid/createKeyHold/package.json index 5d64cc34..952d2fac 100644 --- a/examples/solid/createKeyHold/package.json +++ b/examples/solid/createKeyHold/package.json @@ -8,13 +8,12 @@ "preview": "vite preview" }, "dependencies": { - "@tanstack/solid-devtools": "0.8.14", + "@solidjs/web": "^2.0.0-rc.19", "@tanstack/solid-hotkeys": "^0.18.0", - "@tanstack/solid-hotkeys-devtools": "^0.12.0", - "solid-js": "^1.9.15" + "solid-js": "^2.0.0-rc.19" }, "devDependencies": { - "vite": "^8.3.2", - "vite-plugin-solid": "^2.11.14" + "@solidjs/vite-plugin": "^3.0.0-next.52", + "vite": "^8.3.2" } } diff --git a/examples/solid/createKeyHold/src/index.tsx b/examples/solid/createKeyHold/src/index.tsx index 5971b2bf..fb51da38 100644 --- a/examples/solid/createKeyHold/src/index.tsx +++ b/examples/solid/createKeyHold/src/index.tsx @@ -1,8 +1,6 @@ /* @refresh reload */ -import { render } from 'solid-js/web' -import { createKeyHold, HotkeysProvider } from '@tanstack/solid-hotkeys' -import { hotkeysDevtoolsPlugin } from '@tanstack/solid-hotkeys-devtools' -import { TanStackDevtools } from '@tanstack/solid-devtools' +import { render } from '@solidjs/web' +import { HotkeysProvider, createKeyHold } from '@tanstack/solid-hotkeys' import './index.css' function App() { @@ -96,8 +94,6 @@ function ShiftIndicator() { - - ) } diff --git a/examples/solid/createKeyHold/tsconfig.json b/examples/solid/createKeyHold/tsconfig.json index d38d513e..4e4b6b44 100644 --- a/examples/solid/createKeyHold/tsconfig.json +++ b/examples/solid/createKeyHold/tsconfig.json @@ -6,7 +6,7 @@ "skipLibCheck": true, "moduleResolution": "Bundler", "jsx": "preserve", - "jsxImportSource": "solid-js", + "jsxImportSource": "@solidjs/web", "strict": true, "types": ["vite/client", "solid-js"] }, diff --git a/examples/solid/createKeyHold/vite.config.ts b/examples/solid/createKeyHold/vite.config.ts index 4095d9be..6a1fe32b 100644 --- a/examples/solid/createKeyHold/vite.config.ts +++ b/examples/solid/createKeyHold/vite.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vite' -import solid from 'vite-plugin-solid' +import solid from '@solidjs/vite-plugin' export default defineConfig({ plugins: [solid()], diff --git a/examples/solid/kitchen-sink/package.json b/examples/solid/kitchen-sink/package.json index 60a96894..63138834 100644 --- a/examples/solid/kitchen-sink/package.json +++ b/examples/solid/kitchen-sink/package.json @@ -11,15 +11,14 @@ "test:types": "tsc" }, "dependencies": { - "@tanstack/solid-devtools": "0.8.14", + "@solidjs/web": "^2.0.0-rc.19", "@tanstack/solid-hotkeys": "^0.18.0", - "@tanstack/solid-hotkeys-devtools": "^0.12.0", - "solid-js": "^1.9.15" + "solid-js": "^2.0.0-rc.19" }, "devDependencies": { + "@solidjs/vite-plugin": "^3.0.0-next.52", "@types/node": "^26.6.4", "typescript": "6.0.3", - "vite": "^8.3.2", - "vite-plugin-solid": "^2.11.14" + "vite": "^8.3.2" } } diff --git a/examples/solid/kitchen-sink/src/index.tsx b/examples/solid/kitchen-sink/src/index.tsx index 37f23d3c..1aa71bd5 100644 --- a/examples/solid/kitchen-sink/src/index.tsx +++ b/examples/solid/kitchen-sink/src/index.tsx @@ -2,13 +2,10 @@ import { Show, createContext, createSignal, - onCleanup, - onMount, + onSettled, useContext, } from 'solid-js' -import { Dynamic, render } from 'solid-js/web' -import { TanStackDevtools } from '@tanstack/solid-devtools' -import { hotkeysDevtoolsPlugin } from '@tanstack/solid-hotkeys-devtools' +import { Dynamic, render } from '@solidjs/web' import { HotkeysProvider, createHeldKeyCodes, @@ -28,7 +25,7 @@ import type { RegisterableHotkey, } from '@tanstack/solid-hotkeys' import './styles.css' -import type { JSX } from 'solid-js' +import type { JSX } from '@solidjs/web' const ActivityContext = createContext<(message: string) => void>(() => {}) const pages = [ @@ -50,10 +47,10 @@ function Hint(props: { hotkey: RegisterableHotkey }) { /** Global shortcuts remain registered while route components mount and unmount. */ function Layout() { const [path, setPath] = createSignal(location.hash.slice(1) || '/') - onMount(() => { + onSettled(() => { const update = () => setPath(location.hash.slice(1) || '/') window.addEventListener('hashchange', update) - onCleanup(() => window.removeEventListener('hashchange', update)) + return () => window.removeEventListener('hashchange', update) }) const [showShortcuts, setShowShortcuts] = createSignal(false) const [activity, setActivity] = createSignal>([]) @@ -87,7 +84,7 @@ function Layout() { }), ) return ( - +

TanStack Hotkeys kitchen sink

@@ -103,7 +100,7 @@ function Layout() {

@@ -56,7 +51,6 @@ function App() { - ) } @@ -76,10 +70,10 @@ interface ScopeProps { /** A `HotkeysProvider` with a box around its children, labeled with its props. */ function Scope(props: ScopeProps) { - const [local, others] = splitProps(props, ['children']) + const others = omit(props, 'children') return ( - {local.children} + {props.children} ) } @@ -397,16 +391,15 @@ function ActivityProvider(props: { children: JSX.Element }) { } const clear = () => setEntries([]) return ( - + {props.children} - +
) } +// A default-less context throws when its provider is missing. function useActivity() { - const activity = useContext(ActivityContext) - if (!activity) throw new Error('Missing ActivityProvider') - return activity + return useContext(ActivityContext) } function useLog() { diff --git a/examples/solid/scopes/tsconfig.json b/examples/solid/scopes/tsconfig.json index 95a64aac..92de4360 100644 --- a/examples/solid/scopes/tsconfig.json +++ b/examples/solid/scopes/tsconfig.json @@ -10,7 +10,7 @@ "isolatedModules": true, "noEmit": true, "jsx": "preserve", - "jsxImportSource": "solid-js", + "jsxImportSource": "@solidjs/web", "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, diff --git a/examples/solid/scopes/vite.config.ts b/examples/solid/scopes/vite.config.ts index 4095d9be..6a1fe32b 100644 --- a/examples/solid/scopes/vite.config.ts +++ b/examples/solid/scopes/vite.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vite' -import solid from 'vite-plugin-solid' +import solid from '@solidjs/vite-plugin' export default defineConfig({ plugins: [solid()], diff --git a/package.json b/package.json index abfe0fd0..567849cb 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "test:lib": "nx affected --targets=test:lib --exclude=examples/**", "test:lib:dev": "pnpm test:lib && nx watch --all -- pnpm test:lib", "test:pr": "pnpm run lint:all && nx affected --targets=test:sherif,test:knip,test:docs,test:lib,test:types,test:build,build", - "test:sherif": "sherif", + "test:sherif": "sherif -i solid-js", "test:skills": "intent maintainer check", "test:types": "nx affected --targets=test:types --exclude=examples/**", "watch": "pnpm run build:all && nx watch --all -- pnpm run build:all", diff --git a/packages/solid-hotkeys/package.json b/packages/solid-hotkeys/package.json index 5fdd70fd..7f8c5c1e 100644 --- a/packages/solid-hotkeys/package.json +++ b/packages/solid-hotkeys/package.json @@ -52,12 +52,13 @@ "@tanstack/hotkeys": "workspace:*" }, "devDependencies": { - "@solidjs/testing-library": "^0.8.10", + "@solidjs/testing-library": "^1.0.0-rc.2", + "@solidjs/vite-plugin": "^3.0.0-next.52", + "@solidjs/web": "^2.0.0-rc.19", "@testing-library/jest-dom": "^7.0.1", - "solid-js": "^1.9.15", - "vite-plugin-solid": "^2.11.14" + "solid-js": "^2.0.0-rc.19" }, "peerDependencies": { - "solid-js": "^1.7.0" + "solid-js": ">=2.0.0-rc.19 <3.0.0" } } diff --git a/packages/solid-hotkeys/src/HotkeysProvider.tsx b/packages/solid-hotkeys/src/HotkeysProvider.tsx index 29f0fee0..0f240b5b 100644 --- a/packages/solid-hotkeys/src/HotkeysProvider.tsx +++ b/packages/solid-hotkeys/src/HotkeysProvider.tsx @@ -1,9 +1,10 @@ import { + createComponent, createContext, createEffect, createMemo, - onCleanup, - onMount, + onSettled, + untrack, useContext, } from 'solid-js' import { publishAppHotkeysStore } from '@tanstack/hotkeys' @@ -13,7 +14,7 @@ import { getHotkeysProviderScopeKey, mergeHotkeysProviderDefaults, } from '@tanstack/hotkeys/adapter' -import type { JSX, ParentComponent } from 'solid-js' +import type { Element, ParentComponent } from 'solid-js' import type { AppHotkeys, AppHotkeysStore, @@ -50,7 +51,7 @@ interface HotkeysContextValue { const HotkeysContext = createContext(null) export interface HotkeysProviderProps extends HotkeysProviderScopeProps { - children: JSX.Element + children: Element /** * Every app hotkey, from `defineAppHotkeys`. Read when the provider is * created; listed by `createAppHotkeyList` whether or not they are registered. @@ -100,23 +101,27 @@ export const HotkeysProvider: ParentComponent = ( props, ) => { const parent = useContext(HotkeysContext) - const store = props.appHotkeys - ? createAppHotkeysStore(props.appHotkeys, { - customHotkeys: props.customHotkeys, - onCustomHotkeysChange: (custom) => - props.onCustomHotkeysChange?.(custom), - }) - : null + // `appHotkeys` and `customHotkeys` are read once, when the provider is created. + const store = untrack(() => + props.appHotkeys + ? createAppHotkeysStore(props.appHotkeys, { + customHotkeys: props.customHotkeys, + onCustomHotkeysChange: (custom) => + props.onCustomHotkeysChange?.(custom), + }) + : null, + ) // Keep declarations current (for example after hot module replacement). - createEffect(() => { - if (props.appHotkeys) store?.setAppHotkeys(props.appHotkeys) - }) + createEffect( + () => props.appHotkeys, + (appHotkeys) => { + if (appHotkeys) store?.setAppHotkeys(appHotkeys) + }, + ) // Publish the store so devtools can list declared hotkeys. - onMount(() => { - if (store) onCleanup(publishAppHotkeysStore(store)) - }) + onSettled(() => (store ? publishAppHotkeysStore(store) : undefined)) const active = () => (parent?.enabled ?? true) && props.enabled !== false const defaultOptions = createMemo(() => @@ -138,10 +143,9 @@ export const HotkeysProvider: ParentComponent = ( ) // Activate this provider's scope while mounted and enabled. - createEffect(() => { - const key = scopeKey() - if (key) onCleanup(activateHotkeysProviderScope(key)) - }) + createEffect(scopeKey, (key) => + key ? activateHotkeysProviderScope(key) : undefined, + ) const contextValue: HotkeysContextValue = { appHotkeysStore: store ?? parent?.appHotkeysStore ?? null, @@ -153,11 +157,14 @@ export const HotkeysProvider: ParentComponent = ( }, } - return ( - - {props.children} - - ) + // Built without JSX so the adapter only depends on `solid-js`, not on the + // `@solidjs/web` renderer that compiled JSX imports from. + return createComponent(HotkeysContext, { + value: contextValue, + get children() { + return props.children + }, + }) } export function useHotkeysContext() { diff --git a/packages/solid-hotkeys/src/_useSelector.ts b/packages/solid-hotkeys/src/_useSelector.ts index 8574a46e..7035566a 100644 --- a/packages/solid-hotkeys/src/_useSelector.ts +++ b/packages/solid-hotkeys/src/_useSelector.ts @@ -10,7 +10,13 @@ export function useSelector( store: Pick, 'get' | 'subscribe'>, selector: (state: TState) => TSelected, ): Accessor { - const [selected, setSelected] = createSignal(selector(store.get())) + const initial = selector(store.get()) + // The store writes from outside the owner, so the signal allows owned + // writes. A function value is wrapped so it is stored, not computed. + const [selected, setSelected] = createSignal( + (typeof initial === 'function' ? () => initial : initial) as never, + { ownedWrite: true }, + ) const { unsubscribe } = store.subscribe((state) => { setSelected(() => selector(state)) }) diff --git a/packages/solid-hotkeys/src/createHotkeyRecorder.ts b/packages/solid-hotkeys/src/createHotkeyRecorder.ts index cf003903..814439fd 100644 --- a/packages/solid-hotkeys/src/createHotkeyRecorder.ts +++ b/packages/solid-hotkeys/src/createHotkeyRecorder.ts @@ -1,4 +1,4 @@ -import { createEffect, onCleanup } from 'solid-js' +import { createEffect, onCleanup, untrack } from 'solid-js' import { HotkeyRecorder } from '@tanstack/hotkeys' import { useSelector } from './_useSelector' import { useDefaultHotkeysOptionsSource } from './defaultOptions' @@ -70,7 +70,7 @@ export function createHotkeyRecorder( }) as HotkeySequenceRecorderOptions // Create recorder once synchronously; overloads already checked the options. - const recorder = new HotkeyRecorder(resolve()) + const recorder = new HotkeyRecorder(untrack(resolve)) const isRecording = useSelector(recorder.store, (state) => state.isRecording) const steps = useSelector(recorder.store, (state) => state.steps) @@ -80,8 +80,8 @@ export function createHotkeyRecorder( ) // Sync options whenever reactive options change - createEffect(() => { - recorder.setOptions(resolve()) + createEffect(resolve, (resolved) => { + recorder.setOptions(resolved) }) onCleanup(() => { diff --git a/packages/solid-hotkeys/src/createHotkeyRegistrations.ts b/packages/solid-hotkeys/src/createHotkeyRegistrations.ts index 853ff386..7fc394ae 100644 --- a/packages/solid-hotkeys/src/createHotkeyRegistrations.ts +++ b/packages/solid-hotkeys/src/createHotkeyRegistrations.ts @@ -1,3 +1,4 @@ +import { createStore } from 'solid-js' import { getHotkeyManager, toHotkeyRegistrationView } from '@tanstack/hotkeys' import { useSelector } from './_useSelector' import type { HotkeyRegistrationView } from '@tanstack/hotkeys' @@ -19,7 +20,15 @@ import type { HotkeyRegistrationView } from '@tanstack/hotkeys' * ``` */ export function createHotkeyRegistrations(): () => Array { - return useSelector(getHotkeyManager().registrations, (state) => + const views = useSelector(getHotkeyManager().registrations, (state) => Array.from(state.values()).map(toHotkeyRegistrationView), ) + // Views are rebuilt on every change; reconciling them by id keeps each + // registration's identity, so `` rows update in place. + const [registrations] = createStore>( + () => views(), + [], + { key: 'id' }, + ) + return () => registrations } diff --git a/packages/solid-hotkeys/src/createHotkeys.ts b/packages/solid-hotkeys/src/createHotkeys.ts index 83dcf5ca..098dff92 100644 --- a/packages/solid-hotkeys/src/createHotkeys.ts +++ b/packages/solid-hotkeys/src/createHotkeys.ts @@ -1,4 +1,4 @@ -import { createEffect, onCleanup, untrack } from 'solid-js' +import { createEffect, onCleanup } from 'solid-js' import { createHotkeyBindings, prepareHotkeyDefinitions, @@ -50,21 +50,25 @@ export function createHotkeys( // Clean up only when this owner disposes, not before every effect re-run. onCleanup(() => bindings.destroy()) - createEffect(() => { - // Track app hotkeys so registrations move with custom hotkeys. - appHotkeys.state() - const definitions = prepareHotkeyDefinitions( - typeof hotkeys === 'function' ? hotkeys() : hotkeys, - { - appHotkeysStore: appHotkeys.store, - defaults: defaultOptions().hotkey, - commonOptions: - typeof commonOptions === 'function' ? commonOptions() : commonOptions, - // A null target skips registration until the element exists. - resolveTarget: (target) => target, - }, - ) - // Untrack store writes so registrations do not re-trigger this effect. - untrack(() => bindings.update(definitions)) - }) + createEffect( + () => { + // Track app hotkeys so registrations move with custom hotkeys. + appHotkeys.state() + return prepareHotkeyDefinitions( + typeof hotkeys === 'function' ? hotkeys() : hotkeys, + { + appHotkeysStore: appHotkeys.store, + defaults: defaultOptions().hotkey, + commonOptions: + typeof commonOptions === 'function' + ? commonOptions() + : commonOptions, + // A null target skips registration until the element exists. + resolveTarget: (target) => target, + }, + ) + }, + // The effect half is untracked, so registration writes do not re-run it. + (definitions) => bindings.update(definitions), + ) } diff --git a/packages/solid-hotkeys/tests/appHotkeys.test.tsx b/packages/solid-hotkeys/tests/appHotkeys.test.tsx index 22b542ea..93191694 100644 --- a/packages/solid-hotkeys/tests/appHotkeys.test.tsx +++ b/packages/solid-hotkeys/tests/appHotkeys.test.tsx @@ -1,3 +1,4 @@ +import { flush } from 'solid-js' // @vitest-environment happy-dom import { afterEach, describe, expect, it, vi } from 'vitest' import { cleanup, render } from '@solidjs/testing-library' @@ -11,7 +12,7 @@ import { import { createHotkey } from '../src/createHotkey' import { createHotkeys } from '../src/createHotkeys' import { createHotkeyRecorder } from '../src/createHotkeyRecorder' -import type { JSX } from 'solid-js' +import type { Element } from 'solid-js' import type { CustomHotkeys, Hotkey } from '@tanstack/hotkeys' const appHotkeys = defineAppHotkeys({ @@ -34,7 +35,7 @@ function registrations() { } function withProvider( - children: () => JSX.Element, + children: () => Element, props: { customHotkeys?: CustomHotkeys onCustomHotkeysChange?: (custom: CustomHotkeys) => void @@ -76,6 +77,7 @@ describe('app hotkeys', () => { custom.setCustomHotkey('doc.save', ['G', 'S']) custom.setCustomHotkey('palette.open', 'Mod+K') + flush() expect(registrations().map((r) => r.hotkey)).toEqual([['G', 'S'], 'Mod+K']) press('g') press('s') @@ -144,8 +146,10 @@ describe('createHotkeyRecorder', () => { }) recorder.startRecording() press('g', { code: 'KeyG' }) + flush() expect(recorder.steps()).toEqual(['G']) press('h', { code: 'KeyH' }) + flush() expect(onRecord).toHaveBeenCalledExactlyOnceWith(['G', 'H']) expect(recorder.recordedHotkey()).toEqual(['G', 'H']) }) diff --git a/packages/solid-hotkeys/tests/createHotkey.test.tsx b/packages/solid-hotkeys/tests/createHotkey.test.tsx index 56a4a1cd..05f01941 100644 --- a/packages/solid-hotkeys/tests/createHotkey.test.tsx +++ b/packages/solid-hotkeys/tests/createHotkey.test.tsx @@ -1,9 +1,10 @@ // @vitest-environment happy-dom -import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { render } from '@solidjs/testing-library' import { HotkeyManager } from '@tanstack/hotkeys' +import { createSignal, flush } from 'solid-js' import { createHotkey } from '../src/createHotkey' -import { createSignal, type Component } from 'solid-js' +import type { Component } from 'solid-js' describe('createHotkey', () => { beforeEach(() => { @@ -151,6 +152,7 @@ describe('createHotkey', () => { // Update state via button click (triggers re-run) getByRole('button').click() + flush() // Trigger hotkey again - count is now 5, callback uses count() for latest document.dispatchEvent( @@ -163,6 +165,7 @@ describe('createHotkey', () => { expect(capturedValues).toEqual([0, 5]) getByRole('button').click() + flush() document.dispatchEvent( new KeyboardEvent('keydown', { @@ -204,6 +207,7 @@ describe('createHotkey', () => { // Disable the hotkey getByRole('button').click() + flush() // Should not fire when disabled document.dispatchEvent( @@ -217,6 +221,7 @@ describe('createHotkey', () => { // Re-enable getByRole('button').click() + flush() document.dispatchEvent( new KeyboardEvent('keydown', { @@ -285,6 +290,7 @@ describe('createHotkey', () => { // Mount the target div getByTestId('mount-btn').click() + flush() // Now target is set. Dispatch on the target element for the hotkey to fire const targetEl = getByTestId('target') diff --git a/packages/solid-hotkeys/tests/createHotkeyHint.test.tsx b/packages/solid-hotkeys/tests/createHotkeyHint.test.tsx index 2f60aef9..bb3caa55 100644 --- a/packages/solid-hotkeys/tests/createHotkeyHint.test.tsx +++ b/packages/solid-hotkeys/tests/createHotkeyHint.test.tsx @@ -1,5 +1,5 @@ // @vitest-environment happy-dom -import { createRoot, createSignal } from 'solid-js' +import { createRoot, createSignal, flush } from 'solid-js' import { afterEach, expect, it } from 'vitest' import { HotkeyManager, KeyStateTracker } from '@tanstack/hotkeys' import { createHotkeyHint } from '../src/createHotkeyHint' @@ -13,28 +13,37 @@ it('reacts to held modifiers and changing bindings', () => { const manager = HotkeyManager.getInstance() const handle = manager.register('Alt+[KeyS]', () => {}) manager.register('Control+[KeyS]', () => {}) - createRoot((dispose) => { - const [binding, setBinding] = createSignal('Alt+[KeyS]') - const hint = createHotkeyHint(binding) - expect(hint()).toBe(false) - document.dispatchEvent( - new KeyboardEvent('keydown', { key: 'Alt', code: 'AltLeft' }), - ) - expect(hint()).toBe(true) - setBinding('Control+[KeyS]') - expect(hint()).toBe(false) - setBinding('Alt+[KeyS]') - expect(hint()).toBe(true) - handle.setOptions({ enabled: false }) - expect(hint()).toBe(false) - handle.setOptions({ enabled: true }) - expect(hint()).toBe(true) - const release = manager.activateScope('dialog', { exclusive: true }) - expect(hint()).toBe(false) - release() - expect(hint()).toBe(true) - window.dispatchEvent(new Event('blur')) - expect(hint()).toBe(false) - dispose() - }) + const [binding, setBinding] = createSignal('Alt+[KeyS]') + const { hint, dispose } = createRoot((dispose) => ({ + hint: createHotkeyHint(binding), + dispose, + })) + expect(hint()).toBe(false) + document.dispatchEvent( + new KeyboardEvent('keydown', { key: 'Alt', code: 'AltLeft' }), + ) + flush() + expect(hint()).toBe(true) + setBinding('Control+[KeyS]') + flush() + expect(hint()).toBe(false) + setBinding('Alt+[KeyS]') + flush() + expect(hint()).toBe(true) + handle.setOptions({ enabled: false }) + flush() + expect(hint()).toBe(false) + handle.setOptions({ enabled: true }) + flush() + expect(hint()).toBe(true) + const release = manager.activateScope('dialog', { exclusive: true }) + flush() + expect(hint()).toBe(false) + release() + flush() + expect(hint()).toBe(true) + window.dispatchEvent(new Event('blur')) + flush() + expect(hint()).toBe(false) + dispose() }) diff --git a/packages/solid-hotkeys/tests/createHotkeys-sequences.test.tsx b/packages/solid-hotkeys/tests/createHotkeys-sequences.test.tsx index 5de6bd57..cd40f5fb 100644 --- a/packages/solid-hotkeys/tests/createHotkeys-sequences.test.tsx +++ b/packages/solid-hotkeys/tests/createHotkeys-sequences.test.tsx @@ -2,9 +2,9 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { render } from '@solidjs/testing-library' import { HotkeyManager } from '@tanstack/hotkeys' -import { createSignal } from 'solid-js' -import type { Component } from 'solid-js' +import { createSignal, flush } from 'solid-js' import { createHotkeys } from '../src/createHotkeys' +import type { Component } from 'solid-js' import type { CreateHotkeyDefinition } from '../src/createHotkeys' function dispatchKey(key: string) { @@ -152,9 +152,11 @@ describe('createHotkeys', () => { expect(manager.getRegistrationCount()).toBe(1) setEnabled(false) + flush() expect([...manager.registrations.state.keys()][0]).toBe(idBefore) setEnabled(true) + flush() expect([...manager.registrations.state.keys()][0]).toBe(idBefore) }) @@ -180,6 +182,7 @@ describe('createHotkeys', () => { { hotkey: ['G', 'G'], callback: gg }, { hotkey: ['Y', 'Y'], callback: yy }, ]) + flush() dispatchKey('y') dispatchKey('y') diff --git a/packages/solid-hotkeys/tests/createHotkeys.test.tsx b/packages/solid-hotkeys/tests/createHotkeys.test.tsx index cd8bb0b3..d8fa98fc 100644 --- a/packages/solid-hotkeys/tests/createHotkeys.test.tsx +++ b/packages/solid-hotkeys/tests/createHotkeys.test.tsx @@ -1,12 +1,11 @@ // @vitest-environment happy-dom -import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { render } from '@solidjs/testing-library' import { HotkeyManager } from '@tanstack/hotkeys' -import { - createHotkeys, - type CreateHotkeyDefinition, -} from '../src/createHotkeys' -import { createSignal, type Component } from 'solid-js' +import { createSignal, flush } from 'solid-js' +import { createHotkeys } from '../src/createHotkeys' +import type { Component } from 'solid-js' +import type { CreateHotkeyDefinition } from '../src/createHotkeys' describe('createHotkeys', () => { beforeEach(() => { @@ -177,9 +176,11 @@ describe('createHotkeys', () => { expect(manager.getRegistrationCount()).toBe(1) setEnabled(false) + flush() expect([...manager.registrations.state.keys()][0]).toBe(idBefore) setEnabled(true) + flush() expect([...manager.registrations.state.keys()][0]).toBe(idBefore) }) @@ -217,6 +218,7 @@ describe('createHotkeys', () => { expect(manager.getRegistrationCount()).toBe(2) getByRole('button').click() + flush() expect(manager.getRegistrationCount()).toBe(2) diff --git a/packages/solid-hotkeys/tests/reactive-options.test.tsx b/packages/solid-hotkeys/tests/reactive-options.test.tsx index 67918a8c..f6d276c8 100644 --- a/packages/solid-hotkeys/tests/reactive-options.test.tsx +++ b/packages/solid-hotkeys/tests/reactive-options.test.tsx @@ -1,11 +1,12 @@ -import { createHotkeys } from '../src/createHotkeys' import { afterEach, expect, it, vi } from 'vitest' import { cleanup, render } from '@solidjs/testing-library' -import { createSignal } from 'solid-js' +import { createSignal, flush } from 'solid-js' import { HotkeyManager } from '@tanstack/hotkeys' +import { createHotkeys } from '../src/createHotkeys' import { createHotkey } from '../src/createHotkey' import { createHotkeyRecorder } from '../src/createHotkeyRecorder' import { HotkeysProvider } from '../src/HotkeysProvider' + const press = () => document.dispatchEvent( new KeyboardEvent('keydown', { key: 'a', bubbles: true }), @@ -29,6 +30,7 @@ it('updates a direct enabled property getter without user setOptions', () => { press() expect(callback).toHaveBeenCalledTimes(1) setEnabled(false) + flush() press() expect(callback).toHaveBeenCalledTimes(1) }) @@ -47,6 +49,7 @@ it('updates provider defaults when its options object is replaced', () => { press() expect(callback).toHaveBeenCalledTimes(1) setEnabled(false) + flush() press() expect(callback).toHaveBeenCalledTimes(1) }) @@ -67,6 +70,7 @@ it('updates an active recorder callback property getter', () => { render(() => ) recorder.startRecording() setCurrent(true) + flush() recorder.cancelRecording() expect(second).toHaveBeenCalledOnce() expect(first).not.toHaveBeenCalled() @@ -116,13 +120,16 @@ it('refreshes all provider option groups without replacing registrations or acti expect(override).toHaveBeenCalledOnce() single.startRecording() setEnabled(false) + flush() single.cancelRecording() sequence.startRecording() setEnabled(true) + flush() sequence.cancelRecording() expect(first).toHaveBeenCalledOnce() expect(second).toHaveBeenCalledOnce() setEnabled(false) + flush() invoke() expect(run).toHaveBeenCalledTimes(4) expect(override).toHaveBeenCalledTimes(2) diff --git a/packages/solid-hotkeys/tests/scopes.test.tsx b/packages/solid-hotkeys/tests/scopes.test.tsx index a6129100..ee05075e 100644 --- a/packages/solid-hotkeys/tests/scopes.test.tsx +++ b/packages/solid-hotkeys/tests/scopes.test.tsx @@ -1,13 +1,13 @@ // @vitest-environment happy-dom import { afterEach, describe, expect, it, vi } from 'vitest' import { cleanup, render } from '@solidjs/testing-library' -import { createSignal } from 'solid-js' +import { createSignal, flush } from 'solid-js' import { HotkeyManager, defineAppHotkeys } from '@tanstack/hotkeys' import { HotkeysProvider } from '../src/HotkeysProvider' import { createAppHotkeyList } from '../src/appHotkeys' import { createHotkey } from '../src/createHotkey' import { createHotkeyScopesState } from '../src/createHotkeyScopesState' -import type { JSX } from 'solid-js' +import type { Element } from 'solid-js' const appHotkeys = defineAppHotkeys({ 'doc.save': { hotkey: 'Mod+S' }, @@ -21,7 +21,7 @@ function press(key: string) { document.dispatchEvent(new KeyboardEvent('keyup', { key, bubbles: true })) } -function Root(props: { children: JSX.Element }) { +function Root(props: { children: Element }) { return ( { expect(calls()).toEqual([1, 0, 1]) setOpen(true) + flush() press('e') press('k') expect(calls()).toEqual([1, 1, 1]) setOpen(false) + flush() press('e') expect(calls()).toEqual([2, 1, 1]) }) @@ -173,6 +175,7 @@ describe('HotkeysProvider scopes', () => { )) const activate = vi.spyOn(HotkeyManager.getInstance(), 'activateScope') setAllow(['global']) + flush() expect(activate).not.toHaveBeenCalled() press('e') @@ -196,6 +199,7 @@ describe('HotkeysProvider scopes', () => { )) press('e') setEnabled(false) + flush() press('e') expect(save).toHaveBeenCalledTimes(1) expect(HotkeyManager.getInstance().isScopeActive('editor')).toBe(false) @@ -222,6 +226,7 @@ describe('HotkeysProvider scopes', () => { )) expect(list().map((item) => item.status)).toEqual(['active', 'active']) setOpen(true) + flush() expect(list().map((item) => item.status)).toEqual([ 'suspended', 'suspended', @@ -242,6 +247,7 @@ describe('HotkeysProvider scopes', () => { const release = HotkeyManager.getInstance().activateScope('dialog', { exclusive: true, }) + flush() expect(state()).toMatchObject({ active: ['dialog'], exclusive: 'dialog', @@ -250,6 +256,7 @@ describe('HotkeysProvider scopes', () => { expect(container.textContent).toBe('dialog') release() + flush() expect(state()).toMatchObject({ exclusive: null, suspended: [] }) expect(container.textContent).toBe('none') }) diff --git a/packages/solid-hotkeys/tsconfig.json b/packages/solid-hotkeys/tsconfig.json index 6bb0fd91..ce3ebb08 100644 --- a/packages/solid-hotkeys/tsconfig.json +++ b/packages/solid-hotkeys/tsconfig.json @@ -2,7 +2,7 @@ "extends": "../../tsconfig.json", "compilerOptions": { "jsx": "preserve", - "jsxImportSource": "solid-js" + "jsxImportSource": "@solidjs/web" }, "include": ["src", "vitest.config.ts", "tests"], "exclude": ["eslint.config.js"] diff --git a/packages/solid-hotkeys/tsdown.config.ts b/packages/solid-hotkeys/tsdown.config.ts index 08f5aca4..b3c9346a 100644 --- a/packages/solid-hotkeys/tsdown.config.ts +++ b/packages/solid-hotkeys/tsdown.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'tsdown' -import solid from 'vite-plugin-solid' +import solid from '@solidjs/vite-plugin' export default defineConfig({ plugins: [solid()], diff --git a/packages/solid-hotkeys/vitest.config.ts b/packages/solid-hotkeys/vitest.config.ts index 14c1a3ec..f55cc2ad 100644 --- a/packages/solid-hotkeys/vitest.config.ts +++ b/packages/solid-hotkeys/vitest.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vitest/config' -import solid from 'vite-plugin-solid' +import solid from '@solidjs/vite-plugin' import packageJson from './package.json' with { type: 'json' } export default defineConfig({ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77cef3ea..2be63f12 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -237,7 +237,7 @@ importers: version: 0.3.4(typescript@6.0.3) '@testing-library/jest-dom': specifier: ^7.0.1 - version: 7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@7.2.0))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))) + version: 7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@7.2.0))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))) '@types/node': specifier: ^26.6.4 version: 26.6.4 @@ -2766,41 +2766,38 @@ importers: examples/solid/createHeldKeys: dependencies: - '@tanstack/solid-devtools': - specifier: 0.8.14 - version: 0.8.14(csstype@3.2.3)(solid-js@1.9.15) + '@solidjs/web': + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20(solid-js@2.0.0-rc.20) '@tanstack/solid-hotkeys': specifier: workspace:* version: link:../../../packages/solid-hotkeys - '@tanstack/solid-hotkeys-devtools': - specifier: workspace:* - version: link:../../../packages/solid-hotkeys-devtools solid-js: - specifier: ^1.9.15 - version: 1.9.15 + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20 devDependencies: + '@solidjs/vite-plugin': + specifier: ^3.0.0-next.52 + version: 3.0.0-next.52(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@2.0.0-rc.20)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) vite: specifier: ^8.3.2 version: 8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2) - vite-plugin-solid: - specifier: ^2.11.14 - version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) examples/solid/createHotkey: dependencies: - '@tanstack/solid-devtools': - specifier: 0.8.14 - version: 0.8.14(csstype@3.2.3)(solid-js@1.9.15) + '@solidjs/web': + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20(solid-js@2.0.0-rc.20) '@tanstack/solid-hotkeys': specifier: workspace:* version: link:../../../packages/solid-hotkeys - '@tanstack/solid-hotkeys-devtools': - specifier: workspace:* - version: link:../../../packages/solid-hotkeys-devtools solid-js: - specifier: ^1.9.15 - version: 1.9.15 + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20 devDependencies: + '@solidjs/vite-plugin': + specifier: ^3.0.0-next.52 + version: 3.0.0-next.52(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@2.0.0-rc.20)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) '@types/node': specifier: ^26.6.4 version: 26.6.4 @@ -2810,91 +2807,79 @@ importers: vite: specifier: ^8.3.2 version: 8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2) - vite-plugin-solid: - specifier: ^2.11.14 - version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) examples/solid/createHotkey-sequences: dependencies: - '@tanstack/solid-devtools': - specifier: 0.8.14 - version: 0.8.14(csstype@3.2.3)(solid-js@1.9.15) + '@solidjs/web': + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20(solid-js@2.0.0-rc.20) '@tanstack/solid-hotkeys': specifier: workspace:* version: link:../../../packages/solid-hotkeys - '@tanstack/solid-hotkeys-devtools': - specifier: workspace:* - version: link:../../../packages/solid-hotkeys-devtools solid-js: - specifier: ^1.9.15 - version: 1.9.15 + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20 devDependencies: + '@solidjs/vite-plugin': + specifier: ^3.0.0-next.52 + version: 3.0.0-next.52(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1))))(solid-js@2.0.0-rc.20)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1)) vite: specifier: ^8.3.2 version: 8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1) - vite-plugin-solid: - specifier: ^2.11.14 - version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1)) examples/solid/createHotkeyRecorder: dependencies: - '@tanstack/solid-devtools': - specifier: 0.8.14 - version: 0.8.14(csstype@3.2.3)(solid-js@1.9.15) + '@solidjs/web': + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20(solid-js@2.0.0-rc.20) '@tanstack/solid-hotkeys': specifier: workspace:* version: link:../../../packages/solid-hotkeys - '@tanstack/solid-hotkeys-devtools': - specifier: workspace:* - version: link:../../../packages/solid-hotkeys-devtools solid-js: - specifier: ^1.9.15 - version: 1.9.15 + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20 devDependencies: + '@solidjs/vite-plugin': + specifier: ^3.0.0-next.52 + version: 3.0.0-next.52(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@2.0.0-rc.20)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) vite: specifier: ^8.3.2 version: 8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2) - vite-plugin-solid: - specifier: ^2.11.14 - version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) examples/solid/createHotkeyRecorder-sequences: dependencies: - '@tanstack/solid-devtools': - specifier: 0.8.14 - version: 0.8.14(csstype@3.2.3)(solid-js@1.9.15) + '@solidjs/web': + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20(solid-js@2.0.0-rc.20) '@tanstack/solid-hotkeys': specifier: workspace:* version: link:../../../packages/solid-hotkeys - '@tanstack/solid-hotkeys-devtools': - specifier: workspace:* - version: link:../../../packages/solid-hotkeys-devtools solid-js: - specifier: ^1.9.15 - version: 1.9.15 + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20 devDependencies: + '@solidjs/vite-plugin': + specifier: ^3.0.0-next.52 + version: 3.0.0-next.52(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1))))(solid-js@2.0.0-rc.20)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1)) vite: specifier: ^8.3.2 version: 8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1) - vite-plugin-solid: - specifier: ^2.11.14 - version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1)) examples/solid/createHotkeys: dependencies: - '@tanstack/solid-devtools': - specifier: 0.8.14 - version: 0.8.14(csstype@3.2.3)(solid-js@1.9.15) + '@solidjs/web': + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20(solid-js@2.0.0-rc.20) '@tanstack/solid-hotkeys': specifier: workspace:* version: link:../../../packages/solid-hotkeys - '@tanstack/solid-hotkeys-devtools': - specifier: workspace:* - version: link:../../../packages/solid-hotkeys-devtools solid-js: - specifier: ^1.9.15 - version: 1.9.15 + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20 devDependencies: + '@solidjs/vite-plugin': + specifier: ^3.0.0-next.52 + version: 3.0.0-next.52(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@2.0.0-rc.20)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) '@types/node': specifier: ^26.6.4 version: 26.6.4 @@ -2904,69 +2889,60 @@ importers: vite: specifier: ^8.3.2 version: 8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2) - vite-plugin-solid: - specifier: ^2.11.14 - version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) examples/solid/createHotkeys-sequences: dependencies: - '@tanstack/solid-devtools': - specifier: 0.8.14 - version: 0.8.14(csstype@3.2.3)(solid-js@1.9.15) + '@solidjs/web': + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20(solid-js@2.0.0-rc.20) '@tanstack/solid-hotkeys': specifier: workspace:* version: link:../../../packages/solid-hotkeys - '@tanstack/solid-hotkeys-devtools': - specifier: workspace:* - version: link:../../../packages/solid-hotkeys-devtools solid-js: - specifier: ^1.9.15 - version: 1.9.15 + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20 devDependencies: + '@solidjs/vite-plugin': + specifier: ^3.0.0-next.52 + version: 3.0.0-next.52(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1))))(solid-js@2.0.0-rc.20)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1)) vite: specifier: ^8.3.2 version: 8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1) - vite-plugin-solid: - specifier: ^2.11.14 - version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1)) examples/solid/createKeyHold: dependencies: - '@tanstack/solid-devtools': - specifier: 0.8.14 - version: 0.8.14(csstype@3.2.3)(solid-js@1.9.15) + '@solidjs/web': + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20(solid-js@2.0.0-rc.20) '@tanstack/solid-hotkeys': specifier: workspace:* version: link:../../../packages/solid-hotkeys - '@tanstack/solid-hotkeys-devtools': - specifier: workspace:* - version: link:../../../packages/solid-hotkeys-devtools solid-js: - specifier: ^1.9.15 - version: 1.9.15 + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20 devDependencies: + '@solidjs/vite-plugin': + specifier: ^3.0.0-next.52 + version: 3.0.0-next.52(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@2.0.0-rc.20)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) vite: specifier: ^8.3.2 version: 8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2) - vite-plugin-solid: - specifier: ^2.11.14 - version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) examples/solid/kitchen-sink: dependencies: - '@tanstack/solid-devtools': - specifier: 0.8.14 - version: 0.8.14(csstype@3.2.3)(solid-js@1.9.15) + '@solidjs/web': + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20(solid-js@2.0.0-rc.20) '@tanstack/solid-hotkeys': specifier: workspace:* version: link:../../../packages/solid-hotkeys - '@tanstack/solid-hotkeys-devtools': - specifier: workspace:* - version: link:../../../packages/solid-hotkeys-devtools solid-js: - specifier: ^1.9.15 - version: 1.9.15 + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20 devDependencies: + '@solidjs/vite-plugin': + specifier: ^3.0.0-next.52 + version: 3.0.0-next.52(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@2.0.0-rc.20)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) '@types/node': specifier: ^26.6.4 version: 26.6.4 @@ -2976,25 +2952,22 @@ importers: vite: specifier: ^8.3.2 version: 8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2) - vite-plugin-solid: - specifier: ^2.11.14 - version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) examples/solid/scopes: dependencies: - '@tanstack/solid-devtools': - specifier: 0.8.14 - version: 0.8.14(csstype@3.2.3)(solid-js@1.9.15) + '@solidjs/web': + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20(solid-js@2.0.0-rc.20) '@tanstack/solid-hotkeys': specifier: workspace:* version: link:../../../packages/solid-hotkeys - '@tanstack/solid-hotkeys-devtools': - specifier: workspace:* - version: link:../../../packages/solid-hotkeys-devtools solid-js: - specifier: ^1.9.15 - version: 1.9.15 + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20 devDependencies: + '@solidjs/vite-plugin': + specifier: ^3.0.0-next.52 + version: 3.0.0-next.52(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1))))(solid-js@2.0.0-rc.20)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1)) '@types/node': specifier: ^26.6.4 version: 26.6.4 @@ -3004,9 +2977,6 @@ importers: vite: specifier: ^8.3.2 version: 8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1) - vite-plugin-solid: - specifier: ^2.11.14 - version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1)) examples/svelte/create-hotkey: dependencies: @@ -3740,7 +3710,7 @@ importers: devDependencies: vite-plugin-solid: specifier: ^2.11.14 - version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) + version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) packages/lit-hotkeys: dependencies: @@ -3820,7 +3790,7 @@ importers: version: 0.11.2(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@testing-library/react': specifier: ^16.3.3 - version: 16.3.3(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + version: 16.3.3(@testing-library/dom@10.4.2)(@types/react-dom@19.2.3(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@types/react': specifier: ^19.3.0 version: 19.3.0 @@ -3884,17 +3854,20 @@ importers: version: link:../hotkeys devDependencies: '@solidjs/testing-library': - specifier: ^0.8.10 - version: 0.8.10(solid-js@1.9.15) + specifier: ^1.0.0-rc.2 + version: 1.0.0-rc.2(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(solid-js@2.0.0-rc.20) + '@solidjs/vite-plugin': + specifier: ^3.0.0-next.52 + version: 3.0.0-next.52(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@2.0.0-rc.20)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) + '@solidjs/web': + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20(solid-js@2.0.0-rc.20) '@testing-library/jest-dom': specifier: ^7.0.1 - version: 7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))) + version: 7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))) solid-js: - specifier: ^1.9.15 - version: 1.9.15 - vite-plugin-solid: - specifier: ^2.11.14 - version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) + specifier: ^2.0.0-rc.19 + version: 2.0.0-rc.20 packages/solid-hotkeys-devtools: dependencies: @@ -3913,7 +3886,7 @@ importers: version: 1.9.15 vite-plugin-solid: specifier: ^2.11.14 - version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) + version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) packages/svelte-hotkeys: dependencies: @@ -5568,6 +5541,9 @@ packages: '@emnapi/core@1.11.2': resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} + '@emnapi/core@1.11.3': + resolution: {integrity: sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==} + '@emnapi/core@1.4.5': resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} @@ -5577,6 +5553,9 @@ packages: '@emnapi/runtime@1.11.2': resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} + '@emnapi/runtime@1.4.5': resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} @@ -5589,6 +5568,9 @@ packages: '@emnapi/wasi-threads@1.2.2': resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + '@emnapi/wasi-threads@1.2.3': + resolution: {integrity: sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==} + '@esbuild/aix-ppc64@0.27.3': resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} engines: {node: '>=18'} @@ -8418,16 +8400,81 @@ packages: peerDependencies: solid-js: ^1.6.12 - '@solidjs/testing-library@0.8.10': - resolution: {integrity: sha512-qdeuIerwyq7oQTIrrKvV0aL9aFeuwTd86VYD3afdq5HYEwoox1OBTJy4y8A3TFZr8oAR0nujYgCzY/8wgHGfeQ==} + '@solidjs/babel-plugin@2.0.0-rc.20': + resolution: {integrity: sha512-/5GHINAOaUK+99N7qxkOgcBU2Fn9WhNfaJDg+q/M2gF9fmFqnQOiV+J8gU9gsnEHfiqZvH2vQ4WHxA0kl2OC5g==} + peerDependencies: + '@babel/core': ^7.20.12 || ^8.0.0 + '@tsrx/core': 0.1.63 + peerDependenciesMeta: + '@tsrx/core': + optional: true + + '@solidjs/compiler-darwin-arm64@2.0.0-rc.20': + resolution: {integrity: sha512-3bpcQmjNkzO0sthOEypc1Rmq+tfW9zVjmSSJsoHTl3MUDnxi65L7mHsPfIdo4nQntHqAps4ZEUFy77GqqocHDA==} + cpu: [arm64] + os: [darwin] + + '@solidjs/compiler-darwin-x64@2.0.0-rc.20': + resolution: {integrity: sha512-I2RI6oJkVxMUDPM6faIpd+rWK1hkpw+KlSfE8ZZnDeX+FKa+VlSHCk4EA16jHSCeo1IKxmW3x9cCSlHqzEZKvQ==} + cpu: [x64] + os: [darwin] + + '@solidjs/compiler-linux-arm64-gnu@2.0.0-rc.20': + resolution: {integrity: sha512-41KS1kvbhzQwE3ZEIgpAghVO6LVDVS98URL3rXOARudwTpaflEehNlxSH0RGr6E0UbaeFVfadkFnBOcuSLrMJg==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@solidjs/compiler-linux-x64-gnu@2.0.0-rc.20': + resolution: {integrity: sha512-YXb8f0HQqbW/YQvRhflSW1yd2sCdi22wIe7pRAdA6YuthnbJbOhxpUw4iBX/dis59aIE5uw8cg8fh8hH4iBpmg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@solidjs/compiler-wasm32-wasi@2.0.0-rc.20': + resolution: {integrity: sha512-V3ffCekMXznz3iMn08lrkipK9XzTbZumF5Wb3Xd1cMj+caCidz9AMAN0ZBx5XQ3dwyrZ3UfZM/gSkAOcq8LgHw==} + engines: {node: '>=14.0.0'} + + '@solidjs/compiler-win32-x64-msvc@2.0.0-rc.20': + resolution: {integrity: sha512-GBfYKI5WtIOk0SvYn70PeN6iDpqwJ8mQ9UdT/MxUnBE2UcIvyOv7+g+5mOBqfIHODWnsbLkzf9lk+JCw5gkogg==} + cpu: [x64] + os: [win32] + + '@solidjs/compiler@2.0.0-rc.20': + resolution: {integrity: sha512-veV/ZXim3UeX5Klelp3DiPwseR01/EX/K3i0iVdi+9EZfoRVVzoTIP7lTXP8hTng5/MsFaiZ4mqbDt/57IWHlg==} + + '@solidjs/signals@2.0.0-rc.20': + resolution: {integrity: sha512-BIL5dKm0dAtPGsCEuLSNw60spDbmYG5QFK+aHUxPIgPLweA8IeJKd62DiqqqU/jqX0x39ty31GoP1n+ZINkrcg==} + engines: {node: '>=22.12.0'} + + '@solidjs/testing-library@1.0.0-rc.2': + resolution: {integrity: sha512-QZqIVoyDAqaGgSsWQ3gnYGaG1peFkNF0/n5uM+393g5plZlcvgxmUgdjsQtwrRLVZCrh0K1lp7YHxsAlN5XPkA==} engines: {node: '>= 14'} peerDependencies: - '@solidjs/router': '>=0.9.0' - solid-js: '>=1.0.0' + '@solidjs/web': '>=2.0.0-0' + solid-js: '>=2.0.0-0' + + '@solidjs/vite-plugin@3.0.0-next.52': + resolution: {integrity: sha512-Dn4xLGdZxYOFOQpY/wISboBR6sYrfuN2Nxq+h56a6bspCqMq7hhpWYhQwwwo8RvsiVD2/T9o1U76pz/KJ1Wkgw==} + engines: {node: '>=22.12.0'} + peerDependencies: + '@solidjs/start-devtools': ^1.0.0-next.2 + '@solidjs/web': ^2.0.0-rc.19 + '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.0.0 || ^7.0.0 + solid-js: ^2.0.0-rc.19 + vite: ^8.0.0 || ^9.0.0 peerDependenciesMeta: - '@solidjs/router': + '@solidjs/start-devtools': + optional: true + '@testing-library/jest-dom': optional: true + '@solidjs/web@2.0.0-rc.20': + resolution: {integrity: sha512-ACGUZ1XBNxiHnWW274na+1JZfuIhiS/BN5XM72wVKNYSopR/NyjVPR4O/nvshtbYlEk1lKJ9d1uBaXDaz6ddYg==} + engines: {node: '>=22.12.0'} + peerDependencies: + solid-js: ^2.0.0-rc.20 + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -8592,8 +8639,8 @@ packages: resolution: {integrity: sha512-9u41nAP8vLTkF6yO/AwFyzTljhOvQMOyuDXh2KqDKwMVG6OVtr+1YFA76I0fx8kyecrhzd1o7k8VQCzq6M8gqA==} engines: {node: '>=18'} - '@testing-library/dom@10.4.1': - resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + '@testing-library/dom@10.4.2': + resolution: {integrity: sha512-yzr2S9HyAIdhz2/6qHgbs665Q7PKVcDF05vsOlHPxG1mo36gKVesdYVeDLnXgfjJ03CrKRk08knc6+E/9m8v2Q==} engines: {node: '>=18'} '@testing-library/dom@8.20.1': @@ -13579,6 +13626,12 @@ packages: peerDependencies: seroval: ^1.0 + seroval-plugins@1.7.0: + resolution: {integrity: sha512-WM4rArfPtLZriTuxC5DBvNulEwAaRcjNe/dkMOEesOcuvXf5nEwKf5Bw3AT92WHohqcc45+57GdtsCuBTI0mjw==} + engines: {node: '>=20'} + peerDependencies: + seroval: ^1.0 + seroval@1.5.6: resolution: {integrity: sha512-rVQVWjjSvlINzaQPZH5JFqsqEsIWdTxY3iJZCnTL/5gQbXIRooVZKI60tVCkOVfzcRPejboxO2t0P89dg5mQaA==} engines: {node: '>=10'} @@ -13587,6 +13640,10 @@ packages: resolution: {integrity: sha512-HlSgSAkTk4EqHcje1ptJjfZi1YDv5KbhVJ/d3P7T/nAXua2VmDu+AKDX5VTdFfZf48nDkWB2TKYt0DrCSa+3wg==} engines: {node: '>=10'} + seroval@1.7.0: + resolution: {integrity: sha512-FU+LUkmDzWNsJ6oubZFN3dGPKny53DRhPJG6nftEaXDL8MIn19+kEE1Gvc+63Go+qPOwVUlKIdKhsu2HN6tksw==} + engines: {node: '>=20'} + serve-index@1.9.2: resolution: {integrity: sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==} engines: {node: '>= 0.8.0'} @@ -13739,6 +13796,10 @@ packages: solid-js@1.9.15: resolution: {integrity: sha512-EeiY2xfpZJqPLjXspVEKjAII4yv8NyG//NxZ3IpOFHdUNnnTyL0uJOeS9LWGvA7cFCz5y94cjFwYlmw5Luncsg==} + solid-js@2.0.0-rc.20: + resolution: {integrity: sha512-FxaEI7LHupehFoR9j2CfJAGCoRgiKgeNlzii4szUS6lnD8RkpdtvX1k6WFG71vl5bskXRRsmEQVAXsbIemQOuw==} + engines: {node: '>=22.12.0'} + solid-refresh@0.6.3: resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} peerDependencies: @@ -17367,6 +17428,12 @@ snapshots: '@emnapi/wasi-threads': 1.2.2 tslib: 2.8.1 + '@emnapi/core@1.11.3': + dependencies: + '@emnapi/wasi-threads': 1.2.3 + tslib: 2.8.1 + optional: true + '@emnapi/core@1.4.5': dependencies: '@emnapi/wasi-threads': 1.0.4 @@ -17381,6 +17448,11 @@ snapshots: dependencies: tslib: 2.8.1 + '@emnapi/runtime@1.11.3': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.4.5': dependencies: tslib: 2.8.1 @@ -17398,6 +17470,11 @@ snapshots: dependencies: tslib: 2.8.1 + '@emnapi/wasi-threads@1.2.3': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild/aix-ppc64@0.27.3': optional: true @@ -18410,6 +18487,13 @@ snapshots: '@tybys/wasm-util': 0.10.4 optional: true + '@napi-rs/wasm-runtime@1.2.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)': + dependencies: + '@emnapi/core': 1.11.3 + '@emnapi/runtime': 1.11.3 + '@tybys/wasm-util': 0.10.4 + optional: true + '@neodrag/core@3.0.0-next.11': {} '@neodrag/solid@3.0.0-next.11(@neodrag/core@3.0.0-next.11)(solid-js@1.9.15)': @@ -19551,10 +19635,95 @@ snapshots: dependencies: solid-js: 1.9.15 - '@solidjs/testing-library@0.8.10(solid-js@1.9.15)': + '@solidjs/babel-plugin@2.0.0-rc.20(@babel/core@7.29.7(supports-color@8.1.1))': dependencies: - '@testing-library/dom': 10.4.1 - solid-js: 1.9.15 + '@babel/core': 7.29.7(supports-color@8.1.1) + '@babel/helper-module-imports': 7.18.6 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.7(supports-color@8.1.1)) + '@babel/types': 7.29.8 + html-entities: 2.3.3 + parse5: 7.3.0 + + '@solidjs/compiler-darwin-arm64@2.0.0-rc.20': + optional: true + + '@solidjs/compiler-darwin-x64@2.0.0-rc.20': + optional: true + + '@solidjs/compiler-linux-arm64-gnu@2.0.0-rc.20': + optional: true + + '@solidjs/compiler-linux-x64-gnu@2.0.0-rc.20': + optional: true + + '@solidjs/compiler-wasm32-wasi@2.0.0-rc.20': + dependencies: + '@emnapi/core': 1.11.3 + '@emnapi/runtime': 1.11.3 + '@napi-rs/wasm-runtime': 1.2.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) + optional: true + + '@solidjs/compiler-win32-x64-msvc@2.0.0-rc.20': + optional: true + + '@solidjs/compiler@2.0.0-rc.20': + optionalDependencies: + '@solidjs/compiler-darwin-arm64': 2.0.0-rc.20 + '@solidjs/compiler-darwin-x64': 2.0.0-rc.20 + '@solidjs/compiler-linux-arm64-gnu': 2.0.0-rc.20 + '@solidjs/compiler-linux-x64-gnu': 2.0.0-rc.20 + '@solidjs/compiler-wasm32-wasi': 2.0.0-rc.20 + '@solidjs/compiler-win32-x64-msvc': 2.0.0-rc.20 + + '@solidjs/signals@2.0.0-rc.20': {} + + '@solidjs/testing-library@1.0.0-rc.2(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(solid-js@2.0.0-rc.20)': + dependencies: + '@solidjs/web': 2.0.0-rc.20(solid-js@2.0.0-rc.20) + '@testing-library/dom': 10.4.2 + solid-js: 2.0.0-rc.20 + + '@solidjs/vite-plugin@3.0.0-next.52(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@2.0.0-rc.20)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/core': 7.29.7(supports-color@8.1.1) + '@solidjs/babel-plugin': 2.0.0-rc.20(@babel/core@7.29.7(supports-color@8.1.1)) + '@solidjs/compiler': 2.0.0-rc.20 + '@solidjs/web': 2.0.0-rc.20(solid-js@2.0.0-rc.20) + '@types/babel__core': 7.20.5 + merge-anything: 5.1.7 + solid-js: 2.0.0-rc.20 + vite: 8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2) + vitefu: 1.1.2(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) + optionalDependencies: + '@testing-library/jest-dom': 7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))) + transitivePeerDependencies: + - '@tsrx/core' + - supports-color + + '@solidjs/vite-plugin@3.0.0-next.52(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1))))(solid-js@2.0.0-rc.20)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/core': 7.29.7(supports-color@8.1.1) + '@solidjs/babel-plugin': 2.0.0-rc.20(@babel/core@7.29.7(supports-color@8.1.1)) + '@solidjs/compiler': 2.0.0-rc.20 + '@solidjs/web': 2.0.0-rc.20(solid-js@2.0.0-rc.20) + '@types/babel__core': 7.20.5 + merge-anything: 5.1.7 + solid-js: 2.0.0-rc.20 + vite: 8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1) + vitefu: 1.1.2(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1)) + optionalDependencies: + '@testing-library/jest-dom': 7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1))) + transitivePeerDependencies: + - '@tsrx/core' + - supports-color + + '@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20)': + dependencies: + seroval: 1.7.0 + seroval-plugins: 1.7.0(seroval@1.7.0) + solid-js: 2.0.0-rc.20 '@standard-schema/spec@1.1.0': {} @@ -19827,7 +19996,7 @@ snapshots: - solid-js - utf-8-validate - '@testing-library/dom@10.4.1': + '@testing-library/dom@10.4.2': dependencies: '@babel/code-frame': 7.29.7 '@babel/runtime': 7.29.7 @@ -19849,10 +20018,10 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@7.2.0))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)))': + '@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@7.2.0))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)))': dependencies: '@adobe/css-tools': 4.4.4 - '@testing-library/dom': 10.4.1 + '@testing-library/dom': 10.4.2 aria-query: 5.3.2 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 @@ -19861,10 +20030,10 @@ snapshots: optionalDependencies: vitest: 5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@7.2.0))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) - '@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)))': + '@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)))': dependencies: '@adobe/css-tools': 4.4.4 - '@testing-library/dom': 10.4.1 + '@testing-library/dom': 10.4.2 aria-query: 5.3.2 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 @@ -19873,10 +20042,10 @@ snapshots: optionalDependencies: vitest: 5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) - '@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1)))': + '@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1)))': dependencies: '@adobe/css-tools': 4.4.4 - '@testing-library/dom': 10.4.1 + '@testing-library/dom': 10.4.2 aria-query: 5.3.2 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 @@ -19891,10 +20060,10 @@ snapshots: '@testing-library/dom': 8.20.1 preact: 11.0.1 - '@testing-library/react@16.3.3(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + '@testing-library/react@16.3.3(@testing-library/dom@10.4.2)(@types/react-dom@19.2.3(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: '@babel/runtime': 7.29.2 - '@testing-library/dom': 10.4.1 + '@testing-library/dom': 10.4.2 react: 19.3.0 react-dom: 19.3.0(react@19.3.0) optionalDependencies: @@ -25849,10 +26018,16 @@ snapshots: dependencies: seroval: 1.6.8 + seroval-plugins@1.7.0(seroval@1.7.0): + dependencies: + seroval: 1.7.0 + seroval@1.5.6: {} seroval@1.6.8: {} + seroval@1.7.0: {} + serve-index@1.9.2(supports-color@8.1.1): dependencies: accepts: 1.3.8 @@ -26037,6 +26212,13 @@ snapshots: seroval: 1.5.6 seroval-plugins: 1.5.6(seroval@1.5.6) + solid-js@2.0.0-rc.20: + dependencies: + '@solidjs/signals': 2.0.0-rc.20 + csstype: 3.2.3 + seroval: 1.7.0 + seroval-plugins: 1.7.0(seroval@1.7.0) + solid-refresh@0.6.3(solid-js@1.9.15)(supports-color@8.1.1): dependencies: '@babel/generator': 7.29.1 @@ -26681,7 +26863,7 @@ snapshots: verkit@0.4.1: {} - vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)): + vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)): dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@types/babel__core': 7.20.5 @@ -26692,22 +26874,7 @@ snapshots: vite: 8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2) vitefu: 1.1.2(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) optionalDependencies: - '@testing-library/jest-dom': 7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))) - transitivePeerDependencies: - - supports-color - - vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1))))(solid-js@1.9.15)(supports-color@8.1.1)(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1)): - dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) - '@types/babel__core': 7.20.5 - babel-preset-solid: 1.9.10(@babel/core@7.29.0(supports-color@8.1.1))(solid-js@1.9.15) - merge-anything: 5.1.7 - solid-js: 1.9.15 - solid-refresh: 0.6.3(solid-js@1.9.15)(supports-color@8.1.1) - vite: 8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1) - vitefu: 1.1.2(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1)) - optionalDependencies: - '@testing-library/jest-dom': 7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.6.1)(less@4.9.1(supports-color@8.1.1))(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(yaml@2.9.1))) + '@testing-library/jest-dom': 7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.3(@types/node@26.6.4)(happy-dom@20.14.5)(jsdom@25.0.1(supports-color@8.1.1))(vite@8.3.2(@types/node@26.6.4)(esbuild@0.28.0)(jiti@2.6.1)(less@4.4.2)(sass-embedded@1.104.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))) transitivePeerDependencies: - supports-color