From 252164a4c29a31325cf3bf38a0480d5f082d887e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?=
Date: Thu, 19 Feb 2026 23:26:19 -0300
Subject: [PATCH 01/11] feat: add angular adapter
---
examples/angular/injectHeldKeys/angular.json | 1 +
examples/angular/injectHeldKeys/package.json | 1 +
.../injectHeldKeys/src/app/app.component.css | 3 +
.../injectHeldKeys/src/app/app.component.html | 83 +
.../injectHeldKeys/src/app/app.component.ts | 40 +
.../injectHeldKeys/src/app/app.config.ts | 9 +
.../angular/injectHeldKeys/src/index.html | 13 +
examples/angular/injectHeldKeys/src/main.ts | 5 +
.../angular/injectHeldKeys/src/styles.css | 122 +
examples/angular/injectHeldKeys/tsconfig.json | 1 +
examples/angular/injectHotkey/angular.json | 124 +
examples/angular/injectHotkey/package.json | 39 +
.../injectHotkey/src/app/app.component.html | 271 +
.../injectHotkey/src/app/app.component.ts | 302 +
.../injectHotkey/src/app/app.config.ts | 9 +
examples/angular/injectHotkey/src/index.html | 14 +
examples/angular/injectHotkey/src/main.ts | 6 +
examples/angular/injectHotkey/src/styles.css | 212 +
examples/angular/injectHotkey/tsconfig.json | 28 +
.../angular/injectHotkeyRecorder/angular.json | 1 +
.../angular/injectHotkeyRecorder/package.json | 1 +
.../src/app/app.component.css | 3 +
.../src/app/app.component.html | 64 +
.../src/app/app.component.ts | 153 +
.../src/app/app.config.ts | 9 +
.../src/app/shortcut-list-item.component.css | 3 +
.../src/app/shortcut-list-item.component.html | 38 +
.../src/app/shortcut-list-item.component.ts | 24 +
.../injectHotkeyRecorder/src/index.html | 13 +
.../angular/injectHotkeyRecorder/src/main.ts | 5 +
.../injectHotkeyRecorder/src/styles.css | 224 +
.../injectHotkeyRecorder/tsconfig.json | 1 +
.../angular/injectHotkeySequence/angular.json | 1 +
.../angular/injectHotkeySequence/package.json | 1 +
.../src/app/app.component.css | 3 +
.../src/app/app.component.html | 108 +
.../src/app/app.component.ts | 63 +
.../src/app/app.config.ts | 9 +
.../injectHotkeySequence/src/index.html | 13 +
.../angular/injectHotkeySequence/src/main.ts | 5 +
.../injectHotkeySequence/src/styles.css | 117 +
.../injectHotkeySequence/tsconfig.json | 1 +
examples/angular/injectKeyHold/angular.json | 1 +
examples/angular/injectKeyHold/package.json | 1 +
.../injectKeyHold/src/app/app.component.css | 3 +
.../injectKeyHold/src/app/app.component.html | 74 +
.../injectKeyHold/src/app/app.component.ts | 16 +
.../injectKeyHold/src/app/app.config.ts | 9 +
examples/angular/injectKeyHold/src/index.html | 13 +
examples/angular/injectKeyHold/src/main.ts | 5 +
examples/angular/injectKeyHold/src/styles.css | 114 +
examples/angular/injectKeyHold/tsconfig.json | 1 +
package.json | 3 +-
packages/angular-hotkeys/README.md | 333 +
packages/angular-hotkeys/package.json | 66 +
.../angular-hotkeys/src/hotkeys-provider.ts | 36 +
packages/angular-hotkeys/src/index.ts | 13 +
.../angular-hotkeys/src/injectHeldKeyCodes.ts | 31 +
.../angular-hotkeys/src/injectHeldKeys.ts | 26 +
packages/angular-hotkeys/src/injectHotkey.ts | 156 +
.../src/injectHotkeyRecorder.ts | 92 +
.../src/injectHotkeySequence.ts | 87 +
packages/angular-hotkeys/src/injectKeyHold.ts | 53 +
packages/angular-hotkeys/tsconfig.docs.json | 9 +
packages/angular-hotkeys/tsconfig.json | 10 +
packages/angular-hotkeys/tsdown.config.ts | 16 +
pnpm-lock.yaml | 9375 +++++++++++++++--
scripts/generate-docs.ts | 12 +
68 files changed, 11853 insertions(+), 845 deletions(-)
create mode 100644 examples/angular/injectHeldKeys/angular.json
create mode 100644 examples/angular/injectHeldKeys/package.json
create mode 100644 examples/angular/injectHeldKeys/src/app/app.component.css
create mode 100644 examples/angular/injectHeldKeys/src/app/app.component.html
create mode 100644 examples/angular/injectHeldKeys/src/app/app.component.ts
create mode 100644 examples/angular/injectHeldKeys/src/app/app.config.ts
create mode 100644 examples/angular/injectHeldKeys/src/index.html
create mode 100644 examples/angular/injectHeldKeys/src/main.ts
create mode 100644 examples/angular/injectHeldKeys/src/styles.css
create mode 100644 examples/angular/injectHeldKeys/tsconfig.json
create mode 100644 examples/angular/injectHotkey/angular.json
create mode 100644 examples/angular/injectHotkey/package.json
create mode 100644 examples/angular/injectHotkey/src/app/app.component.html
create mode 100644 examples/angular/injectHotkey/src/app/app.component.ts
create mode 100644 examples/angular/injectHotkey/src/app/app.config.ts
create mode 100644 examples/angular/injectHotkey/src/index.html
create mode 100644 examples/angular/injectHotkey/src/main.ts
create mode 100644 examples/angular/injectHotkey/src/styles.css
create mode 100644 examples/angular/injectHotkey/tsconfig.json
create mode 100644 examples/angular/injectHotkeyRecorder/angular.json
create mode 100644 examples/angular/injectHotkeyRecorder/package.json
create mode 100644 examples/angular/injectHotkeyRecorder/src/app/app.component.css
create mode 100644 examples/angular/injectHotkeyRecorder/src/app/app.component.html
create mode 100644 examples/angular/injectHotkeyRecorder/src/app/app.component.ts
create mode 100644 examples/angular/injectHotkeyRecorder/src/app/app.config.ts
create mode 100644 examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.css
create mode 100644 examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.html
create mode 100644 examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.ts
create mode 100644 examples/angular/injectHotkeyRecorder/src/index.html
create mode 100644 examples/angular/injectHotkeyRecorder/src/main.ts
create mode 100644 examples/angular/injectHotkeyRecorder/src/styles.css
create mode 100644 examples/angular/injectHotkeyRecorder/tsconfig.json
create mode 100644 examples/angular/injectHotkeySequence/angular.json
create mode 100644 examples/angular/injectHotkeySequence/package.json
create mode 100644 examples/angular/injectHotkeySequence/src/app/app.component.css
create mode 100644 examples/angular/injectHotkeySequence/src/app/app.component.html
create mode 100644 examples/angular/injectHotkeySequence/src/app/app.component.ts
create mode 100644 examples/angular/injectHotkeySequence/src/app/app.config.ts
create mode 100644 examples/angular/injectHotkeySequence/src/index.html
create mode 100644 examples/angular/injectHotkeySequence/src/main.ts
create mode 100644 examples/angular/injectHotkeySequence/src/styles.css
create mode 100644 examples/angular/injectHotkeySequence/tsconfig.json
create mode 100644 examples/angular/injectKeyHold/angular.json
create mode 100644 examples/angular/injectKeyHold/package.json
create mode 100644 examples/angular/injectKeyHold/src/app/app.component.css
create mode 100644 examples/angular/injectKeyHold/src/app/app.component.html
create mode 100644 examples/angular/injectKeyHold/src/app/app.component.ts
create mode 100644 examples/angular/injectKeyHold/src/app/app.config.ts
create mode 100644 examples/angular/injectKeyHold/src/index.html
create mode 100644 examples/angular/injectKeyHold/src/main.ts
create mode 100644 examples/angular/injectKeyHold/src/styles.css
create mode 100644 examples/angular/injectKeyHold/tsconfig.json
create mode 100644 packages/angular-hotkeys/README.md
create mode 100644 packages/angular-hotkeys/package.json
create mode 100644 packages/angular-hotkeys/src/hotkeys-provider.ts
create mode 100644 packages/angular-hotkeys/src/index.ts
create mode 100644 packages/angular-hotkeys/src/injectHeldKeyCodes.ts
create mode 100644 packages/angular-hotkeys/src/injectHeldKeys.ts
create mode 100644 packages/angular-hotkeys/src/injectHotkey.ts
create mode 100644 packages/angular-hotkeys/src/injectHotkeyRecorder.ts
create mode 100644 packages/angular-hotkeys/src/injectHotkeySequence.ts
create mode 100644 packages/angular-hotkeys/src/injectKeyHold.ts
create mode 100644 packages/angular-hotkeys/tsconfig.docs.json
create mode 100644 packages/angular-hotkeys/tsconfig.json
create mode 100644 packages/angular-hotkeys/tsdown.config.ts
diff --git a/examples/angular/injectHeldKeys/angular.json b/examples/angular/injectHeldKeys/angular.json
new file mode 100644
index 0000000..2c5ae93
--- /dev/null
+++ b/examples/angular/injectHeldKeys/angular.json
@@ -0,0 +1 @@
+{"$schema":"./node_modules/@angular/cli/lib/config/schema.json","version":1,"newProjectRoot":"projects","projects":{"injectHeldKeys":{"projectType":"application","schematics":{"@schematics/angular:class":{"skipTests":true},"@schematics/angular:component":{"skipTests":true}},"root":"","sourceRoot":"src","prefix":"app","architect":{"build":{"builder":"@angular-devkit/build-angular:application","options":{"outputPath":"dist/inject-held-keys","index":"src/index.html","browser":"src/main.ts","polyfills":["zone.js"],"tsConfig":"tsconfig.json","assets":[],"styles":["src/styles.css"],"scripts":[]},"configurations":{"production":{"budgets":[{"type":"initial","maximumWarning":"500kB","maximumError":"1MB"}],"outputHashing":"all"},"development":{"optimization":false,"extractLicenses":false,"sourceMap":true}},"defaultConfiguration":"production"},"serve":{"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"injectHeldKeys:build:production"},"development":{"buildTarget":"injectHeldKeys:build:development"}},"defaultConfiguration":"development"}}}},"cli":{"analytics":false}}
diff --git a/examples/angular/injectHeldKeys/package.json b/examples/angular/injectHeldKeys/package.json
new file mode 100644
index 0000000..fc4ab7d
--- /dev/null
+++ b/examples/angular/injectHeldKeys/package.json
@@ -0,0 +1 @@
+{"name":"inject-held-keys","version":"0.0.0","scripts":{"ng":"ng","start":"ng serve --port=3071","dev":"ng serve --port=3071","build":"ng build","watch":"ng build --watch --configuration development","test":"ng test"},"private":true,"dependencies":{"@tanstack/angular-hotkeys":"workspace:*","@angular/common":"^19.2.0","@angular/compiler":"^19.2.0","@angular/core":"^19.2.0","@angular/forms":"^19.2.0","@angular/platform-browser":"^19.2.0","@angular/platform-browser-dynamic":"^19.2.0","@angular/router":"^19.2.0","rxjs":"~7.8.0","tslib":"^2.3.0","zone.js":"~0.15.0"},"devDependencies":{"@angular-devkit/build-angular":"^19.2.20","@angular/cli":"^19.2.20","@angular/compiler-cli":"^19.2.0","@types/jasmine":"~5.1.0","jasmine-core":"~5.6.0","karma":"~6.4.0","karma-chrome-launcher":"~3.2.0","karma-coverage":"~2.2.0","karma-jasmine":"~5.1.0","karma-jasmine-html-reporter":"~2.1.0","typescript":"~5.7.2"}}
diff --git a/examples/angular/injectHeldKeys/src/app/app.component.css b/examples/angular/injectHeldKeys/src/app/app.component.css
new file mode 100644
index 0000000..5d4e87f
--- /dev/null
+++ b/examples/angular/injectHeldKeys/src/app/app.component.css
@@ -0,0 +1,3 @@
+:host {
+ display: block;
+}
diff --git a/examples/angular/injectHeldKeys/src/app/app.component.html b/examples/angular/injectHeldKeys/src/app/app.component.html
new file mode 100644
index 0000000..9c4c7ea
--- /dev/null
+++ b/examples/angular/injectHeldKeys/src/app/app.component.html
@@ -0,0 +1,83 @@
+
+
+
+
+
+ Currently Held Keys
+
+ @if (heldKeys().length > 0) {
+ @for (key of heldKeys(); track key; let i = $index) {
+ @if (i > 0) {
+ +
+ }
+
+ {{ formatKey(key) }}
+ @if (heldCodes()[key] && heldCodes()[key] !== key) {
+
+ {{ formatKey(heldCodes()[key], { source: 'code' }) }}
+
+ }
+
+ }
+ } @else {
+ Press any keys...
+ }
+
+
+ Keys held: {{ heldKeys().length }}
+
+
+
+
+ Usage
+ import {{ '{' }} injectHeldKeys {{ '}' }} from '@tanstack/angular-hotkeys'
+
+@Component({{ '{' }} ... {{ '}' }})
+export class KeyDisplayComponent {{ '{' }}
+ heldKeys = injectHeldKeys()
+
+ // Template: Currently pressed: {{ '{{' }} heldKeys().join(' + ') || 'None' {{ '}}' }}
+{{ '}' }}
+
+
+
+ Try These Combinations
+
+ Hold Shift + Control + A
+ Press multiple letter keys at once
+ Hold modifiers and watch them appear
+ Release keys one by one
+
+
+
+
+ Recent Combinations
+ @if (history().length > 0) {
+
+ @for (combo of history(); track combo) {
+ {{ combo }}
+ }
+
+ } @else {
+ Press some key combinations...
+ }
+ Clear History
+
+
+
+ Use Cases
+
+ Building a keyboard shortcut recorder
+ Displaying currently held keys to users
+ Debugging keyboard input
+ Creating key combination tutorials
+
+
+
+
diff --git a/examples/angular/injectHeldKeys/src/app/app.component.ts b/examples/angular/injectHeldKeys/src/app/app.component.ts
new file mode 100644
index 0000000..b1180c0
--- /dev/null
+++ b/examples/angular/injectHeldKeys/src/app/app.component.ts
@@ -0,0 +1,40 @@
+import { Component, effect, signal } from '@angular/core';
+import {
+ formatKeyForDebuggingDisplay,
+ injectHeldKeys,
+ injectHeldKeyCodes,
+} from '@tanstack/angular-hotkeys';
+
+@Component({
+ selector: 'app-root',
+ standalone: true,
+ templateUrl: './app.component.html',
+ styleUrl: './app.component.css',
+})
+export class AppComponent {
+ heldKeys = injectHeldKeys();
+ heldCodes = injectHeldKeyCodes();
+ history = signal([]);
+ formatKey = formatKeyForDebuggingDisplay;
+
+ constructor() {
+ effect(() => {
+ const keys = this.heldKeys();
+ if (keys.length > 0) {
+ const combo = keys
+ .map((k) => formatKeyForDebuggingDisplay(k))
+ .join(' + ');
+ this.history.update((h) => {
+ if (h[h.length - 1] !== combo) {
+ return [...h.slice(-9), combo];
+ }
+ return h;
+ });
+ }
+ });
+ }
+
+ clearHistory(): void {
+ this.history.set([]);
+ }
+}
diff --git a/examples/angular/injectHeldKeys/src/app/app.config.ts b/examples/angular/injectHeldKeys/src/app/app.config.ts
new file mode 100644
index 0000000..b3ea09d
--- /dev/null
+++ b/examples/angular/injectHeldKeys/src/app/app.config.ts
@@ -0,0 +1,9 @@
+import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
+import { provideHotkeys } from '@tanstack/angular-hotkeys';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ provideZoneChangeDetection({ eventCoalescing: true }),
+ provideHotkeys(),
+ ],
+};
diff --git a/examples/angular/injectHeldKeys/src/index.html b/examples/angular/injectHeldKeys/src/index.html
new file mode 100644
index 0000000..013b58b
--- /dev/null
+++ b/examples/angular/injectHeldKeys/src/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ injectHeldKeys - TanStack Hotkeys Angular Example
+
+
+
+
+
+
diff --git a/examples/angular/injectHeldKeys/src/main.ts b/examples/angular/injectHeldKeys/src/main.ts
new file mode 100644
index 0000000..17447a5
--- /dev/null
+++ b/examples/angular/injectHeldKeys/src/main.ts
@@ -0,0 +1,5 @@
+import { bootstrapApplication } from '@angular/platform-browser';
+import { appConfig } from './app/app.config';
+import { AppComponent } from './app/app.component';
+
+bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));
diff --git a/examples/angular/injectHeldKeys/src/styles.css b/examples/angular/injectHeldKeys/src/styles.css
new file mode 100644
index 0000000..889bc48
--- /dev/null
+++ b/examples/angular/injectHeldKeys/src/styles.css
@@ -0,0 +1,122 @@
+* {
+ box-sizing: border-box;
+}
+body {
+ margin: 0;
+ font-family:
+ system-ui,
+ -apple-system,
+ sans-serif;
+ background: #f5f5f5;
+ color: #333;
+}
+.app {
+ max-width: 800px;
+ margin: 0 auto;
+ padding: 20px;
+}
+header h1 {
+ margin: 0 0 10px;
+ color: #0066cc;
+}
+header p {
+ color: #666;
+ margin: 0;
+ max-width: 500px;
+ margin: 0 auto;
+}
+.demo-section {
+ background: white;
+ border-radius: 12px;
+ padding: 24px;
+ margin-bottom: 24px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+}
+.demo-section h2 {
+ margin: 0 0 16px;
+ font-size: 20px;
+}
+.demo-section ul {
+ margin: 0;
+ padding-left: 20px;
+}
+.demo-section li {
+ margin-bottom: 8px;
+}
+kbd {
+ background: linear-gradient(180deg, #f8f8f8 0%, #e8e8e8 100%);
+ border: 1px solid #ccc;
+ border-bottom-width: 2px;
+ border-radius: 4px;
+ padding: 2px 8px;
+ font-family: monospace;
+ font-size: 13px;
+}
+kbd.large {
+ font-size: 24px;
+ padding: 8px 16px;
+ display: inline-flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 2px;
+}
+.key-display {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 12px;
+ min-height: 80px;
+ flex-wrap: wrap;
+ background: #f8f9fa;
+ border-radius: 8px;
+ padding: 20px;
+}
+.key-display .plus {
+ font-size: 24px;
+ color: #666;
+}
+.placeholder {
+ color: #999;
+ font-style: italic;
+}
+.stats {
+ text-align: center;
+ margin-top: 16px;
+ font-size: 16px;
+ color: #666;
+}
+.code-block {
+ background: #1e1e1e;
+ color: #d4d4d4;
+ padding: 16px;
+ border-radius: 8px;
+ overflow-x: auto;
+ font-size: 13px;
+}
+.history-list {
+ list-style: none;
+ padding: 0;
+ margin: 0 0 16px;
+}
+.history-list li {
+ padding: 8px 12px;
+ background: #f0f0f0;
+ border-radius: 4px;
+ margin-bottom: 4px;
+ font-family: monospace;
+ font-size: 14px;
+}
+button {
+ background: #0066cc;
+ color: white;
+ border: none;
+ padding: 10px 20px;
+ border-radius: 6px;
+ cursor: pointer;
+}
+.code-label {
+ display: block;
+ font-size: 11px;
+ opacity: 0.8;
+ margin-top: 2px;
+}
diff --git a/examples/angular/injectHeldKeys/tsconfig.json b/examples/angular/injectHeldKeys/tsconfig.json
new file mode 100644
index 0000000..6a37648
--- /dev/null
+++ b/examples/angular/injectHeldKeys/tsconfig.json
@@ -0,0 +1 @@
+{"compileOnSave":false,"compilerOptions":{"outDir":"./out-tsc/app","lib":["ES2022","dom"],"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"skipLibCheck":true,"isolatedModules":true,"esModuleInterop":true,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","types":[]},"angularCompilerOptions":{"enableI18nLegacyMessageIdFormat":false,"strictInjectionParameters":true,"strictInputAccessModifiers":true,"strictTemplates":true},"files":["src/main.ts"],"include":["src/**/*.d.ts"]}
diff --git a/examples/angular/injectHotkey/angular.json b/examples/angular/injectHotkey/angular.json
new file mode 100644
index 0000000..1b769d3
--- /dev/null
+++ b/examples/angular/injectHotkey/angular.json
@@ -0,0 +1,124 @@
+{
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+ "version": 1,
+ "newProjectRoot": "projects",
+ "projects": {
+ "injectHotkey": {
+ "projectType": "application",
+ "schematics": {
+ "@schematics/angular:class": {
+ "skipTests": true
+ },
+ "@schematics/angular:component": {
+ "skipTests": true
+ },
+ "@schematics/angular:directive": {
+ "skipTests": true
+ },
+ "@schematics/angular:guard": {
+ "skipTests": true
+ },
+ "@schematics/angular:interceptor": {
+ "skipTests": true
+ },
+ "@schematics/angular:pipe": {
+ "skipTests": true
+ },
+ "@schematics/angular:resolver": {
+ "skipTests": true
+ },
+ "@schematics/angular:service": {
+ "skipTests": true
+ }
+ },
+ "root": "",
+ "sourceRoot": "src",
+ "prefix": "app",
+ "architect": {
+ "build": {
+ "builder": "@angular-devkit/build-angular:application",
+ "options": {
+ "outputPath": "dist/inject-hotkey",
+ "index": "src/index.html",
+ "browser": "src/main.ts",
+ "polyfills": [
+ "zone.js"
+ ],
+ "tsConfig": "tsconfig.json",
+ "assets": [
+ {
+ "glob": "**/*",
+ "input": "public"
+ }
+ ],
+ "styles": [
+ "src/styles.css"
+ ],
+ "scripts": []
+ },
+ "configurations": {
+ "production": {
+ "budgets": [
+ {
+ "type": "initial",
+ "maximumWarning": "500kB",
+ "maximumError": "1MB"
+ },
+ {
+ "type": "anyComponentStyle",
+ "maximumWarning": "4kB",
+ "maximumError": "8kB"
+ }
+ ],
+ "outputHashing": "all"
+ },
+ "development": {
+ "optimization": false,
+ "extractLicenses": false,
+ "sourceMap": true
+ }
+ },
+ "defaultConfiguration": "production"
+ },
+ "serve": {
+ "builder": "@angular-devkit/build-angular:dev-server",
+ "configurations": {
+ "production": {
+ "buildTarget": "injectHotkey:build:production"
+ },
+ "development": {
+ "buildTarget": "injectHotkey:build:development"
+ }
+ },
+ "defaultConfiguration": "development"
+ },
+ "extract-i18n": {
+ "builder": "@angular-devkit/build-angular:extract-i18n"
+ },
+ "test": {
+ "builder": "@angular-devkit/build-angular:karma",
+ "options": {
+ "polyfills": [
+ "zone.js",
+ "zone.js/testing"
+ ],
+ "tsConfig": "tsconfig.spec.json",
+ "assets": [
+ {
+ "glob": "**/*",
+ "input": "public"
+ }
+ ],
+ "styles": [
+ "src/styles.css"
+ ],
+ "scripts": []
+ }
+ }
+ }
+ }
+ },
+ "cli": {
+ "analytics": false
+ }
+}
diff --git a/examples/angular/injectHotkey/package.json b/examples/angular/injectHotkey/package.json
new file mode 100644
index 0000000..be1d28a
--- /dev/null
+++ b/examples/angular/injectHotkey/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "inject-hotkey",
+ "version": "0.0.0",
+ "scripts": {
+ "ng": "ng",
+ "start": "ng serve --port=3070",
+ "dev": "ng serve --port=3070",
+ "build": "ng build",
+ "watch": "ng build --watch --configuration development",
+ "test": "ng test"
+ },
+ "private": true,
+ "dependencies": {
+ "@tanstack/angular-hotkeys": "workspace:*",
+ "@angular/common": "^19.2.0",
+ "@angular/compiler": "^19.2.0",
+ "@angular/core": "^19.2.0",
+ "@angular/forms": "^19.2.0",
+ "@angular/platform-browser": "^19.2.0",
+ "@angular/platform-browser-dynamic": "^19.2.0",
+ "@angular/router": "^19.2.0",
+ "rxjs": "~7.8.0",
+ "tslib": "^2.3.0",
+ "zone.js": "~0.15.0"
+ },
+ "devDependencies": {
+ "@angular-devkit/build-angular": "^19.2.20",
+ "@angular/cli": "^19.2.20",
+ "@angular/compiler-cli": "^19.2.0",
+ "@types/jasmine": "~5.1.0",
+ "jasmine-core": "~5.6.0",
+ "karma": "~6.4.0",
+ "karma-chrome-launcher": "~3.2.0",
+ "karma-coverage": "~2.2.0",
+ "karma-jasmine": "~5.1.0",
+ "karma-jasmine-html-reporter": "~2.1.0",
+ "typescript": "~5.7.2"
+ }
+}
\ No newline at end of file
diff --git a/examples/angular/injectHotkey/src/app/app.component.html b/examples/angular/injectHotkey/src/app/app.component.html
new file mode 100644
index 0000000..9c55689
--- /dev/null
+++ b/examples/angular/injectHotkey/src/app/app.component.html
@@ -0,0 +1,271 @@
+
+
+
+
+
+ Basic Hotkey
+ Press {{ formatForDisplay('Mod+S') }} to trigger
+ Save triggered: {{ saveCount() }}x
+ injectHotkey('Mod+S', (_event, { hotkey, parsedHotkey }) => {
+ console.log('Hotkey:', hotkey)
+ console.log('Parsed:', parsedHotkey)
+})
+
+
+
+ With requireReset
+
+ Hold {{ formatForDisplay('Mod+K') }} — only increments once
+ until you release all keys
+
+ Increment: {{ incrementCount() }}
+
+ This prevents repeated triggering while holding the keys down. Release
+ all keys to allow re-triggering.
+
+ injectHotkey(
+ 'Mod+K',
+ (event, { hotkey }) => {
+ this.incrementCount.update(c => c + 1)
+ },
+ { requireReset: true }
+)
+
+
+
+ Conditional Hotkey
+
+ {{ formatForDisplay('Mod+E') }} is currently
+ {{ enabled() ? 'enabled' : 'disabled' }}
+
+
+ {{ enabled() ? 'Disable' : 'Enable' }} Hotkey
+
+ protected readonly enabled = signal(true)
+protected readonly modEOptions = computed(() => ({ enabled: this.enabled() }))
+
+injectHotkey(
+ 'Mod+E',
+ (event, { hotkey }) => { alert('Triggered!') },
+ this.modEOptions
+)
+
+
+
+ Number Key Combinations
+ Common for tab/section switching:
+
+
{{ formatForDisplay('Mod+1') }} → Tab 1
+
{{ formatForDisplay('Mod+2') }} → Tab 2
+
{{ formatForDisplay('Mod+3') }} → Tab 3
+
{{ formatForDisplay('Mod+4') }} → Tab 4
+
{{ formatForDisplay('Mod+5') }} → Tab 5
+
+ Active Tab: {{ activeTab() }}
+ injectHotkey('Mod+1', () => this.activeTab.set(1))
+injectHotkey('Mod+2', () => this.activeTab.set(2))
+
+
+
+ Navigation Key Combinations
+ Selection and navigation shortcuts:
+
+
{{ formatForDisplay('Shift+ArrowUp') }} — Select up
+
{{ formatForDisplay('Shift+ArrowDown') }} — Select down
+
{{ formatForDisplay('Alt+ArrowLeft') }} — Navigate back
+
{{ formatForDisplay('Alt+ArrowRight') }} — Navigate forward
+
{{ formatForDisplay('Mod+Home') }} — Go to start
+
{{ formatForDisplay('Mod+End') }} — Go to end
+
{{ formatForDisplay('Control+PageUp') }} — Previous page
+
{{ formatForDisplay('Control+PageDown') }} — Next page
+
+ Navigation triggered: {{ navigationCount() }}x
+ injectHotkey('Shift+ArrowUp', () => selectUp())
+injectHotkey('Alt+ArrowLeft', () => navigateBack())
+injectHotkey('Mod+Home', () => goToStart())
+injectHotkey('Control+PageUp', () => previousPage())
+
+
+
+ Function Key Combinations
+ System and application shortcuts:
+
+
{{ formatForDisplay('Alt+F4') }} — Close window
+
{{ formatForDisplay('Control+F5') }} — Hard refresh
+
{{ formatForDisplay('Mod+F1') }} — Help
+
{{ formatForDisplay('Shift+F10') }} — Context menu
+
{{ formatForDisplay('F12') }} — DevTools
+
+ Function keys triggered: {{ functionKeyCount() }}x
+ injectHotkey('Alt+F4', () => closeWindow())
+injectHotkey('Control+F5', () => hardRefresh())
+injectHotkey('Mod+F1', () => showHelp())
+injectHotkey('F12', () => openDevTools())
+
+
+
+ Multi-Modifier Combinations
+ Complex shortcuts with multiple modifiers:
+
+
{{ formatForDisplay('Mod+Shift+S') }} — Save As
+
{{ formatForDisplay('Mod+Shift+Z') }} — Redo
+
{{ formatForDisplay('Control+Alt+A') }} — Special action
+
{{ formatForDisplay('Control+Shift+N') }} — New incognito
+
{{ formatForDisplay('Mod+Alt+T') }} — Toggle theme
+
{{ formatForDisplay('Control+Alt+Shift+X') }} — Triple modifier
+
+ Multi-modifier triggered: {{ multiModifierCount() }}x
+ injectHotkey('Mod+Shift+S', () => saveAs())
+injectHotkey('Mod+Shift+Z', () => redo())
+injectHotkey('Control+Alt+A', () => specialAction())
+injectHotkey('Control+Alt+Shift+X', () => complexAction())
+
+
+
+ Editing Key Combinations
+ Text editing and form shortcuts:
+
+
{{ formatForDisplay('Mod+Enter') }} — Submit form
+
{{ formatForDisplay('Shift+Enter') }} — New line
+
{{ formatForDisplay('Mod+Backspace') }} — Delete word
+
{{ formatForDisplay('Mod+Delete') }} — Delete forward
+
{{ formatForDisplay('Control+Tab') }} — Next tab
+
{{ formatForDisplay('Shift+Tab') }} — Previous field
+
{{ formatForDisplay('Mod+Space') }} — Toggle
+
+ Editing keys triggered: {{ editingKeyCount() }}x
+ injectHotkey('Mod+Enter', () => submitForm())
+injectHotkey('Shift+Enter', () => insertNewline())
+injectHotkey('Mod+Backspace', () => deleteWord())
+injectHotkey('Control+Tab', () => nextTab())
+injectHotkey('Mod+Space', () => toggle())
+
+
+ @if (lastHotkey()) {
+
+ Last triggered: {{ formatForDisplay(lastHotkey()!) }}
+
+ }
+
+ Press Escape to reset all counters
+
+
+ Scoped Keyboard Shortcuts
+
+ Shortcuts can be scoped to specific DOM elements using the
+ target option. Use a getter for reactive targets (like Solid):
+ () => ({ target: this.sidebarRef()?.nativeElement ?? null })
+
+
+
+
+
Sidebar (Scoped Area)
+
Click here to focus, then try:
+
+
+ {{ formatForDisplay('Mod+B') }} — Trigger sidebar action
+
+
+ {{ formatForDisplay('Mod+N') }} — New item
+
+
+
Sidebar shortcuts: {{ sidebarShortcutCount() }}x
+
+ These shortcuts only work when this sidebar area is focused or contains focus.
+
+
+
+
+
Modal Dialog
+
Open Modal
+ @if (modalOpen()) {
+
+
+
Modal Dialog (Scoped)
+
Try these shortcuts while modal is open:
+
+
+ {{ formatForDisplay('Escape') }} — Close modal
+
+
+ {{ formatForDisplay('Mod+Enter') }} — Submit
+
+
+
Modal shortcuts: {{ modalShortcutCount() }}x
+
+ These shortcuts only work when the modal is open and focused. The
+ Escape key here won't conflict with the global Escape handler.
+
+
Close
+
+
+ }
+
+
+
+
Text Editor (Scoped)
+
Focus the editor below and try:
+
+
+ {{ formatForDisplay('Mod+S') }} — Save editor content
+
+
+ {{ formatForDisplay('Mod+/') }} — Add comment
+
+
+ {{ formatForDisplay('Mod+K') }} — Clear editor
+
+
+
+
Editor shortcuts: {{ editorShortcutCount() }}x
+
+ These shortcuts only work when the editor is focused. Notice that
+ {{ formatForDisplay('Mod+S') }} here doesn't conflict with
+ the global {{ formatForDisplay('Mod+S') }} shortcut.
+
+
+
+
+ // Scoped to viewChild (Solid-style getter, like Solid's () => ({ target: ref() }))
+private readonly sidebarRef = viewChild<ElementRef<HTMLDivElement>>('sidebarRef')
+
+injectHotkey(
+ 'Mod+B',
+ () => console.log('Sidebar shortcut!'),
+ () => ({ target: this.sidebarRef()?.nativeElement ?? null })
+)
+
+// Scoped to modal (only when open)
+injectHotkey(
+ 'Escape',
+ () => this.modalOpen.set(false),
+ () => ({ target: this.modalRef()?.nativeElement ?? null, enabled: this.modalOpen() })
+)
+
+// Scoped to editor
+injectHotkey(
+ 'Mod+S',
+ () => saveEditorContent(),
+ () => ({ target: this.editorRef()?.nativeElement ?? null })
+)
+
+
+
diff --git a/examples/angular/injectHotkey/src/app/app.component.ts b/examples/angular/injectHotkey/src/app/app.component.ts
new file mode 100644
index 0000000..e4c06fc
--- /dev/null
+++ b/examples/angular/injectHotkey/src/app/app.component.ts
@@ -0,0 +1,302 @@
+import { Component, ElementRef, signal, viewChild } from '@angular/core';
+import {
+ formatForDisplay,
+ injectHotkey,
+ type Hotkey,
+} from '@tanstack/angular-hotkeys';
+
+@Component({
+ selector: 'app-root',
+ standalone: true,
+ imports: [],
+ templateUrl: './app.component.html',
+})
+export class AppComponent {
+ protected readonly lastHotkey = signal(null);
+ protected readonly saveCount = signal(0);
+ protected readonly incrementCount = signal(0);
+ protected readonly enabled = signal(true);
+ protected readonly activeTab = signal(1);
+ protected readonly navigationCount = signal(0);
+ protected readonly functionKeyCount = signal(0);
+ protected readonly multiModifierCount = signal(0);
+ protected readonly editingKeyCount = signal(0);
+
+ protected readonly modalOpen = signal(false);
+ protected readonly editorContent = signal('');
+ protected readonly sidebarShortcutCount = signal(0);
+ protected readonly modalShortcutCount = signal(0);
+ protected readonly editorShortcutCount = signal(0);
+
+ private readonly sidebarRef = viewChild>('sidebarRef');
+ private readonly modalRef = viewChild>('modalRef');
+ private readonly editorRef = viewChild>('editorRef');
+
+ constructor() {
+ injectHotkey('Mod+S', (_event, { hotkey }) => {
+ this.lastHotkey.set(hotkey);
+ this.saveCount.update((c) => c + 1);
+ });
+
+ injectHotkey(
+ 'Mod+K',
+ (_event, { hotkey }) => {
+ this.lastHotkey.set(hotkey);
+ this.incrementCount.update((c) => c + 1);
+ },
+ { requireReset: true },
+ );
+
+ injectHotkey(
+ 'Mod+E',
+ (_event, { hotkey }) => {
+ this.lastHotkey.set(hotkey);
+ alert('This hotkey can be toggled!');
+ },
+ () => ({ enabled: this.enabled() }),
+ );
+
+ injectHotkey('Mod+1', () => {
+ this.lastHotkey.set('Mod+1');
+ this.activeTab.set(1);
+ });
+ injectHotkey('Mod+2', () => {
+ this.lastHotkey.set('Mod+2');
+ this.activeTab.set(2);
+ });
+ injectHotkey('Mod+3', () => {
+ this.lastHotkey.set('Mod+3');
+ this.activeTab.set(3);
+ });
+ injectHotkey('Mod+4', () => {
+ this.lastHotkey.set('Mod+4');
+ this.activeTab.set(4);
+ });
+ injectHotkey('Mod+5', () => {
+ this.lastHotkey.set('Mod+5');
+ this.activeTab.set(5);
+ });
+
+ injectHotkey('Shift+ArrowUp', () => {
+ this.lastHotkey.set('Shift+ArrowUp');
+ this.navigationCount.update((c) => c + 1);
+ });
+ injectHotkey('Shift+ArrowDown', () => {
+ this.lastHotkey.set('Shift+ArrowDown');
+ this.navigationCount.update((c) => c + 1);
+ });
+ injectHotkey('Alt+ArrowLeft', () => {
+ this.lastHotkey.set('Alt+ArrowLeft');
+ this.navigationCount.update((c) => c + 1);
+ });
+ injectHotkey('Alt+ArrowRight', () => {
+ this.lastHotkey.set('Alt+ArrowRight');
+ this.navigationCount.update((c) => c + 1);
+ });
+ injectHotkey('Mod+Home', () => {
+ this.lastHotkey.set('Mod+Home');
+ this.navigationCount.update((c) => c + 1);
+ });
+ injectHotkey('Mod+End', () => {
+ this.lastHotkey.set('Mod+End');
+ this.navigationCount.update((c) => c + 1);
+ });
+ injectHotkey('Control+PageUp', () => {
+ this.lastHotkey.set('Control+PageUp');
+ this.navigationCount.update((c) => c + 1);
+ });
+ injectHotkey('Control+PageDown', () => {
+ this.lastHotkey.set('Control+PageDown');
+ this.navigationCount.update((c) => c + 1);
+ });
+
+ injectHotkey('Meta+F4', () => {
+ this.lastHotkey.set('Alt+F4');
+ this.functionKeyCount.update((c) => c + 1);
+ alert('Alt+F4 pressed (normally closes window)');
+ });
+ injectHotkey('Control+F5', () => {
+ this.lastHotkey.set('Control+F5');
+ this.functionKeyCount.update((c) => c + 1);
+ });
+ injectHotkey('Mod+F1', () => {
+ this.lastHotkey.set('Mod+F1');
+ this.functionKeyCount.update((c) => c + 1);
+ });
+ injectHotkey('Shift+F10', () => {
+ this.lastHotkey.set('Shift+F10');
+ this.functionKeyCount.update((c) => c + 1);
+ });
+
+ injectHotkey('Mod+Shift+S', () => {
+ this.lastHotkey.set('Mod+Shift+S');
+ this.multiModifierCount.update((c) => c + 1);
+ });
+ injectHotkey('Mod+Shift+Z', () => {
+ this.lastHotkey.set('Mod+Shift+Z');
+ this.multiModifierCount.update((c) => c + 1);
+ });
+ injectHotkey({ key: 'A', ctrl: true, alt: true }, () => {
+ this.lastHotkey.set('Control+Alt+A');
+ this.multiModifierCount.update((c) => c + 1);
+ });
+ injectHotkey('Control+Shift+N', () => {
+ this.lastHotkey.set('Control+Shift+N');
+ this.multiModifierCount.update((c) => c + 1);
+ });
+ injectHotkey('Mod+Alt+T', () => {
+ this.lastHotkey.set('Mod+Alt+T');
+ this.multiModifierCount.update((c) => c + 1);
+ });
+ injectHotkey('Control+Alt+Shift+X', () => {
+ this.lastHotkey.set('Control+Alt+Shift+X');
+ this.multiModifierCount.update((c) => c + 1);
+ });
+
+ injectHotkey('Mod+Enter', () => {
+ this.lastHotkey.set('Mod+Enter');
+ this.editingKeyCount.update((c) => c + 1);
+ });
+ injectHotkey('Shift+Enter', () => {
+ this.lastHotkey.set('Shift+Enter');
+ this.editingKeyCount.update((c) => c + 1);
+ });
+ injectHotkey('Mod+Backspace', () => {
+ this.lastHotkey.set('Mod+Backspace');
+ this.editingKeyCount.update((c) => c + 1);
+ });
+ injectHotkey('Mod+Delete', () => {
+ this.lastHotkey.set('Mod+Delete');
+ this.editingKeyCount.update((c) => c + 1);
+ });
+ injectHotkey('Control+Tab', () => {
+ this.lastHotkey.set('Control+Tab');
+ this.editingKeyCount.update((c) => c + 1);
+ });
+ injectHotkey('Shift+Tab', () => {
+ this.lastHotkey.set('Shift+Tab');
+ this.editingKeyCount.update((c) => c + 1);
+ });
+ injectHotkey('Mod+Space', () => {
+ this.lastHotkey.set('Mod+Space');
+ this.editingKeyCount.update((c) => c + 1);
+ });
+
+ injectHotkey({ key: 'Escape' }, () => {
+ this.lastHotkey.set(null);
+ this.saveCount.set(0);
+ this.incrementCount.set(0);
+ this.navigationCount.set(0);
+ this.functionKeyCount.set(0);
+ this.multiModifierCount.set(0);
+ this.editingKeyCount.set(0);
+ this.activeTab.set(1);
+ });
+ injectHotkey('F12', () => {
+ this.lastHotkey.set('F12');
+ this.functionKeyCount.update((c) => c + 1);
+ });
+
+ // Scoped: sidebar (Solid-style getter)
+ injectHotkey(
+ 'Mod+B',
+ () => {
+ this.lastHotkey.set('Mod+B');
+ this.sidebarShortcutCount.update((c) => c + 1);
+ alert(
+ 'Sidebar shortcut triggered! This only works when the sidebar area is focused.',
+ );
+ },
+ () => ({ target: this.sidebarRef()?.nativeElement ?? null }),
+ );
+ injectHotkey(
+ 'Mod+N',
+ () => {
+ this.lastHotkey.set('Mod+N');
+ this.sidebarShortcutCount.update((c) => c + 1);
+ },
+ () => ({ target: this.sidebarRef()?.nativeElement ?? null }),
+ );
+
+ // Scoped: modal (Solid-style getter)
+ injectHotkey(
+ 'Escape',
+ () => {
+ this.lastHotkey.set('Escape');
+ this.modalShortcutCount.update((c) => c + 1);
+ this.modalOpen.set(false);
+ },
+ () => ({
+ target: this.modalRef()?.nativeElement ?? null,
+ enabled: this.modalOpen(),
+ }),
+ );
+ injectHotkey(
+ 'Mod+Enter',
+ () => {
+ this.lastHotkey.set('Mod+Enter');
+ this.modalShortcutCount.update((c) => c + 1);
+ alert('Modal submit shortcut!');
+ },
+ () => ({
+ target: this.modalRef()?.nativeElement ?? null,
+ enabled: this.modalOpen(),
+ }),
+ );
+
+ // Scoped: editor (Solid-style getter)
+ injectHotkey(
+ 'Mod+S',
+ () => {
+ this.lastHotkey.set('Mod+S');
+ this.editorShortcutCount.update((c) => c + 1);
+ const content = this.editorContent();
+ alert(
+ `Editor content saved: "${content.substring(0, 50)}${content.length > 50 ? '...' : ''}"`,
+ );
+ },
+ () => ({ target: this.editorRef()?.nativeElement ?? null }),
+ );
+ injectHotkey(
+ 'Mod+/',
+ () => {
+ this.lastHotkey.set('Mod+/');
+ this.editorShortcutCount.update((c) => c + 1);
+ this.editorContent.update((prev) => prev + '\n// Comment added via shortcut');
+ },
+ () => ({ target: this.editorRef()?.nativeElement ?? null }),
+ );
+ injectHotkey(
+ 'Mod+K',
+ () => {
+ this.lastHotkey.set('Mod+K');
+ this.editorShortcutCount.update((c) => c + 1);
+ this.editorContent.set('');
+ },
+ () => ({ target: this.editorRef()?.nativeElement ?? null }),
+ );
+ }
+
+ protected formatForDisplay = formatForDisplay;
+
+ protected openModal(): void {
+ this.modalOpen.set(true);
+ }
+
+ protected closeModal(): void {
+ this.modalOpen.set(false);
+ }
+
+ protected closeModalOverlay(): void {
+ this.modalOpen.set(false);
+ }
+
+ protected onModalContentClick(event: Event): void {
+ event.stopPropagation();
+ }
+
+ protected onEditorInput(event: Event): void {
+ const el = event.target as HTMLTextAreaElement;
+ this.editorContent.set(el.value);
+ }
+}
diff --git a/examples/angular/injectHotkey/src/app/app.config.ts b/examples/angular/injectHotkey/src/app/app.config.ts
new file mode 100644
index 0000000..b3ea09d
--- /dev/null
+++ b/examples/angular/injectHotkey/src/app/app.config.ts
@@ -0,0 +1,9 @@
+import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
+import { provideHotkeys } from '@tanstack/angular-hotkeys';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ provideZoneChangeDetection({ eventCoalescing: true }),
+ provideHotkeys(),
+ ],
+};
diff --git a/examples/angular/injectHotkey/src/index.html b/examples/angular/injectHotkey/src/index.html
new file mode 100644
index 0000000..32ee4ef
--- /dev/null
+++ b/examples/angular/injectHotkey/src/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ injectHotkey - TanStack Hotkeys Angular Example
+
+
+
+
+
+
+
diff --git a/examples/angular/injectHotkey/src/main.ts b/examples/angular/injectHotkey/src/main.ts
new file mode 100644
index 0000000..35b00f3
--- /dev/null
+++ b/examples/angular/injectHotkey/src/main.ts
@@ -0,0 +1,6 @@
+import { bootstrapApplication } from '@angular/platform-browser';
+import { appConfig } from './app/app.config';
+import { AppComponent } from './app/app.component';
+
+bootstrapApplication(AppComponent, appConfig)
+ .catch((err) => console.error(err));
diff --git a/examples/angular/injectHotkey/src/styles.css b/examples/angular/injectHotkey/src/styles.css
new file mode 100644
index 0000000..e9f3ca9
--- /dev/null
+++ b/examples/angular/injectHotkey/src/styles.css
@@ -0,0 +1,212 @@
+* {
+ box-sizing: border-box;
+}
+body {
+ margin: 0;
+ font-family:
+ system-ui,
+ -apple-system,
+ sans-serif;
+ background: #f5f5f5;
+ color: #333;
+}
+.app {
+ max-width: 800px;
+ margin: 0 auto;
+ padding: 20px;
+}
+header {
+ text-align: center;
+ margin-bottom: 40px;
+}
+header h1 {
+ margin: 0 0 10px;
+ color: #0066cc;
+}
+header p {
+ color: #666;
+ margin: 0;
+}
+.demo-section {
+ background: white;
+ border-radius: 12px;
+ padding: 24px;
+ margin-bottom: 24px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+}
+.demo-section h2 {
+ margin: 0 0 12px;
+ font-size: 20px;
+}
+.demo-section p {
+ margin: 0 0 12px;
+}
+kbd {
+ background: linear-gradient(180deg, #f8f8f8 0%, #e8e8e8 100%);
+ border: 1px solid #ccc;
+ border-bottom-width: 2px;
+ border-radius: 4px;
+ padding: 2px 8px;
+ font-family: monospace;
+ font-size: 13px;
+}
+.counter {
+ font-size: 28px;
+ font-weight: bold;
+ color: #0066cc;
+ margin: 16px 0;
+}
+.hint {
+ font-size: 13px;
+ color: #888;
+ font-style: italic;
+}
+.info-box {
+ background: #e3f2fd;
+ border-radius: 8px;
+ padding: 12px 16px;
+ margin: 20px 0;
+}
+button {
+ background: #0066cc;
+ color: white;
+ border: none;
+ padding: 10px 20px;
+ border-radius: 6px;
+ cursor: pointer;
+ font-size: 14px;
+}
+button:hover {
+ background: #0052a3;
+}
+.code-block {
+ background: #1e1e1e;
+ color: #d4d4d4;
+ padding: 16px;
+ border-radius: 8px;
+ overflow-x: auto;
+ font-size: 13px;
+ line-height: 1.5;
+ margin-top: 16px;
+}
+.hotkey-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
+ gap: 12px;
+ margin: 16px 0;
+}
+.hotkey-grid > div {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 8px 12px;
+ background: #f8f9fa;
+ border-radius: 6px;
+ font-size: 14px;
+}
+.hotkey-grid kbd {
+ flex-shrink: 0;
+}
+
+/* Scoped shortcuts section */
+.scoped-section {
+ margin-top: 40px;
+}
+
+.scoped-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
+ gap: 24px;
+ margin: 24px 0;
+}
+
+.scoped-area {
+ background: #f8f9fa;
+ border: 2px dashed #0066cc;
+ border-radius: 8px;
+ padding: 20px;
+ position: relative;
+}
+
+.scoped-area:focus-within {
+ border-color: #0052a3;
+ border-style: solid;
+ background: #f0f7ff;
+ box-shadow: 0 0 0 3px rgba(0, 102, 204, 0.1);
+}
+
+.scoped-area h3 {
+ margin: 0 0 12px;
+ font-size: 18px;
+ color: #0066cc;
+}
+
+.scoped-area .hotkey-list {
+ margin: 12px 0;
+}
+
+.scoped-area .hotkey-list > div {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 6px 0;
+ font-size: 14px;
+}
+
+.scoped-editor {
+ width: 100%;
+ margin: 12px 0;
+ padding: 12px;
+ border: 1px solid #ddd;
+ border-radius: 6px;
+ font-family: 'Courier New', monospace;
+ font-size: 14px;
+ resize: vertical;
+ min-height: 120px;
+}
+
+.scoped-editor:focus {
+ outline: 2px solid #0066cc;
+ outline-offset: 2px;
+ border-color: #0066cc;
+}
+
+/* Modal styles */
+.modal-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: rgba(0, 0, 0, 0.5);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 1000;
+}
+
+.modal-content {
+ background: white;
+ border-radius: 12px;
+ padding: 24px;
+ max-width: 500px;
+ width: 90%;
+ max-height: 80vh;
+ overflow-y: auto;
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
+}
+
+.modal-content:focus {
+ outline: 3px solid #0066cc;
+ outline-offset: 2px;
+}
+
+.modal-content h3 {
+ margin: 0 0 16px;
+ font-size: 20px;
+ color: #0066cc;
+}
+
+.modal-content button {
+ margin-top: 16px;
+}
diff --git a/examples/angular/injectHotkey/tsconfig.json b/examples/angular/injectHotkey/tsconfig.json
new file mode 100644
index 0000000..bf87e17
--- /dev/null
+++ b/examples/angular/injectHotkey/tsconfig.json
@@ -0,0 +1,28 @@
+{
+ "compileOnSave": false,
+ "compilerOptions": {
+ "outDir": "./out-tsc/app",
+ "strict": true,
+ "noImplicitOverride": true,
+ "noPropertyAccessFromIndexSignature": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true,
+ "skipLibCheck": true,
+ "isolatedModules": true,
+ "esModuleInterop": true,
+ "experimentalDecorators": true,
+ "moduleResolution": "bundler",
+ "importHelpers": true,
+ "target": "ES2022",
+ "module": "ES2022",
+ "types": []
+ },
+ "angularCompilerOptions": {
+ "enableI18nLegacyMessageIdFormat": false,
+ "strictInjectionParameters": true,
+ "strictInputAccessModifiers": true,
+ "strictTemplates": true
+ },
+ "files": ["src/main.ts"],
+ "include": ["src/**/*.d.ts"]
+}
diff --git a/examples/angular/injectHotkeyRecorder/angular.json b/examples/angular/injectHotkeyRecorder/angular.json
new file mode 100644
index 0000000..c3a7b12
--- /dev/null
+++ b/examples/angular/injectHotkeyRecorder/angular.json
@@ -0,0 +1 @@
+{"$schema":"./node_modules/@angular/cli/lib/config/schema.json","version":1,"newProjectRoot":"projects","projects":{"injectHotkeyRecorder":{"projectType":"application","schematics":{"@schematics/angular:class":{"skipTests":true},"@schematics/angular:component":{"skipTests":true}},"root":"","sourceRoot":"src","prefix":"app","architect":{"build":{"builder":"@angular-devkit/build-angular:application","options":{"outputPath":"dist/inject-hotkey-recorder","index":"src/index.html","browser":"src/main.ts","polyfills":["zone.js"],"tsConfig":"tsconfig.json","assets":[],"styles":["src/styles.css"],"scripts":[]},"configurations":{"production":{"budgets":[{"type":"initial","maximumWarning":"500kB","maximumError":"1MB"}],"outputHashing":"all"},"development":{"optimization":false,"extractLicenses":false,"sourceMap":true}},"defaultConfiguration":"production"},"serve":{"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"injectHotkeyRecorder:build:production"},"development":{"buildTarget":"injectHotkeyRecorder:build:development"}},"defaultConfiguration":"development"}}}},"cli":{"analytics":false}}
diff --git a/examples/angular/injectHotkeyRecorder/package.json b/examples/angular/injectHotkeyRecorder/package.json
new file mode 100644
index 0000000..575a2d9
--- /dev/null
+++ b/examples/angular/injectHotkeyRecorder/package.json
@@ -0,0 +1 @@
+{"name":"inject-hotkey-recorder","version":"0.0.0","scripts":{"ng":"ng","start":"ng serve --port=3073","dev":"ng serve --port=3073","build":"ng build","watch":"ng build --watch --configuration development","test":"ng test"},"private":true,"dependencies":{"@tanstack/angular-hotkeys":"workspace:*","@angular/common":"^19.2.0","@angular/compiler":"^19.2.0","@angular/core":"^19.2.0","@angular/forms":"^19.2.0","@angular/platform-browser":"^19.2.0","@angular/platform-browser-dynamic":"^19.2.0","@angular/router":"^19.2.0","rxjs":"~7.8.0","tslib":"^2.3.0","zone.js":"~0.15.0"},"devDependencies":{"@angular-devkit/build-angular":"^19.2.20","@angular/cli":"^19.2.20","@angular/compiler-cli":"^19.2.0","@types/jasmine":"~5.1.0","jasmine-core":"~5.6.0","karma":"~6.4.0","karma-chrome-launcher":"~3.2.0","karma-coverage":"~2.2.0","karma-jasmine":"~5.1.0","karma-jasmine-html-reporter":"~2.1.0","typescript":"~5.7.2"}}
diff --git a/examples/angular/injectHotkeyRecorder/src/app/app.component.css b/examples/angular/injectHotkeyRecorder/src/app/app.component.css
new file mode 100644
index 0000000..5d4e87f
--- /dev/null
+++ b/examples/angular/injectHotkeyRecorder/src/app/app.component.css
@@ -0,0 +1,3 @@
+:host {
+ display: block;
+}
diff --git a/examples/angular/injectHotkeyRecorder/src/app/app.component.html b/examples/angular/injectHotkeyRecorder/src/app/app.component.html
new file mode 100644
index 0000000..d380375
--- /dev/null
+++ b/examples/angular/injectHotkeyRecorder/src/app/app.component.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+ Shortcuts
+
+ @for (entry of actionEntries; track entry[0]) {
+
+ }
+
+
+
+
+ Demo Actions
+ Try your shortcuts! Actions will trigger when you press them.
+
+ @for (entry of actionEntries; track entry[0]) {
+
+
{{ entry[1].name }}
+
{{ countFor(entry[0]) }}
+
{{ formatForDisplay(shortcutDisplay(entry[0])) }}
+
+ }
+
+
+
+ @if (isRecording()) {
+
+ Recording shortcut... Press any key combination or
+ Escape to cancel. Press Backspace/Delete to clear the shortcut.
+
+ }
+
+
+ Usage
+ import {{ '{' }} injectHotkey, injectHotkeyRecorder {{ '}' }} from '@tanstack/angular-hotkeys'
+
+// In your component:
+shortcuts = signal({{ '{' }} save: 'Mod+K', open: 'Mod+E' {{ '}' }})
+recorder = injectHotkeyRecorder({{ '{' }}
+ onRecord: (hotkey) => this.shortcuts.update(prev => ({{ '{' }} ...prev, save: hotkey {{ '}' }}))
+{{ '}' }})
+
+injectHotkey(
+ () => this.shortcuts().save,
+ () => this.handleSave(),
+ () => ({{ '{' }} enabled: !this.recorder.isRecording() {{ '}' }})
+)
+
+
+
diff --git a/examples/angular/injectHotkeyRecorder/src/app/app.component.ts b/examples/angular/injectHotkeyRecorder/src/app/app.component.ts
new file mode 100644
index 0000000..c17c532
--- /dev/null
+++ b/examples/angular/injectHotkeyRecorder/src/app/app.component.ts
@@ -0,0 +1,153 @@
+import { Component, signal } from '@angular/core';
+import {
+ formatForDisplay,
+ injectHotkey,
+ injectHotkeyRecorder,
+} from '@tanstack/angular-hotkeys';
+import type { Hotkey } from '@tanstack/angular-hotkeys';
+import { ShortcutListItemComponent } from './shortcut-list-item.component';
+
+const DEFAULT_SHORTCUT_ACTIONS: Record<
+ string,
+ { name: string; defaultHotkey: Hotkey }
+> = {
+ save: { name: 'Save', defaultHotkey: 'Mod+K' },
+ open: { name: 'Open', defaultHotkey: 'Mod+E' },
+ new: { name: 'New', defaultHotkey: 'Mod+G' },
+ close: { name: 'Close', defaultHotkey: 'Mod+Shift+K' },
+ undo: { name: 'Undo', defaultHotkey: 'Mod+Shift+E' },
+ redo: { name: 'Redo', defaultHotkey: 'Mod+Shift+G' },
+};
+
+const ACTION_ENTRIES = Object.entries(DEFAULT_SHORTCUT_ACTIONS);
+
+@Component({
+ selector: 'app-root',
+ standalone: true,
+ imports: [ShortcutListItemComponent],
+ templateUrl: './app.component.html',
+ styleUrl: './app.component.css',
+})
+export class AppComponent {
+ private readonly recorder = injectHotkeyRecorder({
+ onRecord: (hotkey: Hotkey) => {
+ const id = this.recordingActionId();
+ if (id) {
+ this.shortcuts.update((prev) => ({
+ ...prev,
+ [id]: hotkey || ('' as Hotkey | ''),
+ }));
+ this.recordingActionId.set(null);
+ }
+ },
+ onCancel: () => this.recordingActionId.set(null),
+ onClear: () => {
+ const id = this.recordingActionId();
+ if (id) {
+ this.shortcuts.update((prev) => ({ ...prev, [id]: '' as Hotkey | '' }));
+ this.recordingActionId.set(null);
+ }
+ },
+ });
+
+ shortcuts = signal>((() => {
+ const defaults: Record = {};
+ for (const [id, action] of Object.entries(DEFAULT_SHORTCUT_ACTIONS)) {
+ defaults[id] = action.defaultHotkey;
+ }
+ return defaults;
+ })());
+
+ saveCount = signal(0);
+ openCount = signal(0);
+ newCount = signal(0);
+ closeCount = signal(0);
+ undoCount = signal(0);
+ redoCount = signal(0);
+ recordingActionId = signal(null);
+
+ readonly actionEntries = ACTION_ENTRIES;
+ readonly defaultActions = DEFAULT_SHORTCUT_ACTIONS;
+ formatForDisplay = formatForDisplay;
+
+ constructor() {
+ injectHotkey(
+ () =>
+ this.shortcuts()['save'] || DEFAULT_SHORTCUT_ACTIONS['save'].defaultHotkey,
+ () => this.saveCount.update((c) => c + 1),
+ () => ({
+ enabled: !this.recorder.isRecording() && this.shortcuts()['save'] !== '',
+ }),
+ );
+ injectHotkey(
+ () =>
+ this.shortcuts()['open'] || DEFAULT_SHORTCUT_ACTIONS['open'].defaultHotkey,
+ () => this.openCount.update((c) => c + 1),
+ () => ({
+ enabled: !this.recorder.isRecording() && this.shortcuts()['open'] !== '',
+ }),
+ );
+ injectHotkey(
+ () =>
+ this.shortcuts()['new'] || DEFAULT_SHORTCUT_ACTIONS['new'].defaultHotkey,
+ () => this.newCount.update((c) => c + 1),
+ () => ({
+ enabled: !this.recorder.isRecording() && this.shortcuts()['new'] !== '',
+ }),
+ );
+ injectHotkey(
+ () =>
+ this.shortcuts()['close'] || DEFAULT_SHORTCUT_ACTIONS['close'].defaultHotkey,
+ () => this.closeCount.update((c) => c + 1),
+ () => ({
+ enabled: !this.recorder.isRecording() && this.shortcuts()['close'] !== '',
+ }),
+ );
+ injectHotkey(
+ () =>
+ this.shortcuts()['undo'] || DEFAULT_SHORTCUT_ACTIONS['undo'].defaultHotkey,
+ () => this.undoCount.update((c) => c + 1),
+ () => ({
+ enabled: !this.recorder.isRecording() && this.shortcuts()['undo'] !== '',
+ }),
+ );
+ injectHotkey(
+ () =>
+ this.shortcuts()['redo'] || DEFAULT_SHORTCUT_ACTIONS['redo'].defaultHotkey,
+ () => this.redoCount.update((c) => c + 1),
+ () => ({
+ enabled: !this.recorder.isRecording() && this.shortcuts()['redo'] !== '',
+ }),
+ );
+ }
+
+ /** Expose recorder's isRecording signal for template */
+ readonly isRecording = this.recorder.isRecording;
+
+ handleEdit(actionId: string): void {
+ this.recordingActionId.set(actionId);
+ this.recorder.startRecording();
+ }
+
+ handleCancel(): void {
+ this.recorder.cancelRecording();
+ this.recordingActionId.set(null);
+ }
+
+ shortcutDisplay(id: string): Hotkey {
+ const hotkey = this.shortcuts()[id];
+ return (hotkey || this.defaultActions[id].defaultHotkey) as Hotkey;
+ }
+
+ countFor(id: string): number {
+ const counts: Record number> = {
+ save: () => this.saveCount(),
+ open: () => this.openCount(),
+ new: () => this.newCount(),
+ close: () => this.closeCount(),
+ undo: () => this.undoCount(),
+ redo: () => this.redoCount(),
+ };
+ return counts[id]?.() ?? 0;
+ }
+}
diff --git a/examples/angular/injectHotkeyRecorder/src/app/app.config.ts b/examples/angular/injectHotkeyRecorder/src/app/app.config.ts
new file mode 100644
index 0000000..b3ea09d
--- /dev/null
+++ b/examples/angular/injectHotkeyRecorder/src/app/app.config.ts
@@ -0,0 +1,9 @@
+import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
+import { provideHotkeys } from '@tanstack/angular-hotkeys';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ provideZoneChangeDetection({ eventCoalescing: true }),
+ provideHotkeys(),
+ ],
+};
diff --git a/examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.css b/examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.css
new file mode 100644
index 0000000..5d4e87f
--- /dev/null
+++ b/examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.css
@@ -0,0 +1,3 @@
+:host {
+ display: block;
+}
diff --git a/examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.html b/examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.html
new file mode 100644
index 0000000..943d42f
--- /dev/null
+++ b/examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.html
@@ -0,0 +1,38 @@
+
+
+
{{ actionName() }}
+
+ @if (isRecording()) {
+
+ @if (heldKeys().length > 0) {
+
+ @for (key of heldKeys(); track key; let i = $index) {
+ @if (i > 0) {
+ +
+ }
+ {{ formatKey(key) }}
+ }
+
+ } @else {
+
Press any key combination...
+ }
+
+ } @else if (hotkey()) {
+
{{ formatForDisplay(hotkey()) }}
+ } @else {
+
No shortcut
+ }
+
+
+
+ @if (isRecording()) {
+
+ Cancel
+
+ } @else {
+
+ Edit
+
+ }
+
+
diff --git a/examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.ts b/examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.ts
new file mode 100644
index 0000000..20551af
--- /dev/null
+++ b/examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.ts
@@ -0,0 +1,24 @@
+import { Component, input, output } from '@angular/core';
+import {
+ formatForDisplay,
+ formatKeyForDebuggingDisplay,
+ injectHeldKeys,
+} from '@tanstack/angular-hotkeys';
+
+@Component({
+ selector: 'app-shortcut-list-item',
+ standalone: true,
+ templateUrl: './shortcut-list-item.component.html',
+ styleUrl: './shortcut-list-item.component.css',
+})
+export class ShortcutListItemComponent {
+ actionName = input.required();
+ hotkey = input.required();
+ isRecording = input.required();
+ edit = output();
+ cancel = output();
+
+ heldKeys = injectHeldKeys();
+ formatForDisplay = formatForDisplay;
+ formatKey = formatKeyForDebuggingDisplay;
+}
diff --git a/examples/angular/injectHotkeyRecorder/src/index.html b/examples/angular/injectHotkeyRecorder/src/index.html
new file mode 100644
index 0000000..7de7640
--- /dev/null
+++ b/examples/angular/injectHotkeyRecorder/src/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ injectHotkeyRecorder - TanStack Hotkeys Angular Example
+
+
+
+
+
+
diff --git a/examples/angular/injectHotkeyRecorder/src/main.ts b/examples/angular/injectHotkeyRecorder/src/main.ts
new file mode 100644
index 0000000..17447a5
--- /dev/null
+++ b/examples/angular/injectHotkeyRecorder/src/main.ts
@@ -0,0 +1,5 @@
+import { bootstrapApplication } from '@angular/platform-browser';
+import { appConfig } from './app/app.config';
+import { AppComponent } from './app/app.component';
+
+bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));
diff --git a/examples/angular/injectHotkeyRecorder/src/styles.css b/examples/angular/injectHotkeyRecorder/src/styles.css
new file mode 100644
index 0000000..cab2d86
--- /dev/null
+++ b/examples/angular/injectHotkeyRecorder/src/styles.css
@@ -0,0 +1,224 @@
+* {
+ box-sizing: border-box;
+}
+body {
+ margin: 0;
+ font-family:
+ system-ui,
+ -apple-system,
+ sans-serif;
+ background: #f5f5f5;
+ color: #333;
+}
+.app {
+ max-width: 900px;
+ margin: 0 auto;
+ padding: 20px;
+}
+header {
+ text-align: center;
+ margin-bottom: 40px;
+}
+header h1 {
+ margin: 0 0 10px;
+ color: #0066cc;
+}
+header p {
+ color: #666;
+ margin: 0;
+ max-width: 600px;
+ margin: 0 auto;
+}
+.demo-section {
+ background: white;
+ border-radius: 12px;
+ padding: 24px;
+ margin-bottom: 24px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+}
+.demo-section h2 {
+ margin: 0 0 16px;
+ font-size: 20px;
+}
+.demo-section p {
+ margin: 0 0 16px;
+}
+kbd {
+ background: linear-gradient(180deg, #f8f8f8 0%, #e8e8e8 100%);
+ border: 1px solid #ccc;
+ border-bottom-width: 2px;
+ border-radius: 4px;
+ padding: 2px 8px;
+ font-family: monospace;
+ font-size: 13px;
+}
+button {
+ background: #0066cc;
+ color: white;
+ border: none;
+ padding: 8px 16px;
+ border-radius: 6px;
+ cursor: pointer;
+ font-size: 14px;
+}
+button:hover {
+ background: #0052a3;
+}
+.cancel-button {
+ background: #dc3545;
+}
+.cancel-button:hover {
+ background: #c82333;
+}
+.edit-button {
+ background: #28a745;
+}
+.edit-button:hover {
+ background: #218838;
+}
+.code-block {
+ background: #1e1e1e;
+ color: #d4d4d4;
+ padding: 16px;
+ border-radius: 8px;
+ overflow-x: auto;
+ font-size: 13px;
+ line-height: 1.5;
+ margin-top: 16px;
+}
+.info-box {
+ background: #e3f2fd;
+ border-radius: 8px;
+ padding: 12px 16px;
+ margin: 20px 0;
+}
+.recording-notice {
+ background: #fff3cd;
+ border: 2px solid #ffc107;
+ animation: pulse 2s ease-in-out infinite;
+}
+@keyframes pulse {
+ 0%,
+ 100% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 0.8;
+ }
+}
+.shortcuts-list {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+}
+.shortcut-item {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 16px;
+ background: #f8f9fa;
+ border: 2px solid transparent;
+ border-radius: 8px;
+ transition: all 0.2s;
+}
+.shortcut-item:hover {
+ background: #f0f0f0;
+}
+.shortcut-item.recording {
+ background: #fff3cd;
+ border-color: #ffc107;
+ box-shadow: 0 0 0 3px rgba(255, 193, 7, 0.2);
+ animation: recordingPulse 1.5s ease-in-out infinite;
+}
+@keyframes recordingPulse {
+ 0%,
+ 100% {
+ box-shadow: 0 0 0 3px rgba(255, 193, 7, 0.2);
+ }
+ 50% {
+ box-shadow: 0 0 0 6px rgba(255, 193, 7, 0.1);
+ }
+}
+.shortcut-item-content {
+ display: flex;
+ align-items: center;
+ gap: 24px;
+ flex: 1;
+}
+.shortcut-action {
+ font-weight: 500;
+ min-width: 80px;
+ font-size: 15px;
+}
+.shortcut-hotkey {
+ display: flex;
+ align-items: center;
+ min-height: 32px;
+}
+.shortcut-hotkey kbd {
+ font-size: 14px;
+}
+.no-shortcut {
+ color: #999;
+ font-style: italic;
+ font-size: 14px;
+}
+.shortcut-actions {
+ display: flex;
+ gap: 8px;
+}
+.recording-indicator {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+}
+.recording-text {
+ color: #856404;
+ font-style: italic;
+ font-size: 14px;
+}
+.held-hotkeys {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+}
+.held-hotkeys .plus {
+ color: #856404;
+ font-size: 16px;
+ margin: 0 4px;
+}
+.held-hotkeys kbd {
+ background: #ffc107;
+ border-color: #ff9800;
+ color: #856404;
+ font-weight: 600;
+}
+.demo-stats {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
+ gap: 16px;
+ margin-top: 20px;
+}
+.stat-item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ padding: 16px;
+ background: #f8f9fa;
+ border-radius: 8px;
+ gap: 8px;
+}
+.stat-label {
+ font-size: 13px;
+ color: #666;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+}
+.stat-value {
+ font-size: 32px;
+ font-weight: bold;
+ color: #0066cc;
+}
+.stat-item kbd {
+ margin-top: 4px;
+}
diff --git a/examples/angular/injectHotkeyRecorder/tsconfig.json b/examples/angular/injectHotkeyRecorder/tsconfig.json
new file mode 100644
index 0000000..6a37648
--- /dev/null
+++ b/examples/angular/injectHotkeyRecorder/tsconfig.json
@@ -0,0 +1 @@
+{"compileOnSave":false,"compilerOptions":{"outDir":"./out-tsc/app","lib":["ES2022","dom"],"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"skipLibCheck":true,"isolatedModules":true,"esModuleInterop":true,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","types":[]},"angularCompilerOptions":{"enableI18nLegacyMessageIdFormat":false,"strictInjectionParameters":true,"strictInputAccessModifiers":true,"strictTemplates":true},"files":["src/main.ts"],"include":["src/**/*.d.ts"]}
diff --git a/examples/angular/injectHotkeySequence/angular.json b/examples/angular/injectHotkeySequence/angular.json
new file mode 100644
index 0000000..d9d1c7a
--- /dev/null
+++ b/examples/angular/injectHotkeySequence/angular.json
@@ -0,0 +1 @@
+{"$schema":"./node_modules/@angular/cli/lib/config/schema.json","version":1,"newProjectRoot":"projects","projects":{"injectHotkeySequence":{"projectType":"application","schematics":{"@schematics/angular:class":{"skipTests":true},"@schematics/angular:component":{"skipTests":true}},"root":"","sourceRoot":"src","prefix":"app","architect":{"build":{"builder":"@angular-devkit/build-angular:application","options":{"outputPath":"dist/inject-hotkey-sequence","index":"src/index.html","browser":"src/main.ts","polyfills":["zone.js"],"tsConfig":"tsconfig.json","assets":[],"styles":["src/styles.css"],"scripts":[]},"configurations":{"production":{"budgets":[{"type":"initial","maximumWarning":"500kB","maximumError":"1MB"}],"outputHashing":"all"},"development":{"optimization":false,"extractLicenses":false,"sourceMap":true}},"defaultConfiguration":"production"},"serve":{"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"injectHotkeySequence:build:production"},"development":{"buildTarget":"injectHotkeySequence:build:development"}},"defaultConfiguration":"development"}}}},"cli":{"analytics":false}}
diff --git a/examples/angular/injectHotkeySequence/package.json b/examples/angular/injectHotkeySequence/package.json
new file mode 100644
index 0000000..9165210
--- /dev/null
+++ b/examples/angular/injectHotkeySequence/package.json
@@ -0,0 +1 @@
+{"name":"inject-hotkey-sequence","version":"0.0.0","scripts":{"ng":"ng","start":"ng serve --port=3074","dev":"ng serve --port=3074","build":"ng build","watch":"ng build --watch --configuration development","test":"ng test"},"private":true,"dependencies":{"@tanstack/angular-hotkeys":"workspace:*","@angular/common":"^19.2.0","@angular/compiler":"^19.2.0","@angular/core":"^19.2.0","@angular/forms":"^19.2.0","@angular/platform-browser":"^19.2.0","@angular/platform-browser-dynamic":"^19.2.0","@angular/router":"^19.2.0","rxjs":"~7.8.0","tslib":"^2.3.0","zone.js":"~0.15.0"},"devDependencies":{"@angular-devkit/build-angular":"^19.2.20","@angular/cli":"^19.2.20","@angular/compiler-cli":"^19.2.0","@types/jasmine":"~5.1.0","jasmine-core":"~5.6.0","karma":"~6.4.0","karma-chrome-launcher":"~3.2.0","karma-coverage":"~2.2.0","karma-jasmine":"~5.1.0","karma-jasmine-html-reporter":"~2.1.0","typescript":"~5.7.2"}}
diff --git a/examples/angular/injectHotkeySequence/src/app/app.component.css b/examples/angular/injectHotkeySequence/src/app/app.component.css
new file mode 100644
index 0000000..5d4e87f
--- /dev/null
+++ b/examples/angular/injectHotkeySequence/src/app/app.component.css
@@ -0,0 +1,3 @@
+:host {
+ display: block;
+}
diff --git a/examples/angular/injectHotkeySequence/src/app/app.component.html b/examples/angular/injectHotkeySequence/src/app/app.component.html
new file mode 100644
index 0000000..7e24765
--- /dev/null
+++ b/examples/angular/injectHotkeySequence/src/app/app.component.html
@@ -0,0 +1,108 @@
+
+
+
+
+
+ Vim-Style Commands
+
+
+
+ Sequence
+ Action
+
+
+
+
+ g g
+ Go to top
+
+
+ G (Shift+G)
+ Go to bottom
+
+
+ d d
+ Delete line
+
+
+ y y
+ Yank (copy) line
+
+
+ d w
+ Delete word
+
+
+ c i w
+ Change inner word
+
+
+
+
+
+
+ Fun Sequences
+
+
+
Konami Code (Partial)
+
↑ ↑ ↓ ↓
+
Use arrow keys within 1.5 seconds
+
+
+
Side to Side
+
← → ← →
+
Arrow keys within 1.5 seconds
+
+
+
Spell It Out
+
+ h e l l o
+
+
Type "hello" quickly
+
+
+
+
+ @if (lastSequence(); as seq) {
+
+ Triggered: {{ seq }}
+
+ }
+
+
+ Usage
+ import {{ '{' }} injectHotkeySequence {{ '}' }} from '@tanstack/angular-hotkeys'
+
+// In constructor or injection context:
+injectHotkeySequence(['G', 'G'], () => scrollToTop())
+
+injectHotkeySequence(
+ ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown'],
+ () => activateCheatMode(),
+ {{ '{' }} timeout: 1500 {{ '}' }}
+)
+
+injectHotkeySequence(['C', 'I', 'W'], () => changeInnerWord())
+
+
+ @if (history().length > 0) {
+
+ History
+
+ @for (item of history(); track item) {
+ {{ item }}
+ }
+
+ Clear History
+
+ }
+
+ Press Escape to clear history
+
+
diff --git a/examples/angular/injectHotkeySequence/src/app/app.component.ts b/examples/angular/injectHotkeySequence/src/app/app.component.ts
new file mode 100644
index 0000000..834a1dd
--- /dev/null
+++ b/examples/angular/injectHotkeySequence/src/app/app.component.ts
@@ -0,0 +1,63 @@
+import { Component, signal } from '@angular/core';
+import {
+ injectHotkey,
+ injectHotkeySequence,
+} from '@tanstack/angular-hotkeys';
+
+@Component({
+ selector: 'app-root',
+ standalone: true,
+ templateUrl: './app.component.html',
+ styleUrl: './app.component.css',
+})
+export class AppComponent {
+ lastSequence = signal(null);
+ history = signal([]);
+
+ constructor() {
+ const addToHistory = (action: string) => {
+ this.lastSequence.set(action);
+ this.history.update((h) => [...h.slice(-9), action]);
+ };
+
+ injectHotkeySequence(['G', 'G'], () => addToHistory('gg → Go to top'));
+ injectHotkeySequence(['Shift+G'], () =>
+ addToHistory('G → Go to bottom'),
+ );
+ injectHotkeySequence(['D', 'D'], () =>
+ addToHistory('dd → Delete line'),
+ );
+ injectHotkeySequence(['Y', 'Y'], () =>
+ addToHistory('yy → Yank (copy) line'),
+ );
+ injectHotkeySequence(['D', 'W'], () => addToHistory('dw → Delete word'));
+ injectHotkeySequence(['C', 'I', 'W'], () =>
+ addToHistory('ciw → Change inner word'),
+ );
+
+ injectHotkeySequence(
+ ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown'],
+ () => addToHistory('↑↑↓↓ → Konami code (partial)'),
+ { timeout: 1500 },
+ );
+
+ injectHotkeySequence(
+ ['ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight'],
+ () => addToHistory('←→←→ → Side to side!'),
+ { timeout: 1500 },
+ );
+
+ injectHotkeySequence(['H', 'E', 'L', 'L', 'O'], () =>
+ addToHistory('hello → Hello World!'),
+ );
+
+ injectHotkey('Escape', () => {
+ this.lastSequence.set(null);
+ this.history.set([]);
+ });
+ }
+
+ clearHistory(): void {
+ this.history.set([]);
+ }
+}
diff --git a/examples/angular/injectHotkeySequence/src/app/app.config.ts b/examples/angular/injectHotkeySequence/src/app/app.config.ts
new file mode 100644
index 0000000..b3ea09d
--- /dev/null
+++ b/examples/angular/injectHotkeySequence/src/app/app.config.ts
@@ -0,0 +1,9 @@
+import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
+import { provideHotkeys } from '@tanstack/angular-hotkeys';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ provideZoneChangeDetection({ eventCoalescing: true }),
+ provideHotkeys(),
+ ],
+};
diff --git a/examples/angular/injectHotkeySequence/src/index.html b/examples/angular/injectHotkeySequence/src/index.html
new file mode 100644
index 0000000..9c31100
--- /dev/null
+++ b/examples/angular/injectHotkeySequence/src/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ injectHotkeySequence - TanStack Hotkeys Angular Example
+
+
+
+
+
+
diff --git a/examples/angular/injectHotkeySequence/src/main.ts b/examples/angular/injectHotkeySequence/src/main.ts
new file mode 100644
index 0000000..17447a5
--- /dev/null
+++ b/examples/angular/injectHotkeySequence/src/main.ts
@@ -0,0 +1,5 @@
+import { bootstrapApplication } from '@angular/platform-browser';
+import { appConfig } from './app/app.config';
+import { AppComponent } from './app/app.component';
+
+bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));
diff --git a/examples/angular/injectHotkeySequence/src/styles.css b/examples/angular/injectHotkeySequence/src/styles.css
new file mode 100644
index 0000000..3a0fd93
--- /dev/null
+++ b/examples/angular/injectHotkeySequence/src/styles.css
@@ -0,0 +1,117 @@
+* {
+ box-sizing: border-box;
+}
+body {
+ margin: 0;
+ font-family:
+ system-ui,
+ -apple-system,
+ sans-serif;
+ background: #f5f5f5;
+ color: #333;
+}
+.app {
+ max-width: 800px;
+ margin: 0 auto;
+ padding: 20px;
+}
+header h1 {
+ margin: 0 0 10px;
+ color: #0066cc;
+}
+header p {
+ color: #666;
+ margin: 0;
+ max-width: 500px;
+ margin: 0 auto;
+}
+.demo-section {
+ background: white;
+ border-radius: 12px;
+ padding: 24px;
+ margin-bottom: 24px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+}
+.demo-section h2 {
+ margin: 0 0 16px;
+ font-size: 20px;
+}
+kbd {
+ background: linear-gradient(180deg, #f8f8f8 0%, #e8e8e8 100%);
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ padding: 2px 8px;
+ font-family: monospace;
+ font-size: 13px;
+ margin-right: 4px;
+}
+.sequence-table {
+ width: 100%;
+ border-collapse: collapse;
+}
+.sequence-table th,
+.sequence-table td {
+ padding: 12px;
+ text-align: left;
+ border-bottom: 1px solid #eee;
+}
+.fun-sequences {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
+ gap: 16px;
+}
+.sequence-card {
+ background: #f8f9fa;
+ border-radius: 8px;
+ padding: 16px;
+ text-align: center;
+}
+.sequence-card h3 {
+ margin: 0 0 12px;
+ font-size: 16px;
+}
+.hint {
+ font-size: 12px;
+ color: #888;
+ font-style: italic;
+}
+.info-box {
+ background: #e3f2fd;
+ border-radius: 8px;
+ padding: 16px 20px;
+ margin-bottom: 24px;
+ font-size: 18px;
+}
+.info-box.success {
+ background: #e8f5e9;
+ color: #2e7d32;
+}
+.code-block {
+ background: #1e1e1e;
+ color: #d4d4d4;
+ padding: 16px;
+ border-radius: 8px;
+ overflow-x: auto;
+ font-size: 13px;
+}
+.history-list {
+ list-style: none;
+ padding: 0;
+ margin: 0 0 16px;
+}
+.history-list li {
+ padding: 10px 14px;
+ background: #f0f0f0;
+ border-radius: 6px;
+ margin-bottom: 6px;
+ font-family: monospace;
+ font-size: 14px;
+}
+button {
+ background: #0066cc;
+ color: white;
+ border: none;
+ padding: 10px 20px;
+ border-radius: 6px;
+ cursor: pointer;
+}
diff --git a/examples/angular/injectHotkeySequence/tsconfig.json b/examples/angular/injectHotkeySequence/tsconfig.json
new file mode 100644
index 0000000..6a37648
--- /dev/null
+++ b/examples/angular/injectHotkeySequence/tsconfig.json
@@ -0,0 +1 @@
+{"compileOnSave":false,"compilerOptions":{"outDir":"./out-tsc/app","lib":["ES2022","dom"],"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"skipLibCheck":true,"isolatedModules":true,"esModuleInterop":true,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","types":[]},"angularCompilerOptions":{"enableI18nLegacyMessageIdFormat":false,"strictInjectionParameters":true,"strictInputAccessModifiers":true,"strictTemplates":true},"files":["src/main.ts"],"include":["src/**/*.d.ts"]}
diff --git a/examples/angular/injectKeyHold/angular.json b/examples/angular/injectKeyHold/angular.json
new file mode 100644
index 0000000..7d88260
--- /dev/null
+++ b/examples/angular/injectKeyHold/angular.json
@@ -0,0 +1 @@
+{"$schema":"./node_modules/@angular/cli/lib/config/schema.json","version":1,"newProjectRoot":"projects","projects":{"injectKeyHold":{"projectType":"application","schematics":{"@schematics/angular:class":{"skipTests":true},"@schematics/angular:component":{"skipTests":true}},"root":"","sourceRoot":"src","prefix":"app","architect":{"build":{"builder":"@angular-devkit/build-angular:application","options":{"outputPath":"dist/inject-key-hold","index":"src/index.html","browser":"src/main.ts","polyfills":["zone.js"],"tsConfig":"tsconfig.json","assets":[],"styles":["src/styles.css"],"scripts":[]},"configurations":{"production":{"budgets":[{"type":"initial","maximumWarning":"500kB","maximumError":"1MB"}],"outputHashing":"all"},"development":{"optimization":false,"extractLicenses":false,"sourceMap":true}},"defaultConfiguration":"production"},"serve":{"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"injectKeyHold:build:production"},"development":{"buildTarget":"injectKeyHold:build:development"}},"defaultConfiguration":"development"}}}},"cli":{"analytics":false}}
diff --git a/examples/angular/injectKeyHold/package.json b/examples/angular/injectKeyHold/package.json
new file mode 100644
index 0000000..29cb1c7
--- /dev/null
+++ b/examples/angular/injectKeyHold/package.json
@@ -0,0 +1 @@
+{"name":"inject-key-hold","version":"0.0.0","scripts":{"ng":"ng","start":"ng serve --port=3072","dev":"ng serve --port=3072","build":"ng build","watch":"ng build --watch --configuration development","test":"ng test"},"private":true,"dependencies":{"@tanstack/angular-hotkeys":"workspace:*","@angular/common":"^19.2.0","@angular/compiler":"^19.2.0","@angular/core":"^19.2.0","@angular/forms":"^19.2.0","@angular/platform-browser":"^19.2.0","@angular/platform-browser-dynamic":"^19.2.0","@angular/router":"^19.2.0","rxjs":"~7.8.0","tslib":"^2.3.0","zone.js":"~0.15.0"},"devDependencies":{"@angular-devkit/build-angular":"^19.2.20","@angular/cli":"^19.2.20","@angular/compiler-cli":"^19.2.0","@types/jasmine":"~5.1.0","jasmine-core":"~5.6.0","karma":"~6.4.0","karma-chrome-launcher":"~3.2.0","karma-coverage":"~2.2.0","karma-jasmine":"~5.1.0","karma-jasmine-html-reporter":"~2.1.0","typescript":"~5.7.2"}}
diff --git a/examples/angular/injectKeyHold/src/app/app.component.css b/examples/angular/injectKeyHold/src/app/app.component.css
new file mode 100644
index 0000000..5d4e87f
--- /dev/null
+++ b/examples/angular/injectKeyHold/src/app/app.component.css
@@ -0,0 +1,3 @@
+:host {
+ display: block;
+}
diff --git a/examples/angular/injectKeyHold/src/app/app.component.html b/examples/angular/injectKeyHold/src/app/app.component.html
new file mode 100644
index 0000000..34717da
--- /dev/null
+++ b/examples/angular/injectKeyHold/src/app/app.component.html
@@ -0,0 +1,74 @@
+
+
+
+
+
+ Modifier Key States
+
+
+ Shift
+ {{ isShiftHeld() ? 'HELD' : 'Released' }}
+
+
+ Control
+ {{ isControlHeld() ? 'HELD' : 'Released' }}
+
+
+ Alt / Option
+ {{ isAltHeld() ? 'HELD' : 'Released' }}
+
+
+ Meta (⌘ / ⊞)
+ {{ isMetaHeld() ? 'HELD' : 'Released' }}
+
+
+
+
+
+ Space Bar Demo
+
+ {{ isSpaceHeld() ? '🚀 SPACE HELD!' : 'Hold Space Bar' }}
+
+
+
+
+ Usage
+ import {{ '{' }} injectKeyHold {{ '}' }} from '@tanstack/angular-hotkeys'
+
+@Component({{ '{' }} ... {{ '}' }})
+export class ShiftIndicatorComponent {{ '{' }}
+ isShiftHeld = injectKeyHold('Shift')
+ // Template: {{ '{{' }} isShiftHeld() ? 'Shift is pressed!' : 'Press Shift' {{ '}}' }}
+{{ '}' }}
+
+
+
+ Conditional UI Example
+ Hold Shift to reveal the secret message:
+
+ @if (isShiftHeld()) {
+ 🎉 The secret password is: tanstack-hotkeys-rocks!
+ } @else {
+ ••••••••••••••••••••••••••
+ }
+
+
+
+
+ Use Cases
+
+ Show different UI based on modifier state
+ Enable "power user" mode while holding a key
+ Hold-to-reveal sensitive information
+ Drag-and-drop with modifier behaviors
+ Show additional options on hover + modifier
+
+
+
+
diff --git a/examples/angular/injectKeyHold/src/app/app.component.ts b/examples/angular/injectKeyHold/src/app/app.component.ts
new file mode 100644
index 0000000..db686f2
--- /dev/null
+++ b/examples/angular/injectKeyHold/src/app/app.component.ts
@@ -0,0 +1,16 @@
+import { Component } from '@angular/core';
+import { injectKeyHold } from '@tanstack/angular-hotkeys';
+
+@Component({
+ selector: 'app-root',
+ standalone: true,
+ templateUrl: './app.component.html',
+ styleUrl: './app.component.css',
+})
+export class AppComponent {
+ isShiftHeld = injectKeyHold('Shift');
+ isControlHeld = injectKeyHold('Control');
+ isAltHeld = injectKeyHold('Alt');
+ isMetaHeld = injectKeyHold('Meta');
+ isSpaceHeld = injectKeyHold('Space');
+}
diff --git a/examples/angular/injectKeyHold/src/app/app.config.ts b/examples/angular/injectKeyHold/src/app/app.config.ts
new file mode 100644
index 0000000..b3ea09d
--- /dev/null
+++ b/examples/angular/injectKeyHold/src/app/app.config.ts
@@ -0,0 +1,9 @@
+import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
+import { provideHotkeys } from '@tanstack/angular-hotkeys';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ provideZoneChangeDetection({ eventCoalescing: true }),
+ provideHotkeys(),
+ ],
+};
diff --git a/examples/angular/injectKeyHold/src/index.html b/examples/angular/injectKeyHold/src/index.html
new file mode 100644
index 0000000..23e1667
--- /dev/null
+++ b/examples/angular/injectKeyHold/src/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ injectKeyHold - TanStack Hotkeys Angular Example
+
+
+
+
+
+
diff --git a/examples/angular/injectKeyHold/src/main.ts b/examples/angular/injectKeyHold/src/main.ts
new file mode 100644
index 0000000..17447a5
--- /dev/null
+++ b/examples/angular/injectKeyHold/src/main.ts
@@ -0,0 +1,5 @@
+import { bootstrapApplication } from '@angular/platform-browser';
+import { appConfig } from './app/app.config';
+import { AppComponent } from './app/app.component';
+
+bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));
diff --git a/examples/angular/injectKeyHold/src/styles.css b/examples/angular/injectKeyHold/src/styles.css
new file mode 100644
index 0000000..8f1ac99
--- /dev/null
+++ b/examples/angular/injectKeyHold/src/styles.css
@@ -0,0 +1,114 @@
+* {
+ box-sizing: border-box;
+}
+body {
+ margin: 0;
+ font-family:
+ system-ui,
+ -apple-system,
+ sans-serif;
+ background: #f5f5f5;
+ color: #333;
+}
+.app {
+ max-width: 800px;
+ margin: 0 auto;
+ padding: 20px;
+}
+header h1 {
+ margin: 0 0 10px;
+ color: #0066cc;
+}
+header p {
+ color: #666;
+ margin: 0;
+ max-width: 500px;
+ margin: 0 auto;
+}
+.demo-section {
+ background: white;
+ border-radius: 12px;
+ padding: 24px;
+ margin-bottom: 24px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+}
+.demo-section h2 {
+ margin: 0 0 16px;
+ font-size: 20px;
+}
+.demo-section ul {
+ margin: 0;
+ padding-left: 20px;
+}
+.demo-section li {
+ margin-bottom: 8px;
+}
+kbd {
+ background: linear-gradient(180deg, #f8f8f8 0%, #e8e8e8 100%);
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ padding: 2px 8px;
+ font-family: monospace;
+ font-size: 13px;
+}
+.modifier-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 16px;
+}
+.modifier-indicator {
+ background: #f0f0f0;
+ border: 2px solid #ddd;
+ border-radius: 12px;
+ padding: 20px;
+ text-align: center;
+ transition: all 0.15s ease;
+}
+.modifier-indicator.active {
+ background: #4caf50;
+ border-color: #388e3c;
+ color: white;
+ transform: scale(1.02);
+}
+.modifier-indicator .key-name {
+ display: block;
+ font-weight: bold;
+ font-size: 18px;
+ margin-bottom: 8px;
+}
+.space-indicator {
+ background: #f0f0f0;
+ border: 3px solid #ddd;
+ border-radius: 16px;
+ padding: 40px;
+ text-align: center;
+ font-size: 24px;
+ transition: all 0.15s ease;
+}
+.space-indicator.active {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ border-color: #5a67d8;
+ color: white;
+ transform: scale(1.02);
+}
+.secret-box {
+ background: #f0f0f0;
+ border-radius: 8px;
+ padding: 20px;
+ text-align: center;
+ font-family: monospace;
+ font-size: 16px;
+ transition: all 0.3s ease;
+}
+.secret-box.revealed {
+ background: #e8f5e9;
+ color: #2e7d32;
+}
+.code-block {
+ background: #1e1e1e;
+ color: #d4d4d4;
+ padding: 16px;
+ border-radius: 8px;
+ overflow-x: auto;
+ font-size: 13px;
+}
diff --git a/examples/angular/injectKeyHold/tsconfig.json b/examples/angular/injectKeyHold/tsconfig.json
new file mode 100644
index 0000000..6a37648
--- /dev/null
+++ b/examples/angular/injectKeyHold/tsconfig.json
@@ -0,0 +1 @@
+{"compileOnSave":false,"compilerOptions":{"outDir":"./out-tsc/app","lib":["ES2022","dom"],"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"skipLibCheck":true,"isolatedModules":true,"esModuleInterop":true,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","types":[]},"angularCompilerOptions":{"enableI18nLegacyMessageIdFormat":false,"strictInjectionParameters":true,"strictInputAccessModifiers":true,"strictTemplates":true},"files":["src/main.ts"],"include":["src/**/*.d.ts"]}
diff --git a/package.json b/package.json
index 2c58956..45e24ea 100644
--- a/package.json
+++ b/package.json
@@ -17,7 +17,7 @@
"clean": "find . -name 'dist' -type d -prune -exec rm -rf {} +",
"clean:node_modules": "find . -name 'node_modules' -type d -prune -exec rm -rf {} +",
"clean:all": "pnpm run clean && pnpm run clean:node_modules",
- "copy:readme": "cp README.md packages/hotkeys/README.md && cp README.md packages/hotkeys-devtools/README.md && cp README.md packages/react-hotkeys/README.md && cp README.md packages/react-hotkeys-devtools/README.md && cp README.md packages/preact-hotkeys/README.md && cp README.md packages/preact-hotkeys-devtools/README.md",
+ "copy:readme": "cp README.md packages/hotkeys/README.md && cp README.md packages/hotkeys-devtools/README.md && cp README.md packages/angular-hotkeys/README.md && cp README.md packages/react-hotkeys/README.md && cp README.md packages/react-hotkeys-devtools/README.md && cp README.md packages/preact-hotkeys/README.md && cp README.md packages/preact-hotkeys-devtools/README.md",
"dev": "pnpm run watch",
"format": "prettier --experimental-cli --ignore-unknown '**/*' --write",
"generate-docs": "node scripts/generate-docs.ts && pnpm run copy:readme",
@@ -80,6 +80,7 @@
"@tanstack/hotkeys-devtools": "workspace:*",
"@tanstack/preact-hotkeys": "workspace:*",
"@tanstack/preact-hotkeys-devtools": "workspace:*",
+ "@tanstack/angular-hotkeys": "workspace:*",
"@tanstack/react-hotkeys": "workspace:*",
"@tanstack/react-hotkeys-devtools": "workspace:*"
}
diff --git a/packages/angular-hotkeys/README.md b/packages/angular-hotkeys/README.md
new file mode 100644
index 0000000..25f2a1e
--- /dev/null
+++ b/packages/angular-hotkeys/README.md
@@ -0,0 +1,333 @@
+# @tanstack/angular-hotkeys
+
+> Angular adapter for [TanStack Hotkeys](https://tanstack.com/hotkeys) - keyboard shortcuts made easy
+
+[](https://www.npmjs.com/package/@tanstack/angular-hotkeys)
+[](https://opensource.org/licenses/MIT)
+
+## Features
+
+✅ **Type-safe hotkey bindings** - Template strings (`Mod+Shift+S`, `Escape`) or parsed objects
+✅ **Cross-platform** - `Mod` key automatically maps to Cmd on macOS, Ctrl on Windows/Linux
+✅ **Sequence support** - Vim-style multi-key sequences (`g g`, `d d`)
+✅ **Key state tracking** - Track which keys are currently held down
+✅ **Hotkey recording** - Built-in UI helpers for letting users define their own shortcuts
+✅ **Angular signals** - Inject-based APIs that work with Angular 19+
+
+## Installation
+
+```bash
+npm install @tanstack/angular-hotkeys @tanstack/hotkeys
+# or
+bun add @tanstack/angular-hotkeys @tanstack/hotkeys
+# or
+pnpm add @tanstack/angular-hotkeys @tanstack/hotkeys
+```
+
+## Quick Start
+
+**1. Provide the hotkeys context in your app config:**
+
+```ts
+// app.config.ts
+import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
+import { provideHotkeys } from '@tanstack/angular-hotkeys';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ provideZoneChangeDetection({ eventCoalescing: true }),
+ provideHotkeys(),
+ ],
+};
+```
+
+**2. Register a hotkey in a component (injection context):**
+
+```ts
+import { Component } from '@angular/core';
+import { injectHotkey } from '@tanstack/angular-hotkeys';
+
+@Component({
+ selector: 'app-root',
+ standalone: true,
+ template: `Press Cmd/Ctrl+S to save
`,
+})
+export class AppComponent {
+ constructor() {
+ injectHotkey('Mod+S', (event) => {
+ event.preventDefault();
+ console.log('Save!');
+ });
+ }
+}
+```
+
+## Usage
+
+### Basic Hotkey
+
+```ts
+import { Component, signal } from '@angular/core';
+import { injectHotkey } from '@tanstack/angular-hotkeys';
+
+@Component({
+ selector: 'app-save-button',
+ standalone: true,
+ template: `Save (Cmd/Ctrl+S) `,
+})
+export class SaveButtonComponent {
+ private readonly saveCount = signal(0);
+
+ constructor() {
+ injectHotkey('Mod+S', (event, { hotkey }) => {
+ event.preventDefault();
+ this.saveCount.update((c) => c + 1);
+ });
+ }
+}
+```
+
+### Conditional Hotkeys
+
+```ts
+import { Component, signal } from '@angular/core';
+import { injectHotkey } from '@tanstack/angular-hotkeys';
+
+@Component({
+ selector: 'app-modal',
+ standalone: true,
+ template: `
+ @if (isOpen()) {
+ Press Escape to close
+ }
+ `,
+})
+export class ModalComponent {
+ isOpen = signal(true);
+
+ constructor() {
+ injectHotkey('Escape', () => this.close(), () => ({ enabled: this.isOpen() }));
+ }
+
+ close() {
+ this.isOpen.set(false);
+ }
+}
+```
+
+### Scoped Hotkeys
+
+Use a getter for `target` so the hotkey waits for the element (e.g. from `viewChild`):
+
+```ts
+import { Component, viewChild, ElementRef } from '@angular/core';
+import { injectHotkey } from '@tanstack/angular-hotkeys';
+
+@Component({
+ selector: 'app-editor',
+ standalone: true,
+ template: `
`,
+})
+export class EditorComponent {
+ private readonly editorRef = viewChild>('editorRef');
+
+ constructor() {
+ injectHotkey(
+ 'Mod+B',
+ () => this.toggleBold(),
+ () => ({ target: this.editorRef()?.nativeElement ?? null }),
+ );
+ }
+
+ toggleBold() {
+ document.execCommand('bold');
+ }
+}
+```
+
+### Hotkey Sequences (Vim-style)
+
+```ts
+import { Component, signal } from '@angular/core';
+import { injectHotkeySequence, injectHotkey } from '@tanstack/angular-hotkeys';
+
+@Component({
+ selector: 'app-vim-editor',
+ standalone: true,
+ template: `Try Vim shortcuts! Last: {{ lastSequence() }}
`,
+})
+export class VimEditorComponent {
+ lastSequence = signal(null);
+
+ constructor() {
+ injectHotkeySequence(['G', 'G'], () => this.lastSequence.set('gg → Go to top'));
+ injectHotkeySequence(['D', 'D'], () => this.lastSequence.set('dd → Delete line'));
+ injectHotkeySequence(
+ ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown'],
+ () => this.lastSequence.set('Konami!'),
+ { timeout: 1500 },
+ );
+ injectHotkey('Escape', () => this.lastSequence.set(null));
+ }
+}
+```
+
+### Track Held Keys
+
+```ts
+import { Component } from '@angular/core';
+import { injectHeldKeys, injectKeyHold } from '@tanstack/angular-hotkeys';
+
+@Component({
+ selector: 'app-key-tracker',
+ standalone: true,
+ template: `
+ Shift: {{ isShiftHeld() ? 'Pressed' : 'Not pressed' }}
+ All held: @for (key of heldKeys(); track key) { {{ key }} }
+ `,
+})
+export class KeyTrackerComponent {
+ heldKeys = injectHeldKeys();
+ isShiftHeld = injectKeyHold('Shift');
+}
+```
+
+### Hotkey Recorder
+
+```ts
+import { Component, signal } from '@angular/core';
+import { injectHotkey, injectHotkeyRecorder } from '@tanstack/angular-hotkeys';
+
+@Component({
+ selector: 'app-shortcut-settings',
+ standalone: true,
+ template: `
+ Current shortcut: {{ shortcut() }}
+
+ {{ recorder.isRecording() ? 'Recording...' : 'Edit Shortcut' }}
+
+ `,
+})
+export class ShortcutSettingsComponent {
+ shortcut = signal('Mod+S');
+ recorder = injectHotkeyRecorder({
+ onRecord: (hotkey) => this.shortcut.set(hotkey),
+ onCancel: () => console.log('Recording cancelled'),
+ });
+
+ constructor() {
+ injectHotkey(
+ () => this.shortcut(),
+ () => this.handleSave(),
+ () => ({ enabled: !this.recorder.isRecording() }),
+ );
+ }
+
+ handleSave() {
+ // save logic
+ }
+}
+```
+
+### Global Configuration
+
+```ts
+// app.config.ts
+import { provideHotkeys } from '@tanstack/angular-hotkeys';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ provideHotkeys({
+ hotkey: {
+ preventDefault: true,
+ enabled: true,
+ },
+ hotkeySequence: {
+ timeout: 1000,
+ },
+ }),
+ ],
+};
+```
+
+## API
+
+### `injectHotkey(hotkey, callback, options?)`
+
+Register a keyboard hotkey. Call in an injection context (e.g. constructor or field initializer).
+
+- **hotkey**: String like `'Mod+S'` or `'Escape'`, or getter function
+- **callback**: Function called when hotkey is pressed
+- **options**: Optional configuration (or getter for reactive options)
+
+**Options:** `enabled`, `preventDefault`, `stopPropagation`, `target`, `platform`, `requireReset`
+
+### `injectHotkeySequence(sequence, callback, options?)`
+
+Register a multi-key sequence (Vim-style).
+
+- **sequence**: Array of hotkey strings like `['G', 'G']`, or getter function
+- **callback**: Function called when sequence completes
+- **options**: Optional configuration (or getter function)
+
+**Options:** `enabled`, `timeout` (ms), `platform`
+
+### `injectHeldKeys()`
+
+Returns a signal of currently held key names.
+
+```ts
+const heldKeys = injectHeldKeys();
+// heldKeys() => ['Shift', 'A']
+```
+
+### `injectHeldKeyCodes()`
+
+Returns a signal of a map from held key names to their physical `event.code` values.
+
+```ts
+const heldCodes = injectHeldKeyCodes();
+// heldCodes() => { Shift: 'ShiftLeft', A: 'KeyA' }
+```
+
+### `injectKeyHold(key)`
+
+Returns a signal that is true when the given key is held.
+
+```ts
+const isShiftHeld = injectKeyHold('Shift');
+// isShiftHeld() => true | false
+```
+
+### `injectHotkeyRecorder(options)`
+
+Hotkey recording interface.
+
+**Options:** `onRecord`, `onCancel`, `onClear`
+
+**Returns:** `isRecording`, `recordedHotkey`, `startRecording`, `stopRecording`, `cancelRecording`
+
+### `provideHotkeys(defaultOptions?)`
+
+Provider for global hotkey defaults. Use in `ApplicationConfig` providers.
+
+### `injectHotkeysContext()` / `injectDefaultHotkeysOptions()`
+
+Inject the hotkeys context or merged default options (for advanced use).
+
+## Cross-Platform Keys
+
+Use `Mod` for cross-platform modifier:
+
+- `Mod+S` → `Cmd+S` on macOS, `Ctrl+S` on Windows/Linux
+- `Mod+Shift+P` → `Cmd+Shift+P` on macOS, `Ctrl+Shift+P` elsewhere
+
+## Related
+
+- [TanStack Hotkeys](https://tanstack.com/hotkeys) - The core library
+- [@tanstack/react-hotkeys](https://tanstack.com/hotkeys) - React adapter
+- [@tanstack/solid-hotkeys](https://tanstack.com/hotkeys) - Solid adapter
+
+## License
+
+MIT
diff --git a/packages/angular-hotkeys/package.json b/packages/angular-hotkeys/package.json
new file mode 100644
index 0000000..f442978
--- /dev/null
+++ b/packages/angular-hotkeys/package.json
@@ -0,0 +1,66 @@
+{
+ "name": "@tanstack/angular-hotkeys",
+ "version": "0.1.3",
+ "description": "Angular adapter for TanStack Hotkeys",
+ "author": "Tanner Linsley",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/TanStack/hotkeys.git",
+ "directory": "packages/angular-hotkeys"
+ },
+ "homepage": "https://tanstack.com/hotkeys",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "keywords": [
+ "angular",
+ "tanstack",
+ "hotkeys",
+ "keyboard",
+ "shortcuts"
+ ],
+ "scripts": {
+ "clean": "premove ./build ./dist",
+ "lint": "eslint ./src",
+ "lint:fix": "eslint ./src --fix",
+ "test:eslint": "eslint ./src",
+ "test:lib": "vitest --passWithNoTests",
+ "test:lib:dev": "pnpm test:lib --watch",
+ "test:types": "tsc",
+ "build": "tsdown"
+ },
+ "type": "module",
+ "main": "./dist/index.cjs",
+ "module": "./dist/index.js",
+ "types": "./dist/index.d.cts",
+ "exports": {
+ ".": {
+ "import": "./dist/index.js",
+ "require": "./dist/index.cjs"
+ },
+ "./package.json": "./package.json"
+ },
+ "sideEffects": false,
+ "engines": {
+ "node": ">=18"
+ },
+ "files": [
+ "dist",
+ "src"
+ ],
+ "dependencies": {
+ "@tanstack/angular-store": "^0.8.0",
+ "@tanstack/hotkeys": "workspace:*"
+ },
+ "peerDependencies": {
+ "@angular/common": ">=19.0.0",
+ "@angular/core": ">=19.0.0"
+ },
+ "devDependencies": {
+ "@angular/common": "^19.0.0",
+ "@angular/core": "^19.0.0",
+ "typescript": "5.9.3"
+ }
+}
diff --git a/packages/angular-hotkeys/src/hotkeys-provider.ts b/packages/angular-hotkeys/src/hotkeys-provider.ts
new file mode 100644
index 0000000..77d6488
--- /dev/null
+++ b/packages/angular-hotkeys/src/hotkeys-provider.ts
@@ -0,0 +1,36 @@
+import { inject, InjectionToken } from '@angular/core'
+import type { HotkeyRecorderOptions } from '@tanstack/hotkeys'
+import { InjectHotkeyOptions } from './injectHotkey'
+import { InjectHotkeySequenceOptions } from './injectHotkeySequence'
+
+export interface HotkeysProviderOptions {
+ hotkey?: Partial
+ hotkeyRecorder?: Partial
+ hotkeySequence?: Partial
+}
+
+export interface HotkeysContextValue {
+ defaultOptions: HotkeysProviderOptions
+}
+
+export const HOTKEYS_INJECTION_TOKEN = new InjectionToken(
+ 'HOTKEYS_INJECTION_TOKEN',
+)
+
+export function provideHotkeys(defaultOptions?: HotkeysProviderOptions): {
+ provide: typeof HOTKEYS_INJECTION_TOKEN
+ useValue: HotkeysContextValue
+} {
+ return {
+ provide: HOTKEYS_INJECTION_TOKEN,
+ useValue: { defaultOptions: defaultOptions ?? {} },
+ }
+}
+
+export function injectHotkeysContext(): HotkeysContextValue | null {
+ return inject(HOTKEYS_INJECTION_TOKEN, { optional: true }) ?? null
+}
+
+export function injectDefaultHotkeysOptions(): HotkeysProviderOptions {
+ return injectHotkeysContext()?.defaultOptions ?? {}
+}
diff --git a/packages/angular-hotkeys/src/index.ts b/packages/angular-hotkeys/src/index.ts
new file mode 100644
index 0000000..ef77edc
--- /dev/null
+++ b/packages/angular-hotkeys/src/index.ts
@@ -0,0 +1,13 @@
+// Re-export everything from the core package
+export * from '@tanstack/hotkeys'
+
+// Provider
+export * from './hotkeys-provider'
+
+// Angular-specific primitives
+export * from './injectHotkey'
+export * from './injectHotkeySequence'
+export * from './injectHeldKeys'
+export * from './injectHeldKeyCodes'
+export * from './injectKeyHold'
+export * from './injectHotkeyRecorder'
diff --git a/packages/angular-hotkeys/src/injectHeldKeyCodes.ts b/packages/angular-hotkeys/src/injectHeldKeyCodes.ts
new file mode 100644
index 0000000..29e61b7
--- /dev/null
+++ b/packages/angular-hotkeys/src/injectHeldKeyCodes.ts
@@ -0,0 +1,31 @@
+import { getKeyStateTracker } from '@tanstack/hotkeys'
+import { injectStore } from '@tanstack/angular-store'
+import type { Signal } from '@angular/core'
+
+/**
+ * Angular inject-based API that returns a signal of a map from held key names to their physical `event.code` values.
+ *
+ * Useful for debugging which physical key was pressed (e.g. distinguishing
+ * left vs right Shift via "ShiftLeft" / "ShiftRight").
+ *
+ * @returns Signal of record mapping normalized key names to their `event.code` values
+ *
+ * @example
+ * ```ts
+ * @Component({
+ * template: `
+ * @for (key of heldKeys(); track key) {
+ * {{ key }} {{ heldCodes()[key] }}
+ * }
+ * `,
+ * })
+ * export class KeyDebugComponent {
+ * heldKeys = injectHeldKeys()
+ * heldCodes = injectHeldKeyCodes()
+ * }
+ * ```
+ */
+export function injectHeldKeyCodes(): Signal> {
+ const tracker = getKeyStateTracker()
+ return injectStore(tracker.store, (state) => state.heldCodes)
+}
diff --git a/packages/angular-hotkeys/src/injectHeldKeys.ts b/packages/angular-hotkeys/src/injectHeldKeys.ts
new file mode 100644
index 0000000..5d768a4
--- /dev/null
+++ b/packages/angular-hotkeys/src/injectHeldKeys.ts
@@ -0,0 +1,26 @@
+import { getKeyStateTracker } from '@tanstack/hotkeys'
+import { injectStore } from '@tanstack/angular-store'
+import type { Signal } from '@angular/core'
+
+/**
+ * Angular inject-based API that returns a signal of currently held keyboard keys.
+ *
+ * Subscribes to the global KeyStateTracker and updates whenever keys are
+ * pressed or released.
+ *
+ * @returns Signal of array of currently held key names
+ *
+ * @example
+ * ```ts
+ * @Component({
+ * template: `Currently pressed: {{ heldKeys().join(' + ') || 'None' }}
`,
+ * })
+ * export class KeyDisplayComponent {
+ * heldKeys = injectHeldKeys()
+ * }
+ * ```
+ */
+export function injectHeldKeys(): Signal {
+ const tracker = getKeyStateTracker()
+ return injectStore(tracker.store, (state) => state.heldKeys)
+}
diff --git a/packages/angular-hotkeys/src/injectHotkey.ts b/packages/angular-hotkeys/src/injectHotkey.ts
new file mode 100644
index 0000000..7c7207b
--- /dev/null
+++ b/packages/angular-hotkeys/src/injectHotkey.ts
@@ -0,0 +1,156 @@
+import { effect } from '@angular/core'
+import {
+ detectPlatform,
+ formatHotkey,
+ getHotkeyManager,
+ rawHotkeyToParsedHotkey,
+} from '@tanstack/hotkeys'
+import { injectDefaultHotkeysOptions } from './hotkeys-provider'
+import type {
+ Hotkey,
+ HotkeyCallback,
+ HotkeyOptions,
+ HotkeyRegistrationHandle,
+ RegisterableHotkey,
+} from '@tanstack/hotkeys'
+
+export interface InjectHotkeyOptions extends Omit {
+ /**
+ * The DOM element to attach the event listener to.
+ * Can be a direct DOM element, an accessor (for reactive targets that become
+ * available after mount), or null. Defaults to document.
+ * When using scoped targets, pass an accessor: () => ({ target: elementSignal() })
+ * so the hotkey waits for the element to be attached before registering.
+ */
+ target?: HTMLElement | Document | Window | null
+}
+
+/**
+ * Angular inject-based API for registering a keyboard hotkey.
+ *
+ * Uses the singleton HotkeyManager for efficient event handling.
+ * The callback receives both the keyboard event and a context object
+ * containing the hotkey string and parsed hotkey.
+ *
+ * Call in an injection context (e.g. constructor or field initializer).
+ * Uses effect() to track reactive dependencies and update registration
+ * when options or the callback change.
+ *
+ * @param hotkey - The hotkey string (e.g. 'Mod+S', 'Escape') or getter function
+ * @param callback - The function to call when the hotkey is pressed
+ * @param options - Options for the hotkey behavior, or getter for reactive options
+ *
+ * @example
+ * ```ts
+ * @Component({ ... })
+ * export class SaveButtonComponent {
+ * private readonly saveCount = signal(0)
+ *
+ * constructor() {
+ * injectHotkey('Mod+S', (event, { hotkey }) => {
+ * event.preventDefault()
+ * this.saveCount.update(c => c + 1)
+ * })
+ * }
+ * }
+ * ```
+ *
+ * @example
+ * ```ts
+ * @Component({ ... })
+ * export class ModalComponent {
+ * isOpen = signal(true)
+ *
+ * constructor() {
+ * injectHotkey('Escape', () => this.close(), () => ({ enabled: this.isOpen() }))
+ * }
+ * }
+ * ```
+ *
+ * @example
+ * ```ts
+ * @Component({ ... })
+ * export class EditorComponent {
+ * private readonly editorRef = viewChild>('editorRef')
+ *
+ * constructor() {
+ * injectHotkey('Mod+B', () => this.toggleBold(), () => ({
+ * target: this.editorRef()?.nativeElement ?? null,
+ * }))
+ * }
+ * }
+ * ```
+ */
+export function injectHotkey(
+ hotkey: RegisterableHotkey | (() => RegisterableHotkey),
+ callback: HotkeyCallback,
+ options: InjectHotkeyOptions | (() => InjectHotkeyOptions) = {},
+): void {
+ const defaultOptions = injectDefaultHotkeysOptions()
+ const manager = getHotkeyManager()
+
+ let registration: HotkeyRegistrationHandle | null = null
+
+ effect((onCleanup) => {
+ // Resolve reactive values const resolvedHotkey =
+ const resolvedHotkey = typeof hotkey === 'function' ? hotkey() : hotkey
+ const resolvedOptions = typeof options === 'function' ? options() : options
+
+ const mergedOptions = {
+ ...defaultOptions.hotkey,
+ ...resolvedOptions,
+ } as InjectHotkeyOptions
+
+ // Normalize to hotkey string
+ const platform = mergedOptions.platform ?? detectPlatform()
+ const hotkeyString: Hotkey =
+ typeof resolvedHotkey === 'string'
+ ? resolvedHotkey
+ : (formatHotkey(
+ rawHotkeyToParsedHotkey(resolvedHotkey, platform),
+ ) as Hotkey)
+
+ // Resolve target: when explicitly provided (even as null), use it and skip if null.
+ // When not provided, default to document. Matches React's ref handling.
+ const resolvedTarget =
+ 'target' in mergedOptions
+ ? (mergedOptions.target ?? null)
+ : typeof document !== 'undefined'
+ ? document
+ : null
+
+ if (!resolvedTarget) {
+ return
+ }
+
+ // Unregister previous registration if it exists
+ if (registration?.isActive) {
+ registration.unregister()
+ registration = null
+ }
+
+ // Extract options without target (target is handled separately)
+ const { target: _target, ...optionsWithoutTarget } = mergedOptions
+
+ // Register the hotkey
+ registration = manager.register(hotkeyString, callback, {
+ ...optionsWithoutTarget,
+ target: resolvedTarget,
+ })
+
+ // Update callback and options on every effect run
+ if (registration.isActive) {
+ registration.callback = callback
+ registration.setOptions(optionsWithoutTarget)
+ }
+
+ // Cleanup on disposal
+ onCleanup(() => {
+ if (registration?.isActive) {
+ registration.unregister()
+ registration = null
+ }
+ })
+ })
+
+}
diff --git a/packages/angular-hotkeys/src/injectHotkeyRecorder.ts b/packages/angular-hotkeys/src/injectHotkeyRecorder.ts
new file mode 100644
index 0000000..e89cf5b
--- /dev/null
+++ b/packages/angular-hotkeys/src/injectHotkeyRecorder.ts
@@ -0,0 +1,92 @@
+import { DestroyRef, effect, inject, type Signal } from '@angular/core'
+import { HotkeyRecorder } from '@tanstack/hotkeys'
+import { injectDefaultHotkeysOptions } from './hotkeys-provider'
+import type { Hotkey, HotkeyRecorderOptions } from '@tanstack/hotkeys'
+import { injectStore } from '@tanstack/angular-store'
+
+export interface AngularHotkeyRecorder {
+ /** Whether recording is currently active */
+ isRecording: () => boolean
+ /** The currently recorded hotkey (for live preview) */
+ recordedHotkey: () => Hotkey | null
+ /** Start recording a new hotkey */
+ startRecording: () => void
+ /** Stop recording (same as cancel) */
+ stopRecording: () => void
+ /** Cancel recording without saving */
+ cancelRecording: () => void
+}
+
+/**
+ * Angular inject-based API for recording keyboard shortcuts.
+ *
+ * Thin wrapper around the framework-agnostic HotkeyRecorder class: captures
+ * keyboard events, converts them to hotkey strings, and handles Escape to
+ * cancel or Backspace/Delete to clear.
+ *
+ * @param options - Configuration options for the recorder (or signal/getter)
+ * @returns Object with recording state signals and control functions
+ *
+ * @example
+ * ```ts
+ * @Component({ ... })
+ * export class ShortcutSettingsComponent {
+ * shortcut = signal('Mod+S')
+ * recorder = injectHotkeyRecorder({
+ * onRecord: (hotkey) => this.shortcut.set(hotkey),
+ * onCancel: () => console.log('Recording cancelled'),
+ * })
+ *
+ * constructor() {
+ * injectHotkey(
+ * () => this.shortcut(),
+ * () => this.handleSave(),
+ * () => ({ enabled: !this.recorder.isRecording() }),
+ * )
+ * }
+ * }
+ * ```
+ */
+export function injectHotkeyRecorder(
+ options: HotkeyRecorderOptions | Signal,
+): AngularHotkeyRecorder {
+ const defaultOptions = injectDefaultHotkeysOptions()
+ const destroyRef = inject(DestroyRef)
+
+ const resolvedOptions = typeof options === 'function' ? options() : options
+ const mergedOptions = {
+ ...defaultOptions.hotkeyRecorder,
+ ...resolvedOptions,
+ } as HotkeyRecorderOptions
+
+ // Create recorder once synchronously (matches React's useRef pattern)
+ const recorder = new HotkeyRecorder(mergedOptions)
+
+ // Subscribe to recorder state using useStore (same pattern as useHotkeyRecorder)
+ const isRecording = injectStore(recorder.store, (state) => state.isRecording)
+ const recordedHotkey = injectStore(
+ recorder.store,
+ (state) => state.recordedHotkey
+ )
+
+ // Sync options on every effect run (matches React's sync on render)
+ effect(() => {
+ const resolved = typeof options === 'function' ? options() : options
+ recorder.setOptions({
+ ...defaultOptions.hotkeyRecorder,
+ ...resolved,
+ } as HotkeyRecorderOptions)
+ })
+
+ destroyRef.onDestroy(() => {
+ recorder.destroy()
+ })
+
+ return {
+ isRecording,
+ recordedHotkey,
+ startRecording: () => recorder.start(),
+ stopRecording: () => recorder.stop(),
+ cancelRecording: () => recorder.cancel(),
+ }
+}
diff --git a/packages/angular-hotkeys/src/injectHotkeySequence.ts b/packages/angular-hotkeys/src/injectHotkeySequence.ts
new file mode 100644
index 0000000..dff6210
--- /dev/null
+++ b/packages/angular-hotkeys/src/injectHotkeySequence.ts
@@ -0,0 +1,87 @@
+import { effect } from '@angular/core'
+import { getSequenceManager } from '@tanstack/hotkeys'
+import { injectDefaultHotkeysOptions } from './hotkeys-provider'
+import type {
+ HotkeyCallback,
+ HotkeySequence,
+ SequenceOptions,
+} from '@tanstack/hotkeys'
+
+
+export interface InjectHotkeySequenceOptions extends Omit<
+ SequenceOptions,
+ 'enabled'
+> {
+ /** Whether the sequence is enabled. Defaults to true. */
+ enabled?: boolean
+}
+
+
+/**
+ * Angular inject-based API for registering a keyboard shortcut sequence (Vim-style).
+ *
+ * Allows you to register multi-key sequences like 'g g' or 'd d' that trigger
+ * when the full sequence is pressed within a timeout.
+ *
+ * @param sequence - Array of hotkey strings that form the sequence (or getter function)
+ * @param callback - Function to call when the sequence is completed
+ * @param options - Options for the sequence behavior (or getter function)
+ *
+ * @example
+ * ```ts
+ * @Component({ ... })
+ * export class VimEditorComponent {
+ * lastSequence = signal(null)
+ *
+ * constructor() {
+ * injectHotkeySequence(['G', 'G'], () => this.lastSequence.set('gg → Go to top'))
+ * injectHotkeySequence(['D', 'D'], () => this.lastSequence.set('dd → Delete line'))
+ * injectHotkeySequence(['C', 'I', 'W'], () => this.lastSequence.set('ciw'), { timeout: 500 })
+ * }
+ * }
+ * ```
+ */
+export function injectHotkeySequence(
+ sequence: HotkeySequence | (() => HotkeySequence),
+ callback: HotkeyCallback,
+ options:
+ | InjectHotkeySequenceOptions
+ | (() => InjectHotkeySequenceOptions) = {},
+): void {
+ const defaultOptions = injectDefaultHotkeysOptions()
+
+ effect((onCleanup) => {
+ // Resolve reactive values
+ const resolvedSequence =
+ typeof sequence === 'function' ? sequence() : sequence
+ const resolvedOptions = typeof options === 'function' ? options() : options
+
+ const mergedOptions = {
+ ...defaultOptions.hotkeySequence,
+ ...resolvedOptions,
+ } as InjectHotkeySequenceOptions
+
+ const { enabled = true, ...sequenceOptions } = mergedOptions
+
+ if (!enabled || resolvedSequence.length === 0) {
+ return
+ }
+
+ const manager = getSequenceManager()
+
+ // Build options object conditionally to avoid overwriting manager defaults with undefined
+ const registerOptions: SequenceOptions = { enabled: true }
+ if (sequenceOptions.timeout !== undefined)
+ registerOptions.timeout = sequenceOptions.timeout
+ if (sequenceOptions.platform !== undefined)
+ registerOptions.platform = sequenceOptions.platform
+
+ const unregister = manager.register(
+ resolvedSequence,
+ callback,
+ registerOptions,
+ )
+
+ onCleanup(unregister)
+ })
+}
diff --git a/packages/angular-hotkeys/src/injectKeyHold.ts b/packages/angular-hotkeys/src/injectKeyHold.ts
new file mode 100644
index 0000000..5810eb3
--- /dev/null
+++ b/packages/angular-hotkeys/src/injectKeyHold.ts
@@ -0,0 +1,53 @@
+import { computed, type Signal } from '@angular/core'
+import { injectStore } from '@tanstack/angular-store'
+import { getKeyStateTracker } from '@tanstack/hotkeys'
+import type { HeldKey } from '@tanstack/hotkeys'
+
+/**
+ * Angular inject-based API that returns a signal that is true when the given key is held.
+ *
+ * Subscribes to the global KeyStateTracker and uses a computed to determine
+ * if the specified key is held.
+ *
+ * @param key - The key to check (e.g. 'Shift', 'Control', 'Space') - can be a getter function
+ * @returns Signal that returns true if the key is currently held down
+ *
+ * @example
+ * ```ts
+ * @Component({
+ * template: `{{ isShiftHeld() ? 'Shift is pressed!' : 'Press Shift' }}`,
+ * })
+ * export class ShiftIndicatorComponent {
+ * isShiftHeld = injectKeyHold('Shift')
+ * }
+ * ```
+ *
+ * @example
+ * ```ts
+ * @Component({
+ * template: `
+ * Ctrl
+ * Shift
+ * `,
+ * })
+ * export class ModifierIndicatorsComponent {
+ * ctrl = injectKeyHold('Control')
+ * shift = injectKeyHold('Shift')
+ * }
+ * ```
+ */
+export function injectKeyHold(
+ key: HeldKey | (() => HeldKey),
+): Signal {
+ const tracker = getKeyStateTracker()
+ const heldKeysSelector = injectStore(tracker.store, (state) => state.heldKeys)
+
+ return computed(() => {
+ const resolvedKey = typeof key === 'function' ? key() : key
+
+ const normalizedKey = resolvedKey.toLowerCase()
+ return heldKeysSelector().some(
+ (heldKey) => heldKey.toLowerCase() === normalizedKey,
+ )
+ })
+}
diff --git a/packages/angular-hotkeys/tsconfig.docs.json b/packages/angular-hotkeys/tsconfig.docs.json
new file mode 100644
index 0000000..08866d6
--- /dev/null
+++ b/packages/angular-hotkeys/tsconfig.docs.json
@@ -0,0 +1,9 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "paths": {
+ "@tanstack/hotkeys": ["../hotkeys/src"]
+ }
+ },
+ "include": ["src"]
+}
diff --git a/packages/angular-hotkeys/tsconfig.json b/packages/angular-hotkeys/tsconfig.json
new file mode 100644
index 0000000..03e93c7
--- /dev/null
+++ b/packages/angular-hotkeys/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
+ "lib": ["DOM", "DOM.Iterable", "ES2022"]
+ },
+ "include": ["src"],
+ "exclude": ["dist", "node_modules"]
+}
diff --git a/packages/angular-hotkeys/tsdown.config.ts b/packages/angular-hotkeys/tsdown.config.ts
new file mode 100644
index 0000000..71071cb
--- /dev/null
+++ b/packages/angular-hotkeys/tsdown.config.ts
@@ -0,0 +1,16 @@
+import { defineConfig } from 'tsdown'
+
+export default defineConfig({
+ entry: ['./src/index.ts'],
+ format: ['esm', 'cjs'],
+ unbundle: true,
+ dts: true,
+ sourcemap: true,
+ clean: true,
+ minify: false,
+ fixedExtension: false,
+ exports: true,
+ publint: {
+ strict: true,
+ },
+})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a663c03..7eb58c9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -19,10 +19,10 @@ importers:
version: 12.0.0(size-limit@12.0.0(jiti@2.6.1))
'@svitejs/changesets-changelog-github-compact':
specifier: ^1.2.0
- version: 1.2.0
+ version: 1.2.0(encoding@0.1.13)
'@tanstack/eslint-config':
specifier: 0.4.0
- version: 0.4.0(@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ version: 0.4.0(@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
'@tanstack/typedoc-config':
specifier: 0.3.3
version: 0.3.3(typescript@5.9.3)
@@ -34,10 +34,10 @@ importers:
version: 25.3.0
eslint:
specifier: ^9.32.2
- version: 9.39.3(jiti@2.6.1)
+ version: 9.39.2(jiti@2.6.1)
eslint-plugin-unused-imports:
specifier: ^4.4.1
- version: 4.4.1(@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))
+ version: 4.4.1(@typescript-eslint/eslint-plugin@8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))
happy-dom:
specifier: ^20.7.0
version: 20.7.0
@@ -58,7 +58,7 @@ importers:
version: 3.8.1
prettier-plugin-svelte:
specifier: ^3.5.0
- version: 3.5.0(prettier@3.8.1)(svelte@5.53.1)
+ version: 3.5.0(prettier@3.8.1)(svelte@5.50.3)
publint:
specifier: ^0.3.17
version: 0.3.17
@@ -73,13 +73,363 @@ importers:
version: 0.2.15
tsdown:
specifier: ^0.20.3
- version: 0.20.3(oxc-resolver@11.18.0)(publint@0.3.17)(typescript@5.9.3)
+ version: 0.20.3(oxc-resolver@11.17.1)(publint@0.3.17)(typescript@5.9.3)
typescript:
specifier: 5.9.3
version: 5.9.3
vitest:
specifier: ^4.0.18
- version: 4.0.18(@types/node@25.3.0)(happy-dom@20.7.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 4.0.18(@types/node@25.3.0)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
+
+ examples/angular/injectHeldKeys:
+ dependencies:
+ '@angular/common':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
+ '@angular/compiler':
+ specifier: ^19.2.0
+ version: 19.2.18
+ '@angular/core':
+ specifier: ^19.2.0
+ version: 19.2.18(rxjs@7.8.2)(zone.js@0.15.1)
+ '@angular/forms':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
+ '@angular/platform-browser':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))
+ '@angular/platform-browser-dynamic':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.18)(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))
+ '@angular/router':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
+ '@tanstack/angular-hotkeys':
+ specifier: workspace:*
+ version: link:../../../packages/angular-hotkeys
+ rxjs:
+ specifier: ~7.8.0
+ version: 7.8.2
+ tslib:
+ specifier: ^2.3.0
+ version: 2.8.1
+ zone.js:
+ specifier: ~0.15.0
+ version: 0.15.1
+ devDependencies:
+ '@angular-devkit/build-angular':
+ specifier: ^19.2.20
+ version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.7.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
+ '@angular/cli':
+ specifier: ^19.2.20
+ version: 19.2.20(@types/node@25.3.0)(chokidar@4.0.3)
+ '@angular/compiler-cli':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
+ '@types/jasmine':
+ specifier: ~5.1.0
+ version: 5.1.15
+ jasmine-core:
+ specifier: ~5.6.0
+ version: 5.6.0
+ karma:
+ specifier: ~6.4.0
+ version: 6.4.4
+ karma-chrome-launcher:
+ specifier: ~3.2.0
+ version: 3.2.0
+ karma-coverage:
+ specifier: ~2.2.0
+ version: 2.2.1
+ karma-jasmine:
+ specifier: ~5.1.0
+ version: 5.1.0(karma@6.4.4)
+ karma-jasmine-html-reporter:
+ specifier: ~2.1.0
+ version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4)
+ typescript:
+ specifier: ~5.7.2
+ version: 5.7.3
+
+ examples/angular/injectHotkey:
+ dependencies:
+ '@angular/common':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
+ '@angular/compiler':
+ specifier: ^19.2.0
+ version: 19.2.18
+ '@angular/core':
+ specifier: ^19.2.0
+ version: 19.2.18(rxjs@7.8.2)(zone.js@0.15.1)
+ '@angular/forms':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
+ '@angular/platform-browser':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))
+ '@angular/platform-browser-dynamic':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.18)(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))
+ '@angular/router':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
+ '@tanstack/angular-hotkeys':
+ specifier: workspace:*
+ version: link:../../../packages/angular-hotkeys
+ rxjs:
+ specifier: ~7.8.0
+ version: 7.8.2
+ tslib:
+ specifier: ^2.3.0
+ version: 2.8.1
+ zone.js:
+ specifier: ~0.15.0
+ version: 0.15.1
+ devDependencies:
+ '@angular-devkit/build-angular':
+ specifier: ^19.2.20
+ version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.7.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
+ '@angular/cli':
+ specifier: ^19.2.20
+ version: 19.2.20(@types/node@25.3.0)(chokidar@4.0.3)
+ '@angular/compiler-cli':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
+ '@types/jasmine':
+ specifier: ~5.1.0
+ version: 5.1.15
+ jasmine-core:
+ specifier: ~5.6.0
+ version: 5.6.0
+ karma:
+ specifier: ~6.4.0
+ version: 6.4.4
+ karma-chrome-launcher:
+ specifier: ~3.2.0
+ version: 3.2.0
+ karma-coverage:
+ specifier: ~2.2.0
+ version: 2.2.1
+ karma-jasmine:
+ specifier: ~5.1.0
+ version: 5.1.0(karma@6.4.4)
+ karma-jasmine-html-reporter:
+ specifier: ~2.1.0
+ version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4)
+ typescript:
+ specifier: ~5.7.2
+ version: 5.7.3
+
+ examples/angular/injectHotkeyRecorder:
+ dependencies:
+ '@angular/common':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
+ '@angular/compiler':
+ specifier: ^19.2.0
+ version: 19.2.18
+ '@angular/core':
+ specifier: ^19.2.0
+ version: 19.2.18(rxjs@7.8.2)(zone.js@0.15.1)
+ '@angular/forms':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
+ '@angular/platform-browser':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))
+ '@angular/platform-browser-dynamic':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.18)(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))
+ '@angular/router':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
+ '@tanstack/angular-hotkeys':
+ specifier: workspace:*
+ version: link:../../../packages/angular-hotkeys
+ rxjs:
+ specifier: ~7.8.0
+ version: 7.8.2
+ tslib:
+ specifier: ^2.3.0
+ version: 2.8.1
+ zone.js:
+ specifier: ~0.15.0
+ version: 0.15.1
+ devDependencies:
+ '@angular-devkit/build-angular':
+ specifier: ^19.2.20
+ version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.7.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
+ '@angular/cli':
+ specifier: ^19.2.20
+ version: 19.2.20(@types/node@25.3.0)(chokidar@4.0.3)
+ '@angular/compiler-cli':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
+ '@types/jasmine':
+ specifier: ~5.1.0
+ version: 5.1.15
+ jasmine-core:
+ specifier: ~5.6.0
+ version: 5.6.0
+ karma:
+ specifier: ~6.4.0
+ version: 6.4.4
+ karma-chrome-launcher:
+ specifier: ~3.2.0
+ version: 3.2.0
+ karma-coverage:
+ specifier: ~2.2.0
+ version: 2.2.1
+ karma-jasmine:
+ specifier: ~5.1.0
+ version: 5.1.0(karma@6.4.4)
+ karma-jasmine-html-reporter:
+ specifier: ~2.1.0
+ version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4)
+ typescript:
+ specifier: ~5.7.2
+ version: 5.7.3
+
+ examples/angular/injectHotkeySequence:
+ dependencies:
+ '@angular/common':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
+ '@angular/compiler':
+ specifier: ^19.2.0
+ version: 19.2.18
+ '@angular/core':
+ specifier: ^19.2.0
+ version: 19.2.18(rxjs@7.8.2)(zone.js@0.15.1)
+ '@angular/forms':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
+ '@angular/platform-browser':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))
+ '@angular/platform-browser-dynamic':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.18)(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))
+ '@angular/router':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
+ '@tanstack/angular-hotkeys':
+ specifier: workspace:*
+ version: link:../../../packages/angular-hotkeys
+ rxjs:
+ specifier: ~7.8.0
+ version: 7.8.2
+ tslib:
+ specifier: ^2.3.0
+ version: 2.8.1
+ zone.js:
+ specifier: ~0.15.0
+ version: 0.15.1
+ devDependencies:
+ '@angular-devkit/build-angular':
+ specifier: ^19.2.20
+ version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.7.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
+ '@angular/cli':
+ specifier: ^19.2.20
+ version: 19.2.20(@types/node@25.3.0)(chokidar@4.0.3)
+ '@angular/compiler-cli':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
+ '@types/jasmine':
+ specifier: ~5.1.0
+ version: 5.1.15
+ jasmine-core:
+ specifier: ~5.6.0
+ version: 5.6.0
+ karma:
+ specifier: ~6.4.0
+ version: 6.4.4
+ karma-chrome-launcher:
+ specifier: ~3.2.0
+ version: 3.2.0
+ karma-coverage:
+ specifier: ~2.2.0
+ version: 2.2.1
+ karma-jasmine:
+ specifier: ~5.1.0
+ version: 5.1.0(karma@6.4.4)
+ karma-jasmine-html-reporter:
+ specifier: ~2.1.0
+ version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4)
+ typescript:
+ specifier: ~5.7.2
+ version: 5.7.3
+
+ examples/angular/injectKeyHold:
+ dependencies:
+ '@angular/common':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
+ '@angular/compiler':
+ specifier: ^19.2.0
+ version: 19.2.18
+ '@angular/core':
+ specifier: ^19.2.0
+ version: 19.2.18(rxjs@7.8.2)(zone.js@0.15.1)
+ '@angular/forms':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
+ '@angular/platform-browser':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))
+ '@angular/platform-browser-dynamic':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.18)(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))
+ '@angular/router':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
+ '@tanstack/angular-hotkeys':
+ specifier: workspace:*
+ version: link:../../../packages/angular-hotkeys
+ rxjs:
+ specifier: ~7.8.0
+ version: 7.8.2
+ tslib:
+ specifier: ^2.3.0
+ version: 2.8.1
+ zone.js:
+ specifier: ~0.15.0
+ version: 0.15.1
+ devDependencies:
+ '@angular-devkit/build-angular':
+ specifier: ^19.2.20
+ version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.7.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
+ '@angular/cli':
+ specifier: ^19.2.20
+ version: 19.2.20(@types/node@25.3.0)(chokidar@4.0.3)
+ '@angular/compiler-cli':
+ specifier: ^19.2.0
+ version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
+ '@types/jasmine':
+ specifier: ~5.1.0
+ version: 5.1.15
+ jasmine-core:
+ specifier: ~5.6.0
+ version: 5.6.0
+ karma:
+ specifier: ~6.4.0
+ version: 6.4.4
+ karma-chrome-launcher:
+ specifier: ~3.2.0
+ version: 3.2.0
+ karma-coverage:
+ specifier: ~2.2.0
+ version: 2.2.1
+ karma-jasmine:
+ specifier: ~5.1.0
+ version: 5.1.0(karma@6.4.4)
+ karma-jasmine-html-reporter:
+ specifier: ~2.1.0
+ version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4)
+ typescript:
+ specifier: ~5.7.2
+ version: 5.7.3
examples/preact/useHeldKeys:
dependencies:
@@ -92,7 +442,7 @@ importers:
devDependencies:
'@preact/preset-vite':
specifier: ^2.10.2
- version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.58.0)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.57.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
'@tanstack/preact-devtools':
specifier: 0.9.6
version: 0.9.6(csstype@3.2.3)(preact@10.28.4)(solid-js@1.9.11)
@@ -104,7 +454,7 @@ importers:
version: 5.9.3
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
examples/preact/useHotkey:
dependencies:
@@ -117,7 +467,7 @@ importers:
devDependencies:
'@preact/preset-vite':
specifier: ^2.10.2
- version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.58.0)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.57.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
'@tanstack/preact-devtools':
specifier: 0.9.6
version: 0.9.6(csstype@3.2.3)(preact@10.28.4)(solid-js@1.9.11)
@@ -129,7 +479,7 @@ importers:
version: 5.9.3
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
examples/preact/useHotkeyRecorder:
dependencies:
@@ -142,7 +492,7 @@ importers:
devDependencies:
'@preact/preset-vite':
specifier: ^2.10.2
- version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.58.0)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.57.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
'@tanstack/preact-devtools':
specifier: 0.9.6
version: 0.9.6(csstype@3.2.3)(preact@10.28.4)(solid-js@1.9.11)
@@ -154,7 +504,7 @@ importers:
version: 5.9.3
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
examples/preact/useHotkeySequence:
dependencies:
@@ -167,7 +517,7 @@ importers:
devDependencies:
'@preact/preset-vite':
specifier: ^2.10.2
- version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.58.0)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.57.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
'@tanstack/preact-devtools':
specifier: 0.9.6
version: 0.9.6(csstype@3.2.3)(preact@10.28.4)(solid-js@1.9.11)
@@ -179,7 +529,7 @@ importers:
version: 5.9.3
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
examples/preact/useKeyhold:
dependencies:
@@ -192,7 +542,7 @@ importers:
devDependencies:
'@preact/preset-vite':
specifier: ^2.10.2
- version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.58.0)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.57.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
'@tanstack/preact-devtools':
specifier: 0.9.6
version: 0.9.6(csstype@3.2.3)(preact@10.28.4)(solid-js@1.9.11)
@@ -204,7 +554,7 @@ importers:
version: 5.9.3
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
examples/react/useHeldKeys:
dependencies:
@@ -232,13 +582,13 @@ importers:
version: 19.2.3(@types/react@19.2.14)
'@vitejs/plugin-react':
specifier: ^5.1.4
- version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
typescript:
specifier: 5.9.3
version: 5.9.3
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
examples/react/useHotkey:
dependencies:
@@ -266,13 +616,13 @@ importers:
version: 19.2.3(@types/react@19.2.14)
'@vitejs/plugin-react':
specifier: ^5.1.4
- version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
typescript:
specifier: 5.9.3
version: 5.9.3
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
examples/react/useHotkeyRecorder:
dependencies:
@@ -300,13 +650,13 @@ importers:
version: 19.2.3(@types/react@19.2.14)
'@vitejs/plugin-react':
specifier: ^5.1.4
- version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
typescript:
specifier: 5.9.3
version: 5.9.3
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
examples/react/useHotkeySequence:
dependencies:
@@ -334,13 +684,13 @@ importers:
version: 19.2.3(@types/react@19.2.14)
'@vitejs/plugin-react':
specifier: ^5.1.4
- version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
typescript:
specifier: 5.9.3
version: 5.9.3
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
examples/react/useKeyhold:
dependencies:
@@ -368,13 +718,13 @@ importers:
version: 19.2.3(@types/react@19.2.14)
'@vitejs/plugin-react':
specifier: ^5.1.4
- version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
typescript:
specifier: 5.9.3
version: 5.9.3
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
examples/solid/createHeldKeys:
dependencies:
@@ -396,10 +746,10 @@ importers:
devDependencies:
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
vite-plugin-solid:
specifier: ^2.11.10
- version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
examples/solid/createHotkey:
dependencies:
@@ -427,10 +777,10 @@ importers:
version: 5.9.3
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
vite-plugin-solid:
specifier: ^2.11.10
- version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
examples/solid/createHotkeyRecorder:
dependencies:
@@ -452,10 +802,10 @@ importers:
devDependencies:
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
vite-plugin-solid:
specifier: ^2.11.10
- version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
examples/solid/createHotkeySequence:
dependencies:
@@ -477,10 +827,10 @@ importers:
devDependencies:
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
vite-plugin-solid:
specifier: ^2.11.10
- version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
examples/solid/createKeyHold:
dependencies:
@@ -502,10 +852,29 @@ importers:
devDependencies:
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
vite-plugin-solid:
specifier: ^2.11.10
- version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
+
+ packages/angular-hotkeys:
+ dependencies:
+ '@tanstack/angular-store':
+ specifier: ^0.8.0
+ version: 0.8.1(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))
+ '@tanstack/hotkeys':
+ specifier: workspace:*
+ version: link:../hotkeys
+ devDependencies:
+ '@angular/common':
+ specifier: ^19.0.0
+ version: 19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
+ '@angular/core':
+ specifier: ^19.0.0
+ version: 19.2.18(rxjs@7.8.2)(zone.js@0.15.1)
+ typescript:
+ specifier: 5.9.3
+ version: 5.9.3
packages/hotkeys:
dependencies:
@@ -536,7 +905,7 @@ importers:
devDependencies:
vite-plugin-solid:
specifier: ^2.11.10
- version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
packages/preact-hotkeys:
dependencies:
@@ -549,7 +918,7 @@ importers:
devDependencies:
'@preact/preset-vite':
specifier: ^2.10.2
- version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.58.0)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.57.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
'@testing-library/preact':
specifier: ^3.2.4
version: 3.2.4(preact@10.28.4)
@@ -568,7 +937,7 @@ importers:
devDependencies:
'@preact/preset-vite':
specifier: ^2.10.2
- version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.58.0)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.57.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
preact:
specifier: ^10.27.2
version: 10.28.4
@@ -584,7 +953,7 @@ importers:
devDependencies:
'@eslint-react/eslint-plugin':
specifier: ^2.13.0
- version: 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ version: 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
'@testing-library/react':
specifier: ^16.3.2
version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -593,13 +962,13 @@ importers:
version: 19.2.14
'@vitejs/plugin-react':
specifier: ^5.1.4
- version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
eslint-plugin-react-compiler:
specifier: 19.1.0-rc.2
- version: 19.1.0-rc.2(eslint@9.39.3(jiti@2.6.1))
+ version: 19.1.0-rc.2(eslint@9.39.2(jiti@2.6.1))
eslint-plugin-react-hooks:
specifier: ^7.0.1
- version: 7.0.1(eslint@9.39.3(jiti@2.6.1))
+ version: 7.0.1(eslint@9.39.2(jiti@2.6.1))
react:
specifier: ^19.2.4
version: 19.2.4
@@ -624,19 +993,19 @@ importers:
devDependencies:
'@eslint-react/eslint-plugin':
specifier: ^2.13.0
- version: 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ version: 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
'@types/react':
specifier: ^19.2.14
version: 19.2.14
'@vitejs/plugin-react':
specifier: ^5.1.4
- version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
eslint-plugin-react-compiler:
specifier: 19.1.0-rc.2
- version: 19.1.0-rc.2(eslint@9.39.3(jiti@2.6.1))
+ version: 19.1.0-rc.2(eslint@9.39.2(jiti@2.6.1))
eslint-plugin-react-hooks:
specifier: ^7.0.1
- version: 7.0.1(eslint@9.39.3(jiti@2.6.1))
+ version: 7.0.1(eslint@9.39.2(jiti@2.6.1))
react:
specifier: ^19.2.4
version: 19.2.4
@@ -661,7 +1030,7 @@ importers:
version: 1.9.11
vite-plugin-solid:
specifier: ^2.11.10
- version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
packages/solid-hotkeys-devtools:
dependencies:
@@ -677,13 +1046,190 @@ importers:
version: 1.9.11
vite-plugin-solid:
specifier: ^2.11.10
- version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
packages:
'@adobe/css-tools@4.4.4':
resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==}
+ '@ampproject/remapping@2.3.0':
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
+
+ '@angular-devkit/architect@0.1902.20':
+ resolution: {integrity: sha512-tEM8PX9RTIvgEPJH/9nDaGlhbjZf9BBFS2FXKuOwKB+NFvfZuuDpPH7CzJKyyvkQLPtoNh2Y9C92m2f+RXsBmQ==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+
+ '@angular-devkit/build-angular@19.2.20':
+ resolution: {integrity: sha512-m7J+k0lJEFvr6STGUQROx6TyoGn0WQsQiooO8WTkM8QUWKxSUmq4WImlPSq6y+thc+Jzx1EBw3yn73+phNIZag==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+ peerDependencies:
+ '@angular/compiler-cli': ^19.0.0 || ^19.2.0-next.0
+ '@angular/localize': ^19.0.0 || ^19.2.0-next.0
+ '@angular/platform-server': ^19.0.0 || ^19.2.0-next.0
+ '@angular/service-worker': ^19.0.0 || ^19.2.0-next.0
+ '@angular/ssr': ^19.2.20
+ '@web/test-runner': ^0.20.0
+ browser-sync: ^3.0.2
+ jest: ^29.5.0
+ jest-environment-jsdom: ^29.5.0
+ karma: ^6.3.0
+ ng-packagr: ^19.0.0 || ^19.2.0-next.0
+ protractor: ^7.0.0
+ tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0
+ typescript: '>=5.5 <5.9'
+ peerDependenciesMeta:
+ '@angular/localize':
+ optional: true
+ '@angular/platform-server':
+ optional: true
+ '@angular/service-worker':
+ optional: true
+ '@angular/ssr':
+ optional: true
+ '@web/test-runner':
+ optional: true
+ browser-sync:
+ optional: true
+ jest:
+ optional: true
+ jest-environment-jsdom:
+ optional: true
+ karma:
+ optional: true
+ ng-packagr:
+ optional: true
+ protractor:
+ optional: true
+ tailwindcss:
+ optional: true
+
+ '@angular-devkit/build-webpack@0.1902.20':
+ resolution: {integrity: sha512-T8RLKZOR0+l3FBMBTUQk83I/Dr5RpNPCOE6tWqGjAMRPKoL1m5BbqhkQ7ygnyd8/ZRz/x1RUVM08l0AeuzWUmA==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+ peerDependencies:
+ webpack: ^5.30.0
+ webpack-dev-server: ^5.0.2
+
+ '@angular-devkit/core@19.2.20':
+ resolution: {integrity: sha512-4AAmHlv+H1/2Nmsp6QsX8YQxjC/v5QAzc+76He7K/x3iIuLCntQE2BYxonSZMiQ3M8gc/yxTfyZoPYjSDDvWMA==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+ peerDependencies:
+ chokidar: ^4.0.0
+ peerDependenciesMeta:
+ chokidar:
+ optional: true
+
+ '@angular-devkit/schematics@19.2.20':
+ resolution: {integrity: sha512-o2eexF1fLZU93V3utiQLNgyNaGvFhDqpITNQcI1qzv2ZkvFHg9WZjFtZKtm805JAE/DND8oAJ1p+BoxU++Qg8g==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+
+ '@angular/build@19.2.20':
+ resolution: {integrity: sha512-8bQ1afN8AJ6N9lJJgxYF08M0gp4R/4SIedSJfSLohscgHumYJ1mITEygoB1JK5O9CEKlr4YyLYfgay8xr92wbQ==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+ peerDependencies:
+ '@angular/compiler': ^19.0.0 || ^19.2.0-next.0
+ '@angular/compiler-cli': ^19.0.0 || ^19.2.0-next.0
+ '@angular/localize': ^19.0.0 || ^19.2.0-next.0
+ '@angular/platform-server': ^19.0.0 || ^19.2.0-next.0
+ '@angular/service-worker': ^19.0.0 || ^19.2.0-next.0
+ '@angular/ssr': ^19.2.20
+ karma: ^6.4.0
+ less: ^4.2.0
+ ng-packagr: ^19.0.0 || ^19.2.0-next.0
+ postcss: ^8.4.0
+ tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0
+ typescript: '>=5.5 <5.9'
+ peerDependenciesMeta:
+ '@angular/localize':
+ optional: true
+ '@angular/platform-server':
+ optional: true
+ '@angular/service-worker':
+ optional: true
+ '@angular/ssr':
+ optional: true
+ karma:
+ optional: true
+ less:
+ optional: true
+ ng-packagr:
+ optional: true
+ postcss:
+ optional: true
+ tailwindcss:
+ optional: true
+
+ '@angular/cli@19.2.20':
+ resolution: {integrity: sha512-3vw49xDGqOi63FES/6D+Lw0Sl42FSZKowUxBMY0CnXD8L93Qwvcf4ASFmUoNJRSTOJuuife1+55vY62cpOWBdg==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+ hasBin: true
+
+ '@angular/common@19.2.18':
+ resolution: {integrity: sha512-CrV02Omzw/QtfjlEVXVPJVXipdx83NuA+qSASZYrxrhKFusUZyK3P/Zznqg+wiAeNDbedQwMUVqoAARHf0xQrw==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
+ peerDependencies:
+ '@angular/core': 19.2.18
+ rxjs: ^6.5.3 || ^7.4.0
+
+ '@angular/compiler-cli@19.2.18':
+ resolution: {integrity: sha512-N4TMtLfImJIoMaRL6mx7885UBeQidywptHH6ACZj71Ar6++DBc1mMlcwuvbeJCd3r3y8MQ5nLv5PZSN/tHr13w==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
+ hasBin: true
+ peerDependencies:
+ '@angular/compiler': 19.2.18
+ typescript: '>=5.5 <5.9'
+
+ '@angular/compiler@19.2.18':
+ resolution: {integrity: sha512-3MscvODxRVxc3Cs0ZlHI5Pk5rEvE80otfvxZTMksOZuPlv1B+S8MjWfc3X3jk9SbyUEzODBEH55iCaBHD48V3g==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
+
+ '@angular/core@19.2.18':
+ resolution: {integrity: sha512-+QRrf0Igt8ccUWXHA+7doK5W6ODyhHdqVyblSlcQ8OciwkzIIGGEYNZom5OZyWMh+oI54lcSeyV2O3xaDepSrQ==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
+ peerDependencies:
+ rxjs: ^6.5.3 || ^7.4.0
+ zone.js: ~0.15.0
+
+ '@angular/forms@19.2.18':
+ resolution: {integrity: sha512-pe40934jWhoS7DyGl7jyZdoj1gvBgur2t1zrJD+csEkTitYnW14+La2Pv6SW1pNX5nIzFsgsS9Nex1KcH5S6Tw==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
+ peerDependencies:
+ '@angular/common': 19.2.18
+ '@angular/core': 19.2.18
+ '@angular/platform-browser': 19.2.18
+ rxjs: ^6.5.3 || ^7.4.0
+
+ '@angular/platform-browser-dynamic@19.2.18':
+ resolution: {integrity: sha512-wqDtK2yVN5VDqVeOSOfqELdu40fyoIDknBGSxA27CEXzFVdMWJyIpuvUi+GMa+9eGjlS+1uVVBaRwxmnuvHj+A==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
+ peerDependencies:
+ '@angular/common': 19.2.18
+ '@angular/compiler': 19.2.18
+ '@angular/core': 19.2.18
+ '@angular/platform-browser': 19.2.18
+
+ '@angular/platform-browser@19.2.18':
+ resolution: {integrity: sha512-eahtsHPyXTYLARs9YOlXhnXGgzw0wcyOcDkBvNWK/3lA0NHIgIHmQgXAmBo+cJ+g9skiEQTD2OmSrrwbFKWJkw==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
+ peerDependencies:
+ '@angular/animations': 19.2.18
+ '@angular/common': 19.2.18
+ '@angular/core': 19.2.18
+ peerDependenciesMeta:
+ '@angular/animations':
+ optional: true
+
+ '@angular/router@19.2.18':
+ resolution: {integrity: sha512-7cimxtPODSwokFQ0TRYzX0ad8Yjrl0MJfzaDCJejd1n/q7RZ7KZmHd0DS/LkDNXVMEh4swr00fK+3YWG/Szsrg==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
+ peerDependencies:
+ '@angular/common': 19.2.18
+ '@angular/core': 19.2.18
+ '@angular/platform-browser': 19.2.18
+ rxjs: ^6.5.3 || ^7.4.0
+
'@babel/code-frame@7.29.0':
resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
engines: {node: '>=6.9.0'}
@@ -692,10 +1238,22 @@ packages:
resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==}
engines: {node: '>=6.9.0'}
+ '@babel/core@7.26.10':
+ resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.26.9':
+ resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/core@7.29.0':
resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==}
engines: {node: '>=6.9.0'}
+ '@babel/generator@7.26.10':
+ resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==}
+ engines: {node: '>=6.9.0'}
+
'@babel/generator@7.29.1':
resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
engines: {node: '>=6.9.0'}
@@ -704,6 +1262,10 @@ packages:
resolution: {integrity: sha512-3ypWOOiC4AYHKr8vYRVtWtWmyvcoItHtVqF8paFax+ydpmUdPsJpLBkBBs5ItmhdrwC3a0ZSqqFAdzls4ODP3w==}
engines: {node: ^20.19.0 || >=22.12.0}
+ '@babel/helper-annotate-as-pure@7.25.9':
+ resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-annotate-as-pure@7.27.3':
resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
engines: {node: '>=6.9.0'}
@@ -718,6 +1280,17 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
+ '@babel/helper-create-regexp-features-plugin@7.28.5':
+ resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-define-polyfill-provider@0.6.6':
+ resolution: {integrity: sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
'@babel/helper-globals@7.28.0':
resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
engines: {node: '>=6.9.0'}
@@ -748,6 +1321,12 @@ packages:
resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-remap-async-to-generator@7.27.1':
+ resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
'@babel/helper-replace-supers@7.28.6':
resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==}
engines: {node: '>=6.9.0'}
@@ -758,12 +1337,16 @@ packages:
resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-split-export-declaration@7.24.7':
+ resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-string-parser@7.27.1':
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-string-parser@8.0.0-rc.2':
- resolution: {integrity: sha512-noLx87RwlBEMrTzncWd/FvTxoJ9+ycHNg0n8yyYydIoDsLZuxknKgWRJUqcrVkNrJ74uGyhWQzQaS3q8xfGAhQ==}
+ '@babel/helper-string-parser@8.0.0-rc.1':
+ resolution: {integrity: sha512-vi/pfmbrOtQmqgfboaBhaCU50G7mcySVu69VU8z+lYoPPB6WzI9VgV7WQfL908M4oeSH5fDkmoupIqoE0SdApw==}
engines: {node: ^20.19.0 || >=22.12.0}
'@babel/helper-validator-identifier@7.28.5':
@@ -778,6 +1361,10 @@ packages:
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-wrap-function@7.28.6':
+ resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helpers@7.28.6':
resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==}
engines: {node: '>=6.9.0'}
@@ -792,6 +1379,36 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5':
+ resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1':
+ resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1':
+ resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1':
+ resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.13.0
+
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6':
+ resolution: {integrity: sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
'@babel/plugin-proposal-private-methods@7.18.6':
resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
engines: {node: '>=6.9.0'}
@@ -799,243 +1416,728 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-jsx@7.28.6':
- resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==}
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2':
+ resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-react-jsx-development@7.27.1':
- resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==}
+ '@babel/plugin-syntax-import-assertions@7.28.6':
+ resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-react-jsx-self@7.27.1':
- resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
+ '@babel/plugin-syntax-import-attributes@7.26.0':
+ resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-react-jsx-source@7.27.1':
- resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
+ '@babel/plugin-syntax-import-attributes@7.28.6':
+ resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-react-jsx@7.28.6':
- resolution: {integrity: sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==}
+ '@babel/plugin-syntax-jsx@7.28.6':
+ resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/runtime@7.28.6':
- resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6':
+ resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
- '@babel/template@7.28.6':
- resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+ '@babel/plugin-transform-arrow-functions@7.27.1':
+ resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==}
engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@babel/traverse@7.29.0':
- resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==}
+ '@babel/plugin-transform-async-generator-functions@7.26.8':
+ resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==}
engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@babel/types@7.29.0':
- resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
+ '@babel/plugin-transform-async-to-generator@7.25.9':
+ resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==}
engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@babel/types@8.0.0-rc.1':
- resolution: {integrity: sha512-ubmJ6TShyaD69VE9DQrlXcdkvJbmwWPB8qYj0H2kaJi29O7vJT9ajSdBd2W8CG34pwL9pYA74fi7RHC1qbLoVQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ '@babel/plugin-transform-block-scoped-functions@7.27.1':
+ resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/apply-release-plan@7.0.14':
- resolution: {integrity: sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==}
+ '@babel/plugin-transform-block-scoping@7.28.6':
+ resolution: {integrity: sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/assemble-release-plan@6.0.9':
- resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==}
+ '@babel/plugin-transform-class-properties@7.28.6':
+ resolution: {integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/changelog-git@0.2.1':
- resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==}
+ '@babel/plugin-transform-class-static-block@7.28.6':
+ resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.12.0
- '@changesets/cli@2.29.8':
- resolution: {integrity: sha512-1weuGZpP63YWUYjay/E84qqwcnt5yJMM0tep10Up7Q5cS/DGe2IZ0Uj3HNMxGhCINZuR7aO9WBMdKnPit5ZDPA==}
- hasBin: true
+ '@babel/plugin-transform-classes@7.28.6':
+ resolution: {integrity: sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/config@3.1.2':
- resolution: {integrity: sha512-CYiRhA4bWKemdYi/uwImjPxqWNpqGPNbEBdX1BdONALFIDK7MCUj6FPkzD+z9gJcvDFUQJn9aDVf4UG7OT6Kog==}
+ '@babel/plugin-transform-computed-properties@7.28.6':
+ resolution: {integrity: sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/errors@0.2.0':
- resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==}
+ '@babel/plugin-transform-destructuring@7.28.5':
+ resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/get-dependents-graph@2.1.3':
- resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==}
+ '@babel/plugin-transform-dotall-regex@7.28.6':
+ resolution: {integrity: sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/get-github-info@0.6.0':
- resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==}
+ '@babel/plugin-transform-duplicate-keys@7.27.1':
+ resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/get-release-plan@4.0.14':
- resolution: {integrity: sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==}
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0':
+ resolution: {integrity: sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
- '@changesets/get-version-range-type@0.4.0':
- resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==}
+ '@babel/plugin-transform-dynamic-import@7.27.1':
+ resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/git@3.0.4':
- resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==}
+ '@babel/plugin-transform-exponentiation-operator@7.28.6':
+ resolution: {integrity: sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/logger@0.1.1':
- resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==}
+ '@babel/plugin-transform-export-namespace-from@7.27.1':
+ resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/parse@0.4.2':
- resolution: {integrity: sha512-Uo5MC5mfg4OM0jU3up66fmSn6/NE9INK+8/Vn/7sMVcdWg46zfbvvUSjD9EMonVqPi9fbrJH9SXHn48Tr1f2yA==}
+ '@babel/plugin-transform-for-of@7.27.1':
+ resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/pre@2.0.2':
- resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==}
+ '@babel/plugin-transform-function-name@7.27.1':
+ resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/read@0.6.6':
- resolution: {integrity: sha512-P5QaN9hJSQQKJShzzpBT13FzOSPyHbqdoIBUd2DJdgvnECCyO6LmAOWSV+O8se2TaZJVwSXjL+v9yhb+a9JeJg==}
+ '@babel/plugin-transform-json-strings@7.28.6':
+ resolution: {integrity: sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/should-skip-package@0.1.2':
- resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==}
+ '@babel/plugin-transform-literals@7.27.1':
+ resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/types@4.1.0':
- resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==}
+ '@babel/plugin-transform-logical-assignment-operators@7.28.6':
+ resolution: {integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/types@6.1.0':
- resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==}
+ '@babel/plugin-transform-member-expression-literals@7.27.1':
+ resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@changesets/write@0.4.0':
- resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==}
+ '@babel/plugin-transform-modules-amd@7.27.1':
+ resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@emnapi/core@1.8.1':
- resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==}
+ '@babel/plugin-transform-modules-commonjs@7.28.6':
+ resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@emnapi/runtime@1.8.1':
+ '@babel/plugin-transform-modules-systemjs@7.29.0':
+ resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-umd@7.27.1':
+ resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-named-capturing-groups-regex@7.29.0':
+ resolution: {integrity: sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-new-target@7.27.1':
+ resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-nullish-coalescing-operator@7.28.6':
+ resolution: {integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-numeric-separator@7.28.6':
+ resolution: {integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-object-rest-spread@7.28.6':
+ resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-object-super@7.27.1':
+ resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-optional-catch-binding@7.28.6':
+ resolution: {integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-optional-chaining@7.28.6':
+ resolution: {integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-parameters@7.27.7':
+ resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-private-methods@7.28.6':
+ resolution: {integrity: sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-private-property-in-object@7.28.6':
+ resolution: {integrity: sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-property-literals@7.27.1':
+ resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-development@7.27.1':
+ resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1':
+ resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1':
+ resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx@7.28.6':
+ resolution: {integrity: sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-regenerator@7.29.0':
+ resolution: {integrity: sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-regexp-modifiers@7.28.6':
+ resolution: {integrity: sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-reserved-words@7.27.1':
+ resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-runtime@7.26.10':
+ resolution: {integrity: sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-shorthand-properties@7.27.1':
+ resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-spread@7.28.6':
+ resolution: {integrity: sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-sticky-regex@7.27.1':
+ resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-template-literals@7.27.1':
+ resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-typeof-symbol@7.27.1':
+ resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-escapes@7.27.1':
+ resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-property-regex@7.28.6':
+ resolution: {integrity: sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-regex@7.27.1':
+ resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-sets-regex@7.28.6':
+ resolution: {integrity: sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/preset-env@7.26.9':
+ resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/preset-modules@0.1.6-no-external-plugins':
+ resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
+
+ '@babel/runtime@7.26.10':
+ resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/runtime@7.28.6':
+ resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.28.6':
+ resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.29.0':
+ resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.29.0':
+ resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@8.0.0-rc.1':
+ resolution: {integrity: sha512-ubmJ6TShyaD69VE9DQrlXcdkvJbmwWPB8qYj0H2kaJi29O7vJT9ajSdBd2W8CG34pwL9pYA74fi7RHC1qbLoVQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@changesets/apply-release-plan@7.0.14':
+ resolution: {integrity: sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==}
+
+ '@changesets/assemble-release-plan@6.0.9':
+ resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==}
+
+ '@changesets/changelog-git@0.2.1':
+ resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==}
+
+ '@changesets/cli@2.29.8':
+ resolution: {integrity: sha512-1weuGZpP63YWUYjay/E84qqwcnt5yJMM0tep10Up7Q5cS/DGe2IZ0Uj3HNMxGhCINZuR7aO9WBMdKnPit5ZDPA==}
+ hasBin: true
+
+ '@changesets/config@3.1.2':
+ resolution: {integrity: sha512-CYiRhA4bWKemdYi/uwImjPxqWNpqGPNbEBdX1BdONALFIDK7MCUj6FPkzD+z9gJcvDFUQJn9aDVf4UG7OT6Kog==}
+
+ '@changesets/errors@0.2.0':
+ resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==}
+
+ '@changesets/get-dependents-graph@2.1.3':
+ resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==}
+
+ '@changesets/get-github-info@0.6.0':
+ resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==}
+
+ '@changesets/get-release-plan@4.0.14':
+ resolution: {integrity: sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==}
+
+ '@changesets/get-version-range-type@0.4.0':
+ resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==}
+
+ '@changesets/git@3.0.4':
+ resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==}
+
+ '@changesets/logger@0.1.1':
+ resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==}
+
+ '@changesets/parse@0.4.2':
+ resolution: {integrity: sha512-Uo5MC5mfg4OM0jU3up66fmSn6/NE9INK+8/Vn/7sMVcdWg46zfbvvUSjD9EMonVqPi9fbrJH9SXHn48Tr1f2yA==}
+
+ '@changesets/pre@2.0.2':
+ resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==}
+
+ '@changesets/read@0.6.6':
+ resolution: {integrity: sha512-P5QaN9hJSQQKJShzzpBT13FzOSPyHbqdoIBUd2DJdgvnECCyO6LmAOWSV+O8se2TaZJVwSXjL+v9yhb+a9JeJg==}
+
+ '@changesets/should-skip-package@0.1.2':
+ resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==}
+
+ '@changesets/types@4.1.0':
+ resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==}
+
+ '@changesets/types@6.1.0':
+ resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==}
+
+ '@changesets/write@0.4.0':
+ resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==}
+
+ '@colors/colors@1.5.0':
+ resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
+ engines: {node: '>=0.1.90'}
+
+ '@discoveryjs/json-ext@0.6.3':
+ resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==}
+ engines: {node: '>=14.17.0'}
+
+ '@emnapi/core@1.8.1':
+ resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==}
+
+ '@emnapi/runtime@1.8.1':
resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==}
'@emnapi/wasi-threads@1.1.0':
resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
+ '@esbuild/aix-ppc64@0.25.4':
+ resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
'@esbuild/aix-ppc64@0.27.3':
resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
+ '@esbuild/android-arm64@0.25.4':
+ resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
'@esbuild/android-arm64@0.27.3':
resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
+ '@esbuild/android-arm@0.25.4':
+ resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
'@esbuild/android-arm@0.27.3':
resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
+ '@esbuild/android-x64@0.25.4':
+ resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
'@esbuild/android-x64@0.27.3':
resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
+ '@esbuild/darwin-arm64@0.25.4':
+ resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
'@esbuild/darwin-arm64@0.27.3':
resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
+ '@esbuild/darwin-x64@0.25.4':
+ resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
'@esbuild/darwin-x64@0.27.3':
resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
+ '@esbuild/freebsd-arm64@0.25.4':
+ resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
'@esbuild/freebsd-arm64@0.27.3':
resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
+ '@esbuild/freebsd-x64@0.25.4':
+ resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
'@esbuild/freebsd-x64@0.27.3':
resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
+ '@esbuild/linux-arm64@0.25.4':
+ resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
'@esbuild/linux-arm64@0.27.3':
resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
+ '@esbuild/linux-arm@0.25.4':
+ resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
'@esbuild/linux-arm@0.27.3':
resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
+ '@esbuild/linux-ia32@0.25.4':
+ resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
'@esbuild/linux-ia32@0.27.3':
resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
+ '@esbuild/linux-loong64@0.25.4':
+ resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
'@esbuild/linux-loong64@0.27.3':
resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
+ '@esbuild/linux-mips64el@0.25.4':
+ resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
'@esbuild/linux-mips64el@0.27.3':
resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
+ '@esbuild/linux-ppc64@0.25.4':
+ resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
'@esbuild/linux-ppc64@0.27.3':
resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
+ '@esbuild/linux-riscv64@0.25.4':
+ resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
'@esbuild/linux-riscv64@0.27.3':
resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
+ '@esbuild/linux-s390x@0.25.4':
+ resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
'@esbuild/linux-s390x@0.27.3':
resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
+ '@esbuild/linux-x64@0.25.4':
+ resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
'@esbuild/linux-x64@0.27.3':
resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
+ '@esbuild/netbsd-arm64@0.25.4':
+ resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
'@esbuild/netbsd-arm64@0.27.3':
resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
+ '@esbuild/netbsd-x64@0.25.4':
+ resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
'@esbuild/netbsd-x64@0.27.3':
resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
+ '@esbuild/openbsd-arm64@0.25.4':
+ resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
'@esbuild/openbsd-arm64@0.27.3':
resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
+ '@esbuild/openbsd-x64@0.25.4':
+ resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
'@esbuild/openbsd-x64@0.27.3':
resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==}
engines: {node: '>=18'}
@@ -1048,24 +2150,48 @@ packages:
cpu: [arm64]
os: [openharmony]
+ '@esbuild/sunos-x64@0.25.4':
+ resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
'@esbuild/sunos-x64@0.27.3':
resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
+ '@esbuild/win32-arm64@0.25.4':
+ resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
'@esbuild/win32-arm64@0.27.3':
resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
+ '@esbuild/win32-ia32@0.25.4':
+ resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
'@esbuild/win32-ia32@0.27.3':
resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
+ '@esbuild/win32-x64@0.25.4':
+ resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@esbuild/win32-x64@0.27.3':
resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==}
engines: {node: '>=18'}
@@ -1146,8 +2272,8 @@ packages:
eslint:
optional: true
- '@eslint/js@9.39.3':
- resolution: {integrity: sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==}
+ '@eslint/js@9.39.2':
+ resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.7':
@@ -1181,6 +2307,64 @@ packages:
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
+ '@inquirer/ansi@1.0.2':
+ resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==}
+ engines: {node: '>=18'}
+
+ '@inquirer/checkbox@4.3.2':
+ resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/confirm@5.1.21':
+ resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/confirm@5.1.6':
+ resolution: {integrity: sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/core@10.3.2':
+ resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/editor@4.2.23':
+ resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/expand@4.0.23':
+ resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
'@inquirer/external-editor@1.0.3':
resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==}
engines: {node: '>=18'}
@@ -1190,6 +2374,86 @@ packages:
'@types/node':
optional: true
+ '@inquirer/figures@1.0.15':
+ resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==}
+ engines: {node: '>=18'}
+
+ '@inquirer/input@4.3.1':
+ resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/number@3.0.23':
+ resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/password@4.0.23':
+ resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/prompts@7.3.2':
+ resolution: {integrity: sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/rawlist@4.1.11':
+ resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/search@3.2.2':
+ resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/select@4.4.2':
+ resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/type@1.5.5':
+ resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==}
+ engines: {node: '>=18'}
+
+ '@inquirer/type@3.0.10':
+ resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
'@isaacs/balanced-match@4.0.1':
resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
engines: {node: 20 || >=22}
@@ -1198,6 +2462,22 @@ packages:
resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==}
engines: {node: 20 || >=22}
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@isaacs/cliui@9.0.0':
+ resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==}
+ engines: {node: '>=18'}
+
+ '@isaacs/fs-minipass@4.0.1':
+ resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
+ engines: {node: '>=18.0.0'}
+
+ '@istanbuljs/schema@0.1.3':
+ resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
+ engines: {node: '>=8'}
+
'@jest/diff-sequences@30.0.1':
resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==}
engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
@@ -1220,68 +2500,418 @@ packages:
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
+ '@jridgewell/source-map@0.3.11':
+ resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
+
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
- '@manypkg/find-root@1.1.0':
- resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
+ '@jsonjoy.com/base64@1.1.2':
+ resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
- '@manypkg/get-packages@1.1.3':
- resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==}
+ '@jsonjoy.com/base64@17.67.0':
+ resolution: {integrity: sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
- '@napi-rs/wasm-runtime@0.2.12':
- resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
+ '@jsonjoy.com/buffers@1.2.1':
+ resolution: {integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
- '@napi-rs/wasm-runtime@0.2.4':
- resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==}
+ '@jsonjoy.com/buffers@17.67.0':
+ resolution: {integrity: sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
- '@napi-rs/wasm-runtime@1.1.1':
- resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==}
+ '@jsonjoy.com/codegen@1.0.0':
+ resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
- '@nodelib/fs.scandir@2.1.5':
- resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
- engines: {node: '>= 8'}
+ '@jsonjoy.com/codegen@17.67.0':
+ resolution: {integrity: sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
- '@nodelib/fs.stat@2.0.5':
- resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
- engines: {node: '>= 8'}
+ '@jsonjoy.com/fs-core@4.56.10':
+ resolution: {integrity: sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
- '@nodelib/fs.walk@1.2.8':
- resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
- engines: {node: '>= 8'}
+ '@jsonjoy.com/fs-fsa@4.56.10':
+ resolution: {integrity: sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
- '@nx/nx-darwin-arm64@22.5.2':
- resolution: {integrity: sha512-CPtgK/s4FQ0Y/6WmHpJccOTANve5UjlFajLp+S8Z538zHdc5a5MjJBcXo9oRzKNvhTHoGijr/fCMU2erMrYYtg==}
+ '@jsonjoy.com/fs-node-builtins@4.56.10':
+ resolution: {integrity: sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/fs-node-to-fsa@4.56.10':
+ resolution: {integrity: sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/fs-node-utils@4.56.10':
+ resolution: {integrity: sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/fs-node@4.56.10':
+ resolution: {integrity: sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/fs-print@4.56.10':
+ resolution: {integrity: sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/fs-snapshot@4.56.10':
+ resolution: {integrity: sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/json-pack@1.21.0':
+ resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/json-pack@17.67.0':
+ resolution: {integrity: sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/json-pointer@1.0.2':
+ resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/json-pointer@17.67.0':
+ resolution: {integrity: sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/util@1.9.0':
+ resolution: {integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/util@17.67.0':
+ resolution: {integrity: sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@leichtgewicht/ip-codec@2.0.5':
+ resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==}
+
+ '@listr2/prompt-adapter-inquirer@2.0.18':
+ resolution: {integrity: sha512-0hz44rAcrphyXcA8IS7EJ2SCoaBZD2u5goE8S/e+q/DL+dOGpqpcLidVOFeLG3VgML62SXmfRLAhWt0zL1oW4Q==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ '@inquirer/prompts': '>= 3 < 8'
+
+ '@lmdb/lmdb-darwin-arm64@3.2.6':
+ resolution: {integrity: sha512-yF/ih9EJJZc72psFQbwnn8mExIWfTnzWJg+N02hnpXtDPETYLmQswIMBn7+V88lfCaFrMozJsUvcEQIkEPU0Gg==}
cpu: [arm64]
os: [darwin]
- '@nx/nx-darwin-x64@22.5.2':
- resolution: {integrity: sha512-YuFGIpmtMPbMM3QchJttlLFE5oNenE+3mRCWcMNrXPOixsw28flvYWhFcHE3CPV8q/E+Yg0FsOG+8u1p7eEgWg==}
+ '@lmdb/lmdb-darwin-x64@3.2.6':
+ resolution: {integrity: sha512-5BbCumsFLbCi586Bb1lTWQFkekdQUw8/t8cy++Uq251cl3hbDIGEwD9HAwh8H6IS2F6QA9KdKmO136LmipRNkg==}
cpu: [x64]
os: [darwin]
- '@nx/nx-freebsd-x64@22.5.2':
- resolution: {integrity: sha512-Oy3jejPB7lszxAf4rdTpJfOBVgAUtkUZJCLTdGdnpveF/m3s9MN9DaeEXgUs0mMp1qV3Y0KE3KcVHqII54AoBQ==}
- cpu: [x64]
- os: [freebsd]
+ '@lmdb/lmdb-linux-arm64@3.2.6':
+ resolution: {integrity: sha512-l5VmJamJ3nyMmeD1ANBQCQqy7do1ESaJQfKPSm2IG9/ADZryptTyCj8N6QaYgIWewqNUrcbdMkJajRQAt5Qjfg==}
+ cpu: [arm64]
+ os: [linux]
- '@nx/nx-linux-arm-gnueabihf@22.5.2':
- resolution: {integrity: sha512-38bZGStG6bZ+R7ZbGxvnDVjVrV6bRTsiX8rr3fmM/AkEfvgyhWgE3R+xqUHoJVM4PK0I2YlYoSjIny4gFeOBxQ==}
+ '@lmdb/lmdb-linux-arm@3.2.6':
+ resolution: {integrity: sha512-+6XgLpMb7HBoWxXj+bLbiiB4s0mRRcDPElnRS3LpWRzdYSe+gFk5MT/4RrVNqd2MESUDmb53NUXw1+BP69bjiQ==}
cpu: [arm]
os: [linux]
- '@nx/nx-linux-arm64-gnu@22.5.2':
- resolution: {integrity: sha512-D+tPXB0tkSuDPsuXvyQIsF3f3PBWfAwIe9FkBWtVoDVYqE+jbz+tVGsjQMNWGafLE4sC8ZQdjhsxyT8I53Anbw==}
- cpu: [arm64]
+ '@lmdb/lmdb-linux-x64@3.2.6':
+ resolution: {integrity: sha512-nDYT8qN9si5+onHYYaI4DiauDMx24OAiuZAUsEqrDy+ja/3EbpXPX/VAkMV8AEaQhy3xc4dRC+KcYIvOFefJ4Q==}
+ cpu: [x64]
os: [linux]
- libc: [glibc]
- '@nx/nx-linux-arm64-musl@22.5.2':
- resolution: {integrity: sha512-UbO527qqa8KLBi13uXto5SmxcZv1Smer7sPexJonshDlmrJsyvx5m8nm6tcSv04W5yQEL90vPlTux8dNvEDWrw==}
- cpu: [arm64]
+ '@lmdb/lmdb-win32-x64@3.2.6':
+ resolution: {integrity: sha512-XlqVtILonQnG+9fH2N3Aytria7P/1fwDgDhl29rde96uH2sLB8CHORIf2PfuLVzFQJ7Uqp8py9AYwr3ZUCFfWg==}
+ cpu: [x64]
+ os: [win32]
+
+ '@manypkg/find-root@1.1.0':
+ resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
+
+ '@manypkg/get-packages@1.1.3':
+ resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==}
+
+ '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3':
+ resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3':
+ resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3':
+ resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3':
+ resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3':
+ resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3':
+ resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@napi-rs/nice-android-arm-eabi@1.1.1':
+ resolution: {integrity: sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [android]
+
+ '@napi-rs/nice-android-arm64@1.1.1':
+ resolution: {integrity: sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [android]
+
+ '@napi-rs/nice-darwin-arm64@1.1.1':
+ resolution: {integrity: sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@napi-rs/nice-darwin-x64@1.1.1':
+ resolution: {integrity: sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@napi-rs/nice-freebsd-x64@1.1.1':
+ resolution: {integrity: sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@napi-rs/nice-linux-arm-gnueabihf@1.1.1':
+ resolution: {integrity: sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@napi-rs/nice-linux-arm64-gnu@1.1.1':
+ resolution: {integrity: sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@napi-rs/nice-linux-arm64-musl@1.1.1':
+ resolution: {integrity: sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@napi-rs/nice-linux-ppc64-gnu@1.1.1':
+ resolution: {integrity: sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==}
+ engines: {node: '>= 10'}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@napi-rs/nice-linux-riscv64-gnu@1.1.1':
+ resolution: {integrity: sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==}
+ engines: {node: '>= 10'}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@napi-rs/nice-linux-s390x-gnu@1.1.1':
+ resolution: {integrity: sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==}
+ engines: {node: '>= 10'}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@napi-rs/nice-linux-x64-gnu@1.1.1':
+ resolution: {integrity: sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@napi-rs/nice-linux-x64-musl@1.1.1':
+ resolution: {integrity: sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@napi-rs/nice-openharmony-arm64@1.1.1':
+ resolution: {integrity: sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@napi-rs/nice-win32-arm64-msvc@1.1.1':
+ resolution: {integrity: sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@napi-rs/nice-win32-ia32-msvc@1.1.1':
+ resolution: {integrity: sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==}
+ engines: {node: '>= 10'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@napi-rs/nice-win32-x64-msvc@1.1.1':
+ resolution: {integrity: sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@napi-rs/nice@1.1.1':
+ resolution: {integrity: sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==}
+ engines: {node: '>= 10'}
+
+ '@napi-rs/wasm-runtime@0.2.12':
+ resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
+
+ '@napi-rs/wasm-runtime@0.2.4':
+ resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==}
+
+ '@napi-rs/wasm-runtime@1.1.1':
+ resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==}
+
+ '@ngtools/webpack@19.2.20':
+ resolution: {integrity: sha512-nuCjcxLmFrn0s53G67V5R19mUpYjewZBLz6Wrg7BtJkjq08xfO0QgaJg3e6wzEmj1AclH7eMKRnuQhm5otyutg==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+ peerDependencies:
+ '@angular/compiler-cli': ^19.0.0 || ^19.2.0-next.0
+ typescript: '>=5.5 <5.9'
+ webpack: ^5.54.0
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@npmcli/agent@3.0.0':
+ resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ '@npmcli/fs@4.0.0':
+ resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ '@npmcli/git@6.0.3':
+ resolution: {integrity: sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ '@npmcli/installed-package-contents@3.0.0':
+ resolution: {integrity: sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+ hasBin: true
+
+ '@npmcli/node-gyp@4.0.0':
+ resolution: {integrity: sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ '@npmcli/package-json@6.2.0':
+ resolution: {integrity: sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ '@npmcli/promise-spawn@8.0.3':
+ resolution: {integrity: sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ '@npmcli/redact@3.2.2':
+ resolution: {integrity: sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ '@npmcli/run-script@9.1.0':
+ resolution: {integrity: sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ '@nx/nx-darwin-arm64@22.5.2':
+ resolution: {integrity: sha512-CPtgK/s4FQ0Y/6WmHpJccOTANve5UjlFajLp+S8Z538zHdc5a5MjJBcXo9oRzKNvhTHoGijr/fCMU2erMrYYtg==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@nx/nx-darwin-x64@22.5.2':
+ resolution: {integrity: sha512-YuFGIpmtMPbMM3QchJttlLFE5oNenE+3mRCWcMNrXPOixsw28flvYWhFcHE3CPV8q/E+Yg0FsOG+8u1p7eEgWg==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@nx/nx-freebsd-x64@22.5.2':
+ resolution: {integrity: sha512-Oy3jejPB7lszxAf4rdTpJfOBVgAUtkUZJCLTdGdnpveF/m3s9MN9DaeEXgUs0mMp1qV3Y0KE3KcVHqII54AoBQ==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@nx/nx-linux-arm-gnueabihf@22.5.2':
+ resolution: {integrity: sha512-38bZGStG6bZ+R7ZbGxvnDVjVrV6bRTsiX8rr3fmM/AkEfvgyhWgE3R+xqUHoJVM4PK0I2YlYoSjIny4gFeOBxQ==}
+ cpu: [arm]
+ os: [linux]
+
+ '@nx/nx-linux-arm64-gnu@22.5.2':
+ resolution: {integrity: sha512-D+tPXB0tkSuDPsuXvyQIsF3f3PBWfAwIe9FkBWtVoDVYqE+jbz+tVGsjQMNWGafLE4sC8ZQdjhsxyT8I53Anbw==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@nx/nx-linux-arm64-musl@22.5.2':
+ resolution: {integrity: sha512-UbO527qqa8KLBi13uXto5SmxcZv1Smer7sPexJonshDlmrJsyvx5m8nm6tcSv04W5yQEL90vPlTux8dNvEDWrw==}
+ cpu: [arm64]
os: [linux]
libc: [musl]
@@ -1310,114 +2940,206 @@ packages:
'@oxc-project/types@0.112.0':
resolution: {integrity: sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ==}
- '@oxc-resolver/binding-android-arm-eabi@11.18.0':
- resolution: {integrity: sha512-EhwJNzbfLwQQIeyak3n08EB3UHknMnjy1dFyL98r3xlorje2uzHOT2vkB5nB1zqtTtzT31uSot3oGZFfODbGUg==}
+ '@oxc-resolver/binding-android-arm-eabi@11.17.1':
+ resolution: {integrity: sha512-+VuZyMYYaap5uDAU1xDU3Kul0FekLqpBS8kI5JozlWfYQKnc/HsZg2gHPkQrj0SC9lt74WMNCfOzZZJlYXSdEQ==}
cpu: [arm]
os: [android]
- '@oxc-resolver/binding-android-arm64@11.18.0':
- resolution: {integrity: sha512-esOPsT9S9B6vEMMp1qR9Yz5UepQXljoWRJYoyp7GV/4SYQOSTpN0+V2fTruxbMmzqLK+fjCEU2x3SVhc96LQLQ==}
+ '@oxc-resolver/binding-android-arm64@11.17.1':
+ resolution: {integrity: sha512-YlDDTjvOEKhom/cRSVsXsMVeXVIAM9PJ/x2mfe08rfuS0iIEfJd8PngKbEIhG72WPxleUa+vkEZj9ncmC14z3Q==}
cpu: [arm64]
os: [android]
- '@oxc-resolver/binding-darwin-arm64@11.18.0':
- resolution: {integrity: sha512-iJknScn8fRLRhGR6VHG31bzOoyLihSDmsJHRjHwRUL0yF1MkLlvzmZ+liKl9MGl+WZkZHaOFT5T1jNlLSWTowQ==}
+ '@oxc-resolver/binding-darwin-arm64@11.17.1':
+ resolution: {integrity: sha512-HOYYLSY4JDk14YkXaz/ApgJYhgDP4KsG8EZpgpOxdszGW9HmIMMY/vXqVKYW74dSH+GQkIXYxBrEh3nv+XODVg==}
cpu: [arm64]
os: [darwin]
- '@oxc-resolver/binding-darwin-x64@11.18.0':
- resolution: {integrity: sha512-3rMweF2GQLzkaUoWgFKy1fRtk0dpj4JDqucoZLJN9IZG+TC+RZg7QMwG5WKMvmEjzdYmOTw1L1XqZDVXF2ksaQ==}
+ '@oxc-resolver/binding-darwin-x64@11.17.1':
+ resolution: {integrity: sha512-JHPJbsa5HvPq2/RIdtGlqfaG9zV2WmgvHrKTYmlW0L5esqtKCBuetFudXTBzkNcyD69kSZLzH92AzTr6vFHMFg==}
cpu: [x64]
os: [darwin]
- '@oxc-resolver/binding-freebsd-x64@11.18.0':
- resolution: {integrity: sha512-TfXsFby4QvpGwmUP66+X+XXQsycddZe9ZUUu/vHhq2XGI1EkparCSzjpYW1Nz5fFncbI5oLymQLln/qR+qxyOw==}
+ '@oxc-resolver/binding-freebsd-x64@11.17.1':
+ resolution: {integrity: sha512-UD1FRC8j8xZstFXYsXwQkNmmg7vUbee006IqxokwDUUA+xEgKZDpLhBEiVKM08Urb+bn7Q0gn6M1pyNR0ng5mg==}
cpu: [x64]
os: [freebsd]
- '@oxc-resolver/binding-linux-arm-gnueabihf@11.18.0':
- resolution: {integrity: sha512-WolOILquy9DJsHcfFMHeA5EjTCI9A7JoERFJru4UI2zKZcnfNPo5GApzYwiloscEp/s+fALPmyRntswUns0qHg==}
+ '@oxc-resolver/binding-linux-arm-gnueabihf@11.17.1':
+ resolution: {integrity: sha512-wFWC1wyf2ROFWTxK5x0Enm++DSof3EBQ/ypyAesMDLiYxOOASDoMOZG1ylWUnlKaCt5W7eNOWOzABpdfFf/ssA==}
cpu: [arm]
os: [linux]
- '@oxc-resolver/binding-linux-arm-musleabihf@11.18.0':
- resolution: {integrity: sha512-r+5nHJyPdiBqOGTYAFyuq5RtuAQbm4y69GYWNG/uup9Cqr7RG9Ak0YZgGEbkQsc+XBs00ougu/D1+w3UAYIWHA==}
+ '@oxc-resolver/binding-linux-arm-musleabihf@11.17.1':
+ resolution: {integrity: sha512-k/hUif0GEBk/csSqCfTPXb8AAVs1NNWCa/skBghvNbTtORcWfOVqJ3mM+2pE189+enRm4UnryLREu5ysI0kXEQ==}
cpu: [arm]
os: [linux]
- '@oxc-resolver/binding-linux-arm64-gnu@11.18.0':
- resolution: {integrity: sha512-bUzg6QxljqMLLwsxYajAQEHW1LYRLdKOg/aykt14PSqUUOmfnOJjPdSLTiHIZCluVzPCQxv1LjoyRcoTAXfQaQ==}
+ '@oxc-resolver/binding-linux-arm64-gnu@11.17.1':
+ resolution: {integrity: sha512-Cwm6A071ww60QouJ9LoHAwBgEoZzHQ0Qaqk2E7WLfBdiQN9mLXIDhnrpn04hlRElRPhLiu/dtg+o5PPLvaINXQ==}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@oxc-resolver/binding-linux-arm64-musl@11.18.0':
- resolution: {integrity: sha512-l43GVwls5+YR8WXOIez5x7Pp/MfhdkMOZOOjFUSWC/9qMnSLX1kd95j9oxDrkWdD321JdHTyd4eau5KQPxZM9w==}
+ '@oxc-resolver/binding-linux-arm64-musl@11.17.1':
+ resolution: {integrity: sha512-+hwlE2v3m0r3sk93SchJL1uyaKcPjf+NGO/TD2DZUDo+chXx7FfaEj0nUMewigSt7oZ2sQN9Z4NJOtUa75HE5Q==}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@oxc-resolver/binding-linux-ppc64-gnu@11.18.0':
- resolution: {integrity: sha512-ayj7TweYWi/azxWmRpUZGz41kKNvfkXam20UrFhaQDrSNGNqefQRODxhJn0iv6jt4qChh7TUxDIoavR6ftRsjw==}
+ '@oxc-resolver/binding-linux-ppc64-gnu@11.17.1':
+ resolution: {integrity: sha512-bO+rsaE5Ox8cFyeL5Ct5tzot1TnQpFa/Wmu5k+hqBYSH2dNVDGoi0NizBN5QV8kOIC6O5MZr81UG4yW/2FyDTA==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@oxc-resolver/binding-linux-riscv64-gnu@11.18.0':
- resolution: {integrity: sha512-2Jz7jpq6BBNlBBup3usZB6sZWEZOBbjWn++/bKC2lpAT+sTEwdTonnf3rNcb+XY7+v53jYB9pM8LEKVXZfr8BA==}
+ '@oxc-resolver/binding-linux-riscv64-gnu@11.17.1':
+ resolution: {integrity: sha512-B/P+hxKQ1oX4YstI9Lyh4PGzqB87Ddqj/A4iyRBbPdXTcxa+WW3oRLx1CsJKLmHPdDk461Hmbghq1Bm3pl+8Aw==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@oxc-resolver/binding-linux-riscv64-musl@11.18.0':
- resolution: {integrity: sha512-omw8/ISOc6ubR247iEMma4/JRfbY2I+nGJC59oKBhCIEZoyqEg/NmDSBc4ToMH+AsZDucqQUDOCku3k7pBiEag==}
+ '@oxc-resolver/binding-linux-riscv64-musl@11.17.1':
+ resolution: {integrity: sha512-ulp2H3bFXzd/th2maH+QNKj5qgOhJ3v9Yspdf1svTw3CDOuuTl6sRKsWQ7MUw0vnkSNvQndtflBwVXgzZvURsQ==}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@oxc-resolver/binding-linux-s390x-gnu@11.18.0':
- resolution: {integrity: sha512-uFipBXaS+honSL5r5G/rlvVrkffUjpKwD3S/aIiwp64bylK3+RztgV+mM1blk+OT5gBRG864auhH6jCfrOo3ZA==}
+ '@oxc-resolver/binding-linux-s390x-gnu@11.17.1':
+ resolution: {integrity: sha512-LAXYVe3rKk09Zo9YKF2ZLBcH8sz8Oj+JIyiUxiHtq0hiYLMsN6dOpCf2hzQEjPAmsSEA/hdC1PVKeXo+oma8mQ==}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@oxc-resolver/binding-linux-x64-gnu@11.18.0':
- resolution: {integrity: sha512-bY4uMIoKRv8Ine3UiKLFPWRZ+fPCDamTHZFf5pNOjlfmTJIANtJo0mzWDUdFZLYhVgQdegrDL9etZbTMR8qieg==}
+ '@oxc-resolver/binding-linux-x64-gnu@11.17.1':
+ resolution: {integrity: sha512-3RAhxipMKE8RCSPn7O//sj440i+cYTgYbapLeOoDvQEt6R1QcJjTsFgI4iz99FhVj3YbPxlZmcLB5VW+ipyRTA==}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@oxc-resolver/binding-linux-x64-musl@11.18.0':
- resolution: {integrity: sha512-40IicL/aitfNOWur06x7Do41WcqFJ9VUNAciFjZCXzF6wR2i6uVsi6N19ecqgSRoLYFCAoRYi9F50QteIxCwKQ==}
+ '@oxc-resolver/binding-linux-x64-musl@11.17.1':
+ resolution: {integrity: sha512-wpjMEubGU8r9VjZTLdZR3aPHaBqTl8Jl8F4DBbgNoZ+yhkhQD1/MGvY70v2TLnAI6kAHSvcqgfvaqKDa2iWsPQ==}
cpu: [x64]
os: [linux]
libc: [musl]
- '@oxc-resolver/binding-openharmony-arm64@11.18.0':
- resolution: {integrity: sha512-DJIzYjUnSJtz4Trs/J9TnzivtPcUKn9AeL3YjHlM5+RvK27ZL9xISs3gg2VAo2nWU7ThuadC1jSYkWaZyONMwg==}
+ '@oxc-resolver/binding-openharmony-arm64@11.17.1':
+ resolution: {integrity: sha512-XIE4w17RYAVIgx+9Gs3deTREq5tsmalbatYOOBGNdH7n0DfTE600c7wYXsp7ANc3BPDXsInnOzXDEPCvO1F6cg==}
cpu: [arm64]
os: [openharmony]
- '@oxc-resolver/binding-wasm32-wasi@11.18.0':
- resolution: {integrity: sha512-57+R8Ioqc8g9k80WovoupOoyIOfLEceHTizkUcwOXspXLhiZ67ScM7Q8OuvhDoRRSZzH6yI0qML3WZwMFR3s7g==}
+ '@oxc-resolver/binding-wasm32-wasi@11.17.1':
+ resolution: {integrity: sha512-Lqi5BlHX3zS4bpSOkIbOKVf7DIk6Gvmdifr2OuOI58eUUyP944M8/OyaB09cNpPy9Vukj7nmmhOzj8pwLgAkIg==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
- '@oxc-resolver/binding-win32-arm64-msvc@11.18.0':
- resolution: {integrity: sha512-t9Oa4BPptJqVlHTT1cV1frs+LY/vjsKhHI6ltj2EwoGM1TykJ0WW43UlQaU4SC8N+oTY8JRbAywVMNkfqjSu9w==}
+ '@oxc-resolver/binding-win32-arm64-msvc@11.17.1':
+ resolution: {integrity: sha512-l6lTcLBQVj1HNquFpXSsrkCIM8X5Hlng5YNQJrg00z/KyovvDV5l3OFhoRyZ+aLBQ74zUnMRaJZC7xcBnHyeNg==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxc-resolver/binding-win32-ia32-msvc@11.17.1':
+ resolution: {integrity: sha512-VTzVtfnCCsU/6GgvursWoyZrhe3Gj/RyXzDWmh4/U1Y3IW0u1FZbp+hCIlBL16pRPbDc5YvXVtCOnA41QOrOoQ==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxc-resolver/binding-win32-x64-msvc@11.17.1':
+ resolution: {integrity: sha512-jRPVU+6/12baj87q2+UGRh30FBVBzqKdJ7rP/mSqiL1kpNQB9yZ1j0+m3sru1m+C8hiFK7lBFwjUtYUBI7+UpQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@parcel/watcher-android-arm64@2.5.6':
+ resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ '@parcel/watcher-darwin-arm64@2.5.6':
+ resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@parcel/watcher-darwin-x64@2.5.6':
+ resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@parcel/watcher-freebsd-x64@2.5.6':
+ resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@parcel/watcher-linux-arm-glibc@2.5.6':
+ resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@parcel/watcher-linux-arm-musl@2.5.6':
+ resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: [musl]
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.6':
+ resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@parcel/watcher-linux-arm64-musl@2.5.6':
+ resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@parcel/watcher-linux-x64-glibc@2.5.6':
+ resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@parcel/watcher-linux-x64-musl@2.5.6':
+ resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@parcel/watcher-win32-arm64@2.5.6':
+ resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==}
+ engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [win32]
- '@oxc-resolver/binding-win32-ia32-msvc@11.18.0':
- resolution: {integrity: sha512-4maf/f6ea5IEtIXqGwSw38srRtVHTre9iKShG4gjzat7c3Iq6B1OppXMj8gNmTuM4n8Xh1hQM9z2hBELccJr1g==}
+ '@parcel/watcher-win32-ia32@2.5.6':
+ resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==}
+ engines: {node: '>= 10.0.0'}
cpu: [ia32]
os: [win32]
- '@oxc-resolver/binding-win32-x64-msvc@11.18.0':
- resolution: {integrity: sha512-EhW8Su3AEACSw5HfzKMmyCtV0oArNrVViPdeOfvVYL9TrkL+/4c8fWHFTBtxUMUyCjhSG5xYNdwty1D/TAgL0Q==}
+ '@parcel/watcher-win32-x64@2.5.6':
+ resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==}
+ engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [win32]
+ '@parcel/watcher@2.5.6':
+ resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==}
+ engines: {node: '>= 10.0.0'}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
'@preact/preset-vite@2.10.3':
resolution: {integrity: sha512-1SiS+vFItpkNdBs7q585PSAIln0wBeBdcpJYbzPs1qipsb/FssnkUioNXuRsb8ZnU8YEQHr+3v8+/mzWSnTQmg==}
peerDependencies:
@@ -1545,144 +3267,253 @@ packages:
rollup:
optional: true
- '@rollup/rollup-android-arm-eabi@4.58.0':
- resolution: {integrity: sha512-mr0tmS/4FoVk1cnaeN244A/wjvGDNItZKR8hRhnmCzygyRXYtKF5jVDSIILR1U97CTzAYmbgIj/Dukg62ggG5w==}
+ '@rollup/rollup-android-arm-eabi@4.34.8':
+ resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.58.0':
- resolution: {integrity: sha512-+s++dbp+/RTte62mQD9wLSbiMTV+xr/PeRJEc/sFZFSBRlHPNPVaf5FXlzAL77Mr8FtSfQqCN+I598M8U41ccQ==}
+ '@rollup/rollup-android-arm-eabi@4.57.1':
+ resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.34.8':
+ resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.57.1':
+ resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.58.0':
- resolution: {integrity: sha512-MFWBwTcYs0jZbINQBXHfSrpSQJq3IUOakcKPzfeSznONop14Pxuqa0Kg19GD0rNBMPQI2tFtu3UzapZpH0Uc1Q==}
+ '@rollup/rollup-darwin-arm64@4.34.8':
+ resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-arm64@4.57.1':
+ resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.58.0':
- resolution: {integrity: sha512-yiKJY7pj9c9JwzuKYLFaDZw5gma3fI9bkPEIyofvVfsPqjCWPglSHdpdwXpKGvDeYDms3Qal8qGMEHZ1M/4Udg==}
+ '@rollup/rollup-darwin-x64@4.34.8':
+ resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.57.1':
+ resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.58.0':
- resolution: {integrity: sha512-x97kCoBh5MOevpn/CNK9W1x8BEzO238541BGWBc315uOlN0AD/ifZ1msg+ZQB05Ux+VF6EcYqpiagfLJ8U3LvQ==}
+ '@rollup/rollup-freebsd-arm64@4.34.8':
+ resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.58.0':
- resolution: {integrity: sha512-Aa8jPoZ6IQAG2eIrcXPpjRcMjROMFxCt1UYPZZtCxRV68WkuSigYtQ/7Zwrcr2IvtNJo7T2JfDXyMLxq5L4Jlg==}
+ '@rollup/rollup-freebsd-arm64@4.57.1':
+ resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.34.8':
+ resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.57.1':
+ resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.58.0':
- resolution: {integrity: sha512-Ob8YgT5kD/lSIYW2Rcngs5kNB/44Q2RzBSPz9brf2WEtcGR7/f/E9HeHn1wYaAwKBni+bdXEwgHvUd0x12lQSA==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.34.8':
+ resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.57.1':
+ resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==}
cpu: [arm]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm-musleabihf@4.58.0':
- resolution: {integrity: sha512-K+RI5oP1ceqoadvNt1FecL17Qtw/n9BgRSzxif3rTL2QlIu88ccvY+Y9nnHe/cmT5zbH9+bpiJuG1mGHRVwF4Q==}
+ '@rollup/rollup-linux-arm-musleabihf@4.34.8':
+ resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==}
+ cpu: [arm]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.57.1':
+ resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==}
cpu: [arm]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-arm64-gnu@4.58.0':
- resolution: {integrity: sha512-T+17JAsCKUjmbopcKepJjHWHXSjeW7O5PL7lEFaeQmiVyw4kkc5/lyYKzrv6ElWRX/MrEWfPiJWqbTvfIvjM1Q==}
+ '@rollup/rollup-linux-arm64-gnu@4.34.8':
+ resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-arm64-gnu@4.57.1':
+ resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm64-musl@4.58.0':
- resolution: {integrity: sha512-cCePktb9+6R9itIJdeCFF9txPU7pQeEHB5AbHu/MKsfH/k70ZtOeq1k4YAtBv9Z7mmKI5/wOLYjQ+B9QdxR6LA==}
+ '@rollup/rollup-linux-arm64-musl@4.34.8':
+ resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-arm64-musl@4.57.1':
+ resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-loong64-gnu@4.58.0':
- resolution: {integrity: sha512-iekUaLkfliAsDl4/xSdoCJ1gnnIXvoNz85C8U8+ZxknM5pBStfZjeXgB8lXobDQvvPRCN8FPmmuTtH+z95HTmg==}
+ '@rollup/rollup-linux-loong64-gnu@4.57.1':
+ resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==}
cpu: [loong64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-loong64-musl@4.58.0':
- resolution: {integrity: sha512-68ofRgJNl/jYJbxFjCKE7IwhbfxOl1muPN4KbIqAIe32lm22KmU7E8OPvyy68HTNkI2iV/c8y2kSPSm2mW/Q9Q==}
+ '@rollup/rollup-linux-loong64-musl@4.57.1':
+ resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==}
cpu: [loong64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-ppc64-gnu@4.58.0':
- resolution: {integrity: sha512-dpz8vT0i+JqUKuSNPCP5SYyIV2Lh0sNL1+FhM7eLC457d5B9/BC3kDPp5BBftMmTNsBarcPcoz5UGSsnCiw4XQ==}
+ '@rollup/rollup-linux-loongarch64-gnu@4.34.8':
+ resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==}
+ cpu: [loong64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
+ resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.57.1':
+ resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-ppc64-musl@4.58.0':
- resolution: {integrity: sha512-4gdkkf9UJ7tafnweBCR/mk4jf3Jfl0cKX9Np80t5i78kjIH0ZdezUv/JDI2VtruE5lunfACqftJ8dIMGN4oHew==}
+ '@rollup/rollup-linux-ppc64-musl@4.57.1':
+ resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==}
cpu: [ppc64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-riscv64-gnu@4.58.0':
- resolution: {integrity: sha512-YFS4vPnOkDTD/JriUeeZurFYoJhPf9GQQEF/v4lltp3mVcBmnsAdjEWhr2cjUCZzZNzxCG0HZOvJU44UGHSdzw==}
+ '@rollup/rollup-linux-riscv64-gnu@4.34.8':
+ resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.57.1':
+ resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-riscv64-musl@4.58.0':
- resolution: {integrity: sha512-x2xgZlFne+QVNKV8b4wwaCS8pwq3y14zedZ5DqLzjdRITvreBk//4Knbcvm7+lWmms9V9qFp60MtUd0/t/PXPw==}
+ '@rollup/rollup-linux-riscv64-musl@4.57.1':
+ resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-s390x-gnu@4.58.0':
- resolution: {integrity: sha512-jIhrujyn4UnWF8S+DHSkAkDEO3hLX0cjzxJZPLF80xFyzyUIYgSMRcYQ3+uqEoyDD2beGq7Dj7edi8OnJcS/hg==}
+ '@rollup/rollup-linux-s390x-gnu@4.34.8':
+ resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-s390x-gnu@4.57.1':
+ resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-gnu@4.58.0':
- resolution: {integrity: sha512-+410Srdoh78MKSJxTQ+hZ/Mx+ajd6RjjPwBPNd0R3J9FtL6ZA0GqiiyNjCO9In0IzZkCNrpGymSfn+kgyPQocg==}
+ '@rollup/rollup-linux-x64-gnu@4.34.8':
+ resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-x64-gnu@4.57.1':
+ resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-musl@4.58.0':
- resolution: {integrity: sha512-ZjMyby5SICi227y1MTR3VYBpFTdZs823Rs/hpakufleBoufoOIB6jtm9FEoxn/cgO7l6PM2rCEl5Kre5vX0QrQ==}
+ '@rollup/rollup-linux-x64-musl@4.34.8':
+ resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-x64-musl@4.57.1':
+ resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==}
cpu: [x64]
os: [linux]
libc: [musl]
- '@rollup/rollup-openbsd-x64@4.58.0':
- resolution: {integrity: sha512-ds4iwfYkSQ0k1nb8LTcyXw//ToHOnNTJtceySpL3fa7tc/AsE+UpUFphW126A6fKBGJD5dhRvg8zw1rvoGFxmw==}
+ '@rollup/rollup-openbsd-x64@4.57.1':
+ resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==}
cpu: [x64]
os: [openbsd]
- '@rollup/rollup-openharmony-arm64@4.58.0':
- resolution: {integrity: sha512-fd/zpJniln4ICdPkjWFhZYeY/bpnaN9pGa6ko+5WD38I0tTqk9lXMgXZg09MNdhpARngmxiCg0B0XUamNw/5BQ==}
+ '@rollup/rollup-openharmony-arm64@4.57.1':
+ resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.58.0':
- resolution: {integrity: sha512-YpG8dUOip7DCz3nr/JUfPbIUo+2d/dy++5bFzgi4ugOGBIox+qMbbqt/JoORwvI/C9Kn2tz6+Bieoqd5+B1CjA==}
+ '@rollup/rollup-win32-arm64-msvc@4.34.8':
+ resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.58.0':
- resolution: {integrity: sha512-b9DI8jpFQVh4hIXFr0/+N/TzLdpBIoPzjt0Rt4xJbW3mzguV3mduR9cNgiuFcuL/TeORejJhCWiAXe3E/6PxWA==}
- cpu: [ia32]
+ '@rollup/rollup-win32-arm64-msvc@4.57.1':
+ resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==}
+ cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-x64-gnu@4.58.0':
- resolution: {integrity: sha512-CSrVpmoRJFN06LL9xhkitkwUcTZtIotYAF5p6XOR2zW0Zz5mzb3IPpcoPhB02frzMHFNo1reQ9xSF5fFm3hUsQ==}
+ '@rollup/rollup-win32-ia32-msvc@4.34.8':
+ resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.57.1':
+ resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.57.1':
+ resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.34.8':
+ resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==}
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.58.0':
- resolution: {integrity: sha512-QFsBgQNTnh5K0t/sBsjJLq24YVqEIVkGpfN2VHsnN90soZyhaiA9UUHufcctVNL4ypJY0wrwad0wslx2KJQ1/w==}
+ '@rollup/rollup-win32-x64-msvc@4.57.1':
+ resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==}
cpu: [x64]
os: [win32]
+ '@schematics/angular@19.2.20':
+ resolution: {integrity: sha512-xDrYxZvk9dGA2eVqufqLYmVSMSXxVtv30pBHGGU/2xr4QzHzdmMHflk4It8eh4WMNLhn7kqnzMREwtNI3eW/Gw==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+
'@shikijs/engine-oniguruma@3.22.0':
resolution: {integrity: sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==}
@@ -1698,9 +3529,37 @@ packages:
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
+ '@sigstore/bundle@3.1.0':
+ resolution: {integrity: sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ '@sigstore/core@2.0.0':
+ resolution: {integrity: sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ '@sigstore/protobuf-specs@0.4.3':
+ resolution: {integrity: sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ '@sigstore/sign@3.1.0':
+ resolution: {integrity: sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ '@sigstore/tuf@3.1.1':
+ resolution: {integrity: sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ '@sigstore/verify@2.1.1':
+ resolution: {integrity: sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
'@sinclair/typebox@0.34.48':
resolution: {integrity: sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==}
+ '@sindresorhus/merge-streams@2.3.0':
+ resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==}
+ engines: {node: '>=18'}
+
'@size-limit/esbuild@12.0.0':
resolution: {integrity: sha512-r9i+HrtunIu7wAPtqD3t4DqfYin3kxPoMAv8cidkzlCS69IYCe3EG2UbQa10AdvQyaHTEK+MPkr9ifUd3W29og==}
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
@@ -1718,6 +3577,9 @@ packages:
peerDependencies:
size-limit: 12.0.0
+ '@socket.io/component-emitter@3.1.2':
+ resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
+
'@solid-primitives/event-listener@2.4.3':
resolution: {integrity: sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg==}
peerDependencies:
@@ -1761,11 +3623,11 @@ packages:
'@standard-schema/spec@1.1.0':
resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
- '@stylistic/eslint-plugin@5.9.0':
- resolution: {integrity: sha512-FqqSkvDMYJReydrMhlugc71M76yLLQWNfmGq+SIlLa7N3kHp8Qq8i2PyWrVNAfjOyOIY+xv9XaaYwvVW7vroMA==}
+ '@stylistic/eslint-plugin@5.8.0':
+ resolution: {integrity: sha512-WNPVF/FfBAjyi3OA7gok8swRiImNLKI4dmV3iK/GC/0xSJR7eCzBFsw9hLZVgb1+MYNLy7aDsjohxN1hA/FIfQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^9.0.0 || ^10.0.0
+ eslint: '>=9.0.0'
'@sveltejs/acorn-typescript@1.0.9':
resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==}
@@ -1776,6 +3638,12 @@ packages:
resolution: {integrity: sha512-08eKiDAjj4zLug1taXSIJ0kGL5cawjVCyJkBb6EWSg5fEPX6L+Wtr0CH2If4j5KYylz85iaZiFlUItvgJvll5g==}
engines: {node: ^14.13.1 || ^16.0.0 || >=18}
+ '@tanstack/angular-store@0.8.1':
+ resolution: {integrity: sha512-Zb8e1QVeBoSu/s1R3fXczctEqB7lZrdPL87/9INwCaRSY3jPqNn3SlzP8yvwvBwv7axaFgfUrhQJXlnACC3Vnw==}
+ peerDependencies:
+ '@angular/common': '>=19.0.0'
+ '@angular/core': '>=19.0.0'
+
'@tanstack/devtools-client@0.0.5':
resolution: {integrity: sha512-hsNDE3iu4frt9cC2ppn1mNRnLKo2uc1/1hXAyY9z4UYb+o40M2clFAhiFoo4HngjfGJDV3x18KVVIq7W4Un+zA==}
engines: {node: '>=18'}
@@ -1874,6 +3742,9 @@ packages:
peerDependencies:
solid-js: ^1.6.0
+ '@tanstack/store@0.8.1':
+ resolution: {integrity: sha512-PtOisLjUZPz5VyPRSCGjNOlwTvabdTBQ2K80DpVL1chGVr35WRxfeavAPdNq6pm/t7F8GhoR2qtmkkqtCEtHYw==}
+
'@tanstack/store@0.9.1':
resolution: {integrity: sha512-+qcNkOy0N1qSGsP7omVCW0SDrXtaDcycPqBDE726yryiA5eTDFpjBReaYjghVJwNf1pcPMyzIwTGlYjCSQR0Fg==}
@@ -1914,6 +3785,14 @@ packages:
'@types/react-dom':
optional: true
+ '@tufjs/canonical-json@2.0.0':
+ resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ '@tufjs/models@3.0.1':
+ resolution: {integrity: sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
'@tybys/wasm-util@0.10.1':
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
@@ -1935,33 +3814,81 @@ packages:
'@types/babel__traverse@7.28.0':
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
+ '@types/body-parser@1.19.6':
+ resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==}
+
+ '@types/bonjour@3.5.13':
+ resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==}
+
'@types/chai@5.2.3':
resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
+ '@types/connect-history-api-fallback@1.5.4':
+ resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/cors@2.8.19':
+ resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==}
+
'@types/deep-eql@4.0.2':
resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
- '@types/esrecurse@4.3.1':
- resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
+ '@types/eslint-scope@3.7.7':
+ resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
+
+ '@types/eslint@9.6.1':
+ resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
+
+ '@types/estree@1.0.6':
+ resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+ '@types/express-serve-static-core@4.19.8':
+ resolution: {integrity: sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==}
+
+ '@types/express@4.17.25':
+ resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==}
+
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+ '@types/http-errors@2.0.5':
+ resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
+
+ '@types/http-proxy@1.17.17':
+ resolution: {integrity: sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==}
+
+ '@types/jasmine@5.1.15':
+ resolution: {integrity: sha512-ZAC8KjmV2MJxbNTrwXFN+HKeajpXQZp6KpPiR6Aa4XvaEnjP6qh23lL/Rqb7AYzlp3h/rcwDrQ7Gg7q28cQTQg==}
+
'@types/jsesc@2.5.1':
resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==}
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ '@types/mime@1.3.5':
+ resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
+
+ '@types/node-forge@1.3.14':
+ resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==}
+
'@types/node@12.20.55':
resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
'@types/node@25.3.0':
resolution: {integrity: sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==}
+ '@types/qs@6.14.0':
+ resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==}
+
+ '@types/range-parser@1.2.7':
+ resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
+
'@types/react-dom@19.2.3':
resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
peerDependencies:
@@ -1970,8 +3897,23 @@ packages:
'@types/react@19.2.14':
resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
- '@types/trusted-types@2.0.7':
- resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
+ '@types/retry@0.12.2':
+ resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==}
+
+ '@types/send@0.17.6':
+ resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==}
+
+ '@types/send@1.2.1':
+ resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==}
+
+ '@types/serve-index@1.9.4':
+ resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==}
+
+ '@types/serve-static@1.15.10':
+ resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==}
+
+ '@types/sockjs@0.3.36':
+ resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==}
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
@@ -1982,63 +3924,63 @@ packages:
'@types/ws@8.18.1':
resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
- '@typescript-eslint/eslint-plugin@8.56.0':
- resolution: {integrity: sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==}
+ '@typescript-eslint/eslint-plugin@8.55.0':
+ resolution: {integrity: sha512-1y/MVSz0NglV1ijHC8OT49mPJ4qhPYjiK08YUQVbIOyu+5k862LKUHFkpKHWu//zmr7hDR2rhwUm6gnCGNmGBQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.56.0
- eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ '@typescript-eslint/parser': ^8.55.0
+ eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/parser@8.56.0':
- resolution: {integrity: sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==}
+ '@typescript-eslint/parser@8.55.0':
+ resolution: {integrity: sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.56.0':
- resolution: {integrity: sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==}
+ '@typescript-eslint/project-service@8.55.0':
+ resolution: {integrity: sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/scope-manager@8.56.0':
- resolution: {integrity: sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==}
+ '@typescript-eslint/scope-manager@8.55.0':
+ resolution: {integrity: sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.56.0':
- resolution: {integrity: sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==}
+ '@typescript-eslint/tsconfig-utils@8.55.0':
+ resolution: {integrity: sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.56.0':
- resolution: {integrity: sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==}
+ '@typescript-eslint/type-utils@8.55.0':
+ resolution: {integrity: sha512-x1iH2unH4qAt6I37I2CGlsNs+B9WGxurP2uyZLRz6UJoZWDBx9cJL1xVN/FiOmHEONEg6RIufdvyT0TEYIgC5g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/types@8.56.0':
- resolution: {integrity: sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==}
+ '@typescript-eslint/types@8.55.0':
+ resolution: {integrity: sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.56.0':
- resolution: {integrity: sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==}
+ '@typescript-eslint/typescript-estree@8.55.0':
+ resolution: {integrity: sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/utils@8.56.0':
- resolution: {integrity: sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==}
+ '@typescript-eslint/utils@8.55.0':
+ resolution: {integrity: sha512-BqZEsnPGdYpgyEIkDC1BadNY8oMwckftxBT+C8W0g1iKPdeqKZBtTfnvcq0nf60u7MkjFO8RBvpRGZBPw4L2ow==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/visitor-keys@8.56.0':
- resolution: {integrity: sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==}
+ '@typescript-eslint/visitor-keys@8.55.0':
+ resolution: {integrity: sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
@@ -2144,6 +4086,12 @@ packages:
cpu: [x64]
os: [win32]
+ '@vitejs/plugin-basic-ssl@1.2.0':
+ resolution: {integrity: sha512-mkQnxTkcldAzIsomk1UuLfAu9n+kpQ3JbHcpCp7d2Oo6ITtji8pHS3QToOWjhPFvNQSnhlkAjmGbhv2QvwO/7Q==}
+ engines: {node: '>=14.21.3'}
+ peerDependencies:
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
+
'@vitejs/plugin-react@5.1.4':
resolution: {integrity: sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2179,6 +4127,57 @@ packages:
'@vitest/utils@4.0.18':
resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==}
+ '@webassemblyjs/ast@1.14.1':
+ resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
+
+ '@webassemblyjs/floating-point-hex-parser@1.13.2':
+ resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==}
+
+ '@webassemblyjs/helper-api-error@1.13.2':
+ resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==}
+
+ '@webassemblyjs/helper-buffer@1.14.1':
+ resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==}
+
+ '@webassemblyjs/helper-numbers@1.13.2':
+ resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==}
+
+ '@webassemblyjs/helper-wasm-bytecode@1.13.2':
+ resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==}
+
+ '@webassemblyjs/helper-wasm-section@1.14.1':
+ resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==}
+
+ '@webassemblyjs/ieee754@1.13.2':
+ resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==}
+
+ '@webassemblyjs/leb128@1.13.2':
+ resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==}
+
+ '@webassemblyjs/utf8@1.13.2':
+ resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==}
+
+ '@webassemblyjs/wasm-edit@1.14.1':
+ resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==}
+
+ '@webassemblyjs/wasm-gen@1.14.1':
+ resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==}
+
+ '@webassemblyjs/wasm-opt@1.14.1':
+ resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==}
+
+ '@webassemblyjs/wasm-parser@1.14.1':
+ resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==}
+
+ '@webassemblyjs/wast-printer@1.14.1':
+ resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
+
+ '@xtuc/ieee754@1.2.0':
+ resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
+
+ '@xtuc/long@4.2.2':
+ resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+
'@yarnpkg/lockfile@1.1.0':
resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==}
@@ -2190,27 +4189,89 @@ packages:
resolution: {integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==}
hasBin: true
+ abbrev@3.0.1:
+ resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+
+ acorn-import-phases@1.0.4:
+ resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==}
+ engines: {node: '>=10.13.0'}
+ peerDependencies:
+ acorn: ^8.14.0
+
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- acorn@8.16.0:
- resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
hasBin: true
- ajv@6.14.0:
- resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==}
+ adjust-sourcemap-loader@4.0.0:
+ resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==}
+ engines: {node: '>=8.9'}
+
+ agent-base@7.1.4:
+ resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
+ engines: {node: '>= 14'}
+
+ ajv-formats@2.1.1:
+ resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv-formats@3.0.1:
+ resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv-keywords@5.1.0:
+ resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
+ peerDependencies:
+ ajv: ^8.8.2
+
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+ ajv@8.17.1:
+ resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+
+ ajv@8.18.0:
+ resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==}
ansi-colors@4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
+ ansi-escapes@7.3.0:
+ resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==}
+ engines: {node: '>=18'}
+
+ ansi-html-community@0.0.8:
+ resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==}
+ engines: {'0': node >= 0.8.0}
+ hasBin: true
+
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
+ ansi-regex@6.2.2:
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
+ engines: {node: '>=12'}
+
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
@@ -2219,10 +4280,18 @@ packages:
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
engines: {node: '>=10'}
+ ansi-styles@6.2.3:
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
+ engines: {node: '>=12'}
+
ansis@4.2.0:
resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
engines: {node: '>=14'}
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
@@ -2243,6 +4312,9 @@ packages:
resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
engines: {node: '>= 0.4'}
+ array-flatten@1.1.1:
+ resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+
array-union@2.1.0:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
@@ -2261,6 +4333,13 @@ packages:
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+ autoprefixer@10.4.20:
+ resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
available-typed-arrays@1.0.7:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
@@ -2272,11 +4351,33 @@ packages:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
engines: {node: '>= 0.4'}
- babel-plugin-jsx-dom-expressions@0.40.5:
- resolution: {integrity: sha512-8TFKemVLDYezqqv4mWz+PhRrkryTzivTGu0twyLrOkVZ0P63COx2Y04eVsUjFlwSOXui1z3P3Pn209dokWnirg==}
+ babel-loader@9.2.1:
+ resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==}
+ engines: {node: '>= 14.15.0'}
+ peerDependencies:
+ '@babel/core': ^7.12.0
+ webpack: '>=5'
+
+ babel-plugin-jsx-dom-expressions@0.40.3:
+ resolution: {integrity: sha512-5HOwwt0BYiv/zxl7j8Pf2bGL6rDXfV6nUhLs8ygBX+EFJXzBPHM/euj9j/6deMZ6wa52Wb2PBaAV5U/jKwIY1w==}
peerDependencies:
'@babel/core': ^7.20.12
+ babel-plugin-polyfill-corejs2@0.4.15:
+ resolution: {integrity: sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-polyfill-corejs3@0.11.1:
+ resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-polyfill-regenerator@0.6.6:
+ resolution: {integrity: sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
babel-plugin-transform-hook-names@1.0.2:
resolution: {integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==}
peerDependencies:
@@ -2294,22 +4395,39 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- balanced-match@4.0.3:
- resolution: {integrity: sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==}
+ balanced-match@4.0.2:
+ resolution: {integrity: sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==}
engines: {node: 20 || >=22}
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- baseline-browser-mapping@2.10.0:
- resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==}
- engines: {node: '>=6.0.0'}
+ base64id@2.0.0:
+ resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==}
+ engines: {node: ^4.5.0 || >= 5.9}
+
+ baseline-browser-mapping@2.9.19:
+ resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==}
hasBin: true
+ batch@0.6.1:
+ resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==}
+
+ beasties@0.3.2:
+ resolution: {integrity: sha512-p4AF8uYzm9Fwu8m/hSVTCPXrRBPmB34hQpHsec2KOaR9CZmgoU8IOv4Cvwq4hgz2p4hLMNbsdNl5XeA6XbAQwA==}
+ engines: {node: '>=14.0.0'}
+
better-path-resolve@1.0.0:
resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==}
engines: {node: '>=4'}
+ big.js@5.2.2:
+ resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
birecord@0.1.1:
resolution: {integrity: sha512-VUpsf/qykW0heRlC8LooCq28Kxn3mAqKohhDG/49rrsQ1dT1CXyj/pgXS+5BSRzFTR/3DyIBOqQOrGyZOh71Aw==}
@@ -2319,6 +4437,13 @@ packages:
bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+ body-parser@1.20.4:
+ resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ bonjour-service@1.3.0:
+ resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==}
+
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
@@ -2341,17 +4466,32 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+ bundle-name@4.1.0:
+ resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
+ engines: {node: '>=18'}
+
bytes-iec@3.1.1:
resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==}
engines: {node: '>= 0.8'}
+ bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+
cac@6.7.14:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
+ cacache@19.0.1:
+ resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
@@ -2368,8 +4508,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- caniuse-lite@1.0.30001770:
- resolution: {integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==}
+ caniuse-lite@1.0.30001769:
+ resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==}
chai@6.2.2:
resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
@@ -2389,6 +4529,26 @@ packages:
resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==}
engines: {node: '>=20.18.1'}
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ chokidar@4.0.3:
+ resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
+ engines: {node: '>= 14.16.0'}
+
+ chownr@2.0.0:
+ resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
+ engines: {node: '>=10'}
+
+ chownr@3.0.0:
+ resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
+ engines: {node: '>=18'}
+
+ chrome-trace-event@1.0.4:
+ resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
+ engines: {node: '>=6.0'}
+
ci-info@3.9.0:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
@@ -2397,14 +4557,33 @@ packages:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
engines: {node: '>=8'}
+ cli-cursor@5.0.0:
+ resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
+ engines: {node: '>=18'}
+
cli-spinners@2.6.1:
resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==}
engines: {node: '>=6'}
+ cli-truncate@4.0.0:
+ resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
+ engines: {node: '>=18'}
+
+ cli-width@4.1.0:
+ resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
+ engines: {node: '>= 12'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
+ clone-deep@4.0.1:
+ resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
+ engines: {node: '>=6'}
+
clone@1.0.4:
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
engines: {node: '>=0.8'}
@@ -2420,27 +4599,110 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ colorette@2.0.20:
+ resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+
combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
comment-parser@1.4.5:
resolution: {integrity: sha512-aRDkn3uyIlCFfk5NUA+VdwMmMsh8JGhc4hapfV4yxymHGQ3BVskMQfoXGpCo5IoBuQ9tS5iiVKhCpTcB4pW4qw==}
engines: {node: '>= 12.0.0'}
+ common-path-prefix@3.0.0:
+ resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==}
+
compare-versions@6.1.1:
resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==}
+ compressible@2.0.18:
+ resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
+ engines: {node: '>= 0.6'}
+
+ compression@1.8.1:
+ resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==}
+ engines: {node: '>= 0.8.0'}
+
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ connect-history-api-fallback@2.0.0:
+ resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==}
+ engines: {node: '>=0.8'}
+
+ connect@3.7.0:
+ resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==}
+ engines: {node: '>= 0.10.0'}
+
+ content-disposition@0.5.4:
+ resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
+ engines: {node: '>= 0.6'}
+
+ content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
+
+ convert-source-map@1.9.0:
+ resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
+
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+ cookie-signature@1.0.7:
+ resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==}
+
+ cookie@0.7.2:
+ resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
+ engines: {node: '>= 0.6'}
+
+ copy-anything@2.0.6:
+ resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==}
+
+ copy-webpack-plugin@12.0.2:
+ resolution: {integrity: sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==}
+ engines: {node: '>= 18.12.0'}
+ peerDependencies:
+ webpack: ^5.1.0
+
+ core-js-compat@3.48.0:
+ resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==}
+
+ core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
+ cors@2.8.6:
+ resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==}
+ engines: {node: '>= 0.10'}
+
+ cosmiconfig@9.0.0:
+ resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
+ css-loader@7.1.2:
+ resolution: {integrity: sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==}
+ engines: {node: '>= 18.12.0'}
+ peerDependencies:
+ '@rspack/core': 0.x || 1.x
+ webpack: ^5.27.0
+ peerDependenciesMeta:
+ '@rspack/core':
+ optional: true
+ webpack:
+ optional: true
+
css-select@5.2.2:
resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
@@ -2451,12 +4713,32 @@ packages:
css.escape@1.5.1:
resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
csstype@3.2.3:
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+ custom-event@1.0.1:
+ resolution: {integrity: sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==}
+
dataloader@1.4.0:
resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==}
+ date-format@4.0.14:
+ resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==}
+ engines: {node: '>=4.0'}
+
+ debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
@@ -2473,6 +4755,14 @@ packages:
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ default-browser-id@5.0.1:
+ resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==}
+ engines: {node: '>=18'}
+
+ default-browser@5.5.0:
+ resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==}
+ engines: {node: '>=18'}
+
defaults@1.0.4:
resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
@@ -2484,6 +4774,10 @@ packages:
resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
engines: {node: '>=8'}
+ define-lazy-prop@3.0.0:
+ resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
+ engines: {node: '>=12'}
+
define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
@@ -2495,27 +4789,56 @@ packages:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
+ depd@1.1.2:
+ resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
+ engines: {node: '>= 0.6'}
+
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
+ destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
detect-indent@6.1.0:
resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
engines: {node: '>=8'}
- devalue@5.6.3:
- resolution: {integrity: sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==}
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ detect-node@2.1.0:
+ resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
+
+ devalue@5.6.2:
+ resolution: {integrity: sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==}
+
+ di@0.0.1:
+ resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==}
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
+ dns-packet@5.6.1:
+ resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==}
+ engines: {node: '>=6'}
+
dom-accessibility-api@0.5.16:
resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
dom-accessibility-api@0.6.3:
resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==}
+ dom-serialize@2.2.1:
+ resolution: {integrity: sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==}
+
dom-serializer@2.0.0:
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
@@ -2554,27 +4877,62 @@ packages:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
ejs@3.1.10:
resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
engines: {node: '>=0.10.0'}
hasBin: true
- electron-to-chromium@1.5.302:
- resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==}
+ electron-to-chromium@1.5.286:
+ resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==}
+
+ emoji-regex@10.6.0:
+ resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ emojis-list@3.0.0:
+ resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
+ engines: {node: '>= 4'}
+
empathic@2.0.0:
resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==}
engines: {node: '>=14'}
+ encodeurl@1.0.2:
+ resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+ engines: {node: '>= 0.8'}
+
+ encodeurl@2.0.0:
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+ engines: {node: '>= 0.8'}
+
encoding-sniffer@0.2.1:
resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==}
+ encoding@0.1.13:
+ resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
+
end-of-stream@1.4.5:
resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
+ engine.io-parser@5.2.3:
+ resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
+ engines: {node: '>=10.0.0'}
+
+ engine.io@6.6.5:
+ resolution: {integrity: sha512-2RZdgEbXmp5+dVbRm0P7HQUImZpICccJy7rN7Tv+SFa55pH+lxnuw6/K1ZxxBfHoYpSkHLAO92oa8O4SwFXA2A==}
+ engines: {node: '>=10.2.0'}
+
enhanced-resolve@5.19.0:
resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==}
engines: {node: '>=10.13.0'}
@@ -2587,6 +4945,10 @@ packages:
resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
engines: {node: '>=8.6'}
+ ent@2.2.2:
+ resolution: {integrity: sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw==}
+ engines: {node: '>= 0.4'}
+
entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
@@ -2599,6 +4961,24 @@ packages:
resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
engines: {node: '>=0.12'}
+ env-paths@2.2.1:
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+ engines: {node: '>=6'}
+
+ environment@1.1.0:
+ resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
+ engines: {node: '>=18'}
+
+ err-code@2.0.3:
+ resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
+
+ errno@0.1.8:
+ resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
+ hasBin: true
+
+ error-ex@1.3.4:
+ resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
+
es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
@@ -2613,6 +4993,9 @@ packages:
es-module-lexer@1.7.0:
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+ es-module-lexer@2.0.0:
+ resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
+
es-object-atoms@1.1.1:
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
engines: {node: '>= 0.4'}
@@ -2621,6 +5004,16 @@ packages:
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
engines: {node: '>= 0.4'}
+ esbuild-wasm@0.25.4:
+ resolution: {integrity: sha512-2HlCS6rNvKWaSKhWaG/YIyRsTsL3gUrMP2ToZMBIjw9LM7vVcIs+rz8kE2vExvTJgvM8OKPqNpcHawY/BQc/qQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ esbuild@0.25.4:
+ resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==}
+ engines: {node: '>=18'}
+ hasBin: true
+
esbuild@0.27.3:
resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
engines: {node: '>=18'}
@@ -2630,6 +5023,9 @@ packages:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
@@ -2741,14 +5137,14 @@ packages:
'@typescript-eslint/eslint-plugin':
optional: true
+ eslint-scope@5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+
eslint-scope@8.4.0:
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint-scope@9.1.1:
- resolution: {integrity: sha512-GaUN0sWim5qc8KVErfPBWmc31LEsOkrUJbvJZV+xuL3u2phMUK4HIvXlWAakfC8W4nzlK+chPEAkYOYb5ZScIw==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -2757,12 +5153,8 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint-visitor-keys@5.0.1:
- resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
- eslint@9.39.3:
- resolution: {integrity: sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==}
+ eslint@9.39.2:
+ resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -2778,10 +5170,6 @@ packages:
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- espree@11.1.1:
- resolution: {integrity: sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
@@ -2798,6 +5186,10 @@ packages:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
+ estraverse@4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+
estraverse@5.3.0:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
@@ -2812,10 +5204,34 @@ packages:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.4:
+ resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==}
+
+ events@3.3.0:
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
+
expect-type@1.3.0:
resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
engines: {node: '>=12.0.0'}
+ exponential-backoff@3.1.3:
+ resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==}
+
+ express@4.22.1:
+ resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==}
+ engines: {node: '>= 0.10.0'}
+
+ extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+
extendable-error@0.1.7:
resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
@@ -2832,9 +5248,16 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ fast-uri@3.1.0:
+ resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
+
fastq@1.20.1:
resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
+ faye-websocket@0.11.4:
+ resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==}
+ engines: {node: '>=0.8.0'}
+
fd-package-json@2.0.0:
resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==}
@@ -2862,6 +5285,18 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
+ finalhandler@1.1.2:
+ resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
+ engines: {node: '>= 0.8'}
+
+ finalhandler@1.3.2:
+ resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==}
+ engines: {node: '>= 0.8'}
+
+ find-cache-dir@4.0.0:
+ resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==}
+ engines: {node: '>=14.16'}
+
find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
@@ -2870,6 +5305,10 @@ packages:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
+ find-up@6.3.0:
+ resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
flat-cache@4.0.1:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
@@ -2894,6 +5333,10 @@ packages:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
engines: {node: '>= 0.4'}
+ foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
+
form-data@4.0.5:
resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
engines: {node: '>= 6'}
@@ -2903,6 +5346,17 @@ packages:
engines: {node: '>=18.3.0'}
hasBin: true
+ forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+
+ fraction.js@4.3.7:
+ resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
+
+ fresh@0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+
front-matter@4.0.2:
resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==}
@@ -2917,6 +5371,17 @@ packages:
resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
engines: {node: '>=6 <7 || >=8'}
+ fs-minipass@2.1.0:
+ resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
+ engines: {node: '>= 8'}
+
+ fs-minipass@3.0.3:
+ resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -2936,6 +5401,10 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
+ get-east-asian-width@1.5.0:
+ resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==}
+ engines: {node: '>=18'}
+
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
@@ -2955,6 +5424,24 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
+ glob-to-regex.js@1.2.0:
+ resolution: {integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ glob-to-regexp@0.4.1:
+ resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+
+ glob@10.5.0:
+ resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
+ deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
+ hasBin: true
+
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
+
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
@@ -2971,6 +5458,10 @@ packages:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
engines: {node: '>=10'}
+ globby@14.1.0:
+ resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==}
+ engines: {node: '>=18'}
+
globrex@0.1.2:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
@@ -2986,6 +5477,9 @@ packages:
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ handle-thing@2.0.1:
+ resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==}
+
happy-dom@20.7.0:
resolution: {integrity: sha512-hR/uLYQdngTyEfxnOoa+e6KTcfBFyc1hgFj/Cc144A5JJUuHFYqIEBDcD4FeGqUeKLRZqJ9eN9u7/GDjYEgS1g==}
engines: {node: '>=20.0.0'}
@@ -3026,19 +5520,79 @@ packages:
hookable@6.0.1:
resolution: {integrity: sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw==}
+ hosted-git-info@8.1.0:
+ resolution: {integrity: sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ hpack.js@2.1.6:
+ resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==}
+
html-entities@2.3.3:
resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==}
+ html-escaper@2.0.2:
+ resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
+
html-link-extractor@1.0.5:
resolution: {integrity: sha512-ADd49pudM157uWHwHQPUSX4ssMsvR/yHIswOR5CUfBdK9g9ZYGMhVSE6KZVHJ6kCkR0gH4htsfzU6zECDNVwyw==}
htmlparser2@10.1.0:
resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==}
+ http-cache-semantics@4.2.0:
+ resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==}
+
+ http-deceiver@1.2.7:
+ resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==}
+
+ http-errors@1.8.1:
+ resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==}
+ engines: {node: '>= 0.6'}
+
+ http-errors@2.0.1:
+ resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
+ engines: {node: '>= 0.8'}
+
+ http-parser-js@0.5.10:
+ resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==}
+
+ http-proxy-agent@7.0.2:
+ resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
+ engines: {node: '>= 14'}
+
+ http-proxy-middleware@2.0.9:
+ resolution: {integrity: sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@types/express': ^4.17.13
+ peerDependenciesMeta:
+ '@types/express':
+ optional: true
+
+ http-proxy-middleware@3.0.5:
+ resolution: {integrity: sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ http-proxy@1.18.1:
+ resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
+ engines: {node: '>=8.0.0'}
+
+ https-proxy-agent@7.0.6:
+ resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
+ engines: {node: '>= 14'}
+
human-id@4.1.3:
resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==}
hasBin: true
+ hyperdyperid@1.2.0:
+ resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==}
+ engines: {node: '>=10.18'}
+
+ iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+
iconv-lite@0.6.3:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
@@ -3047,9 +5601,19 @@ packages:
resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==}
engines: {node: '>=0.10.0'}
+ icss-utils@5.1.0:
+ resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+ ignore-walk@7.0.0:
+ resolution: {integrity: sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
@@ -3058,6 +5622,14 @@ packages:
resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
engines: {node: '>= 4'}
+ image-size@0.5.5:
+ resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ immutable@5.1.4:
+ resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==}
+
import-fresh@3.3.1:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
@@ -3074,13 +5646,33 @@ packages:
resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
engines: {node: '>=8'}
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ ini@5.0.0:
+ resolution: {integrity: sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
internal-slot@1.1.0:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines: {node: '>= 0.4'}
+ ip-address@10.1.0:
+ resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==}
+ engines: {node: '>= 12'}
+
+ ipaddr.js@1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+
+ ipaddr.js@2.3.0:
+ resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==}
+ engines: {node: '>= 10'}
+
is-arguments@1.2.0:
resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==}
engines: {node: '>= 0.4'}
@@ -3089,10 +5681,17 @@ packages:
resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
engines: {node: '>= 0.4'}
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
is-bigint@1.1.0:
resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
engines: {node: '>= 0.4'}
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
is-boolean-object@1.2.2:
resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
engines: {node: '>= 0.4'}
@@ -3101,6 +5700,10 @@ packages:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
is-date-object@1.1.0:
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
engines: {node: '>= 0.4'}
@@ -3110,6 +5713,11 @@ packages:
engines: {node: '>=8'}
hasBin: true
+ is-docker@3.0.0:
+ resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@@ -3118,6 +5726,14 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
+ is-fullwidth-code-point@4.0.0:
+ resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
+ engines: {node: '>=12'}
+
+ is-fullwidth-code-point@5.1.0:
+ resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==}
+ engines: {node: '>=18'}
+
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -3128,6 +5744,11 @@ packages:
eslint: '*'
typescript: '>=4.7.4'
+ is-inside-container@1.0.0:
+ resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+ engines: {node: '>=14.16'}
+ hasBin: true
+
is-interactive@1.0.0:
resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
engines: {node: '>=8'}
@@ -3136,6 +5757,10 @@ packages:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
+ is-network-error@1.3.0:
+ resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==}
+ engines: {node: '>=16'}
+
is-number-object@1.1.1:
resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
engines: {node: '>= 0.4'}
@@ -3144,6 +5769,18 @@ packages:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
+ is-plain-obj@3.0.0:
+ resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==}
+ engines: {node: '>=10'}
+
+ is-plain-object@2.0.4:
+ resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
+ engines: {node: '>=0.10.0'}
+
+ is-plain-object@5.0.0:
+ resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
+ engines: {node: '>=0.10.0'}
+
is-reference@3.0.3:
resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
@@ -3183,6 +5820,9 @@ packages:
resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
engines: {node: '>= 0.4'}
+ is-what@3.14.1:
+ resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==}
+
is-what@4.1.16:
resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
engines: {node: '>=12.13'}
@@ -3195,21 +5835,85 @@ packages:
resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
engines: {node: '>=8'}
+ is-wsl@3.1.1:
+ resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==}
+ engines: {node: '>=16'}
+
+ isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+
isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+ isbinaryfile@4.0.10:
+ resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==}
+ engines: {node: '>= 8.0.0'}
+
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ isexe@3.1.5:
+ resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==}
+ engines: {node: '>=18'}
+
+ isobject@3.0.1:
+ resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
+ engines: {node: '>=0.10.0'}
+
+ istanbul-lib-coverage@3.2.2:
+ resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-instrument@5.2.1:
+ resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-instrument@6.0.3:
+ resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==}
+ engines: {node: '>=10'}
+
+ istanbul-lib-report@3.0.1:
+ resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
+ engines: {node: '>=10'}
+
+ istanbul-lib-source-maps@4.0.1:
+ resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
+ engines: {node: '>=10'}
+
+ istanbul-reports@3.2.0:
+ resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==}
+ engines: {node: '>=8'}
+
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+ jackspeak@4.2.3:
+ resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==}
+ engines: {node: 20 || >=22}
+
jake@10.9.4:
resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==}
engines: {node: '>=10'}
hasBin: true
+ jasmine-core@4.6.1:
+ resolution: {integrity: sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==}
+
+ jasmine-core@5.6.0:
+ resolution: {integrity: sha512-niVlkeYVRwKFpmfWg6suo6H9CrNnydfBLEqefM5UjibYS+UoTjZdmvPJSiuyrRLGnFj1eYRhFd/ch+5hSlsFVA==}
+
jest-diff@30.2.0:
resolution: {integrity: sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==}
engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ jest-worker@27.5.1:
+ resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
+ engines: {node: '>= 10.13.0'}
+
+ jiti@1.21.7:
+ resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
+ hasBin: true
+
jiti@2.6.1:
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
@@ -3233,9 +5937,19 @@ packages:
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ json-parse-even-better-errors@4.0.0:
+ resolution: {integrity: sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
@@ -3247,12 +5961,51 @@ packages:
jsonc-parser@3.2.0:
resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
+ jsonc-parser@3.3.1:
+ resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==}
+
jsonfile@4.0.0:
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ karma-chrome-launcher@3.2.0:
+ resolution: {integrity: sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==}
+
+ karma-coverage@2.2.1:
+ resolution: {integrity: sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==}
+ engines: {node: '>=10.0.0'}
+
+ karma-jasmine-html-reporter@2.1.0:
+ resolution: {integrity: sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==}
+ peerDependencies:
+ jasmine-core: ^4.0.0 || ^5.0.0
+ karma: ^6.0.0
+ karma-jasmine: ^5.0.0
+
+ karma-jasmine@5.1.0:
+ resolution: {integrity: sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ karma: ^6.0.0
+
+ karma-source-map-support@1.4.0:
+ resolution: {integrity: sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==}
+
+ karma@6.4.4:
+ resolution: {integrity: sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==}
+ engines: {node: '>= 10'}
+ hasBin: true
+
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+
knip@5.85.0:
resolution: {integrity: sha512-V2kyON+DZiYdNNdY6GALseiNCwX7dYdpz9Pv85AUn69Gk0UKCts+glOKWfe5KmaMByRjM9q17Mzj/KinTVOyxg==}
engines: {node: '>=18.18.0'}
@@ -3264,14 +6017,46 @@ packages:
kolorist@1.8.0:
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
+ launch-editor@2.13.0:
+ resolution: {integrity: sha512-u+9asUHMJ99lA15VRMXw5XKfySFR9dGXwgsgS14YTbUq3GITP58mIM32At90P5fZ+MUId5Yw+IwI/yKub7jnCQ==}
+
+ less-loader@12.2.0:
+ resolution: {integrity: sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==}
+ engines: {node: '>= 18.12.0'}
+ peerDependencies:
+ '@rspack/core': 0.x || 1.x
+ less: ^3.5.0 || ^4.0.0
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ '@rspack/core':
+ optional: true
+ webpack:
+ optional: true
+
+ less@4.2.2:
+ resolution: {integrity: sha512-tkuLHQlvWUTeQ3doAqnHbNn8T6WX1KA8yvbKG9x4VtKtIjHsVKQZCH11zRgAfbDAXC2UNIg/K9BYAAcEzUIrNg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
+ license-webpack-plugin@4.0.2:
+ resolution: {integrity: sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==}
+ peerDependencies:
+ webpack: '*'
+ peerDependenciesMeta:
+ webpack:
+ optional: true
+
lilconfig@3.1.3:
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
engines: {node: '>=14'}
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
lines-and-columns@2.0.3:
resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -3279,6 +6064,26 @@ packages:
linkify-it@5.0.0:
resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
+ listr2@8.2.5:
+ resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==}
+ engines: {node: '>=18.0.0'}
+
+ lmdb@3.2.6:
+ resolution: {integrity: sha512-SuHqzPl7mYStna8WRotY8XX/EUZBjjv3QyKIByeCLFfC9uXT/OIHByEcA07PzbMfQAM0KYJtLgtpMRlIe5dErQ==}
+ hasBin: true
+
+ loader-runner@4.3.1:
+ resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==}
+ engines: {node: '>=6.11.5'}
+
+ loader-utils@2.0.4:
+ resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==}
+ engines: {node: '>=8.9.0'}
+
+ loader-utils@3.3.1:
+ resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==}
+ engines: {node: '>= 12.13.0'}
+
locate-character@3.0.0:
resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
@@ -3290,16 +6095,37 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
+ locate-path@7.2.0:
+ resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ lodash.debounce@4.0.8:
+ resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
lodash.startcase@4.4.0:
resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
+ lodash@4.17.23:
+ resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
+
log-symbols@4.1.0:
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
engines: {node: '>=10'}
+ log-update@6.1.0:
+ resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
+ engines: {node: '>=18'}
+
+ log4js@6.9.1:
+ resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==}
+ engines: {node: '>=8.0'}
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
@@ -3310,9 +6136,24 @@ packages:
resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
hasBin: true
+ magic-string@0.30.17:
+ resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+ make-dir@2.1.0:
+ resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
+ engines: {node: '>=6'}
+
+ make-dir@4.0.0:
+ resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
+ engines: {node: '>=10'}
+
+ make-fetch-happen@14.0.3:
+ resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
markdown-it@14.1.1:
resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==}
hasBin: true
@@ -3320,8 +6161,8 @@ packages:
markdown-link-extractor@4.0.3:
resolution: {integrity: sha512-aEltJiQ4/oC0h6Jbw/uuATGSHZPkcH8DIunNH1A0e+GSFkvZ6BbBkdvBTVfIV8r6HapCU3yTd0eFdi3ZeM1eAQ==}
- marked@17.0.3:
- resolution: {integrity: sha512-jt1v2ObpyOKR8p4XaUJVk3YWRJ5n+i4+rjQopxvV32rSndTJXvIzuUdWWIy/1pFQMkQmvTXawzDNqOH/CUmx6A==}
+ marked@17.0.2:
+ resolution: {integrity: sha512-s5HZGFQea7Huv5zZcAGhJLT3qLpAfnY7v7GWkICUr0+Wd5TFEtdlRR2XUL5Gg+RH7u2Df595ifrxR03mBaw7gA==}
engines: {node: '>= 20'}
hasBin: true
@@ -3332,14 +6173,33 @@ packages:
mdurl@2.0.0:
resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
+ media-typer@0.3.0:
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ engines: {node: '>= 0.6'}
+
+ memfs@4.56.10:
+ resolution: {integrity: sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==}
+ peerDependencies:
+ tslib: '2'
+
merge-anything@5.1.7:
resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==}
engines: {node: '>=12.13'}
+ merge-descriptors@1.0.3:
+ resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
+ methods@1.1.2:
+ resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
+ engines: {node: '>= 0.6'}
+
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
@@ -3352,21 +6212,44 @@ packages:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
+ mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ mime@2.6.0:
+ resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
+ engines: {node: '>=4.0.0'}
+ hasBin: true
+
mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
+ mimic-function@5.0.1:
+ resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
+ engines: {node: '>=18'}
+
min-indent@1.0.1:
resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
engines: {node: '>=4'}
+ mini-css-extract-plugin@2.9.2:
+ resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==}
+ engines: {node: '>= 12.13.0'}
+ peerDependencies:
+ webpack: ^5.0.0
+
+ minimalistic-assert@1.0.1:
+ resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
+
minimatch@10.1.1:
resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==}
engines: {node: 20 || >=22}
- minimatch@10.2.2:
- resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==}
- engines: {node: 18 || 20 || >=22}
+ minimatch@10.2.0:
+ resolution: {integrity: sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w==}
+ engines: {node: 20 || >=22}
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -3382,13 +6265,88 @@ packages:
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ minipass-collect@2.0.1:
+ resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minipass-fetch@4.0.1:
+ resolution: {integrity: sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ minipass-flush@1.0.5:
+ resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==}
+ engines: {node: '>= 8'}
+
+ minipass-pipeline@1.2.4:
+ resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==}
+ engines: {node: '>=8'}
+
+ minipass-sized@1.0.3:
+ resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==}
+ engines: {node: '>=8'}
+
+ minipass@3.3.6:
+ resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
+ engines: {node: '>=8'}
+
+ minipass@5.0.0:
+ resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
+ engines: {node: '>=8'}
+
+ minipass@7.1.3:
+ resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minizlib@2.1.2:
+ resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
+ engines: {node: '>= 8'}
+
+ minizlib@3.1.0:
+ resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
+ engines: {node: '>= 18'}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mkdirp@1.0.4:
+ resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
+ mrmime@2.0.1:
+ resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
+ engines: {node: '>=10'}
+
+ ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ msgpackr-extract@3.0.3:
+ resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==}
+ hasBin: true
+
+ msgpackr@1.11.8:
+ resolution: {integrity: sha512-bC4UGzHhVvgDNS7kn9tV8fAucIYUBuGojcaLiz7v+P63Lmtm0Xeji8B/8tYKddALXxJLpwIeBmUN3u64C4YkRA==}
+
+ multicast-dns@7.2.5:
+ resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==}
+ hasBin: true
+
+ mute-stream@1.0.0:
+ resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ mute-stream@2.0.0:
+ resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -3410,6 +6368,32 @@ packages:
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ needle@3.3.1:
+ resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==}
+ engines: {node: '>= 4.4.x'}
+ hasBin: true
+
+ negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+
+ negotiator@0.6.4:
+ resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
+ engines: {node: '>= 0.6'}
+
+ negotiator@1.0.0:
+ resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
+ engines: {node: '>= 0.6'}
+
+ neo-async@2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+
+ node-addon-api@6.1.0:
+ resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==}
+
+ node-addon-api@7.1.1:
+ resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
+
node-fetch@2.7.0:
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
engines: {node: 4.x || >=6.0.0}
@@ -3419,6 +6403,19 @@ packages:
encoding:
optional: true
+ node-forge@1.3.3:
+ resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==}
+ engines: {node: '>= 6.13.0'}
+
+ node-gyp-build-optional-packages@5.2.2:
+ resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==}
+ hasBin: true
+
+ node-gyp@11.5.0:
+ resolution: {integrity: sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+ hasBin: true
+
node-html-parser@6.1.13:
resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==}
@@ -3428,8 +6425,49 @@ packages:
node-releases@2.0.27:
resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
- npm-run-path@4.0.1:
- resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ nopt@8.1.0:
+ resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ normalize-range@0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+ engines: {node: '>=0.10.0'}
+
+ npm-bundled@4.0.0:
+ resolution: {integrity: sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ npm-install-checks@7.1.2:
+ resolution: {integrity: sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ npm-normalize-package-bin@4.0.0:
+ resolution: {integrity: sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ npm-package-arg@12.0.2:
+ resolution: {integrity: sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ npm-packlist@9.0.0:
+ resolution: {integrity: sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ npm-pick-manifest@10.0.0:
+ resolution: {integrity: sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ npm-registry-fetch@18.0.2:
+ resolution: {integrity: sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
nth-check@2.1.1:
@@ -3447,6 +6485,10 @@ packages:
'@swc/core':
optional: true
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
@@ -3463,9 +6505,24 @@ packages:
resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
engines: {node: '>= 0.4'}
+ obuf@1.1.2:
+ resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
+
obug@2.1.1:
resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
+ on-finished@2.3.0:
+ resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
+ engines: {node: '>= 0.8'}
+
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
+ on-headers@1.1.0:
+ resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==}
+ engines: {node: '>= 0.8'}
+
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
@@ -3473,6 +6530,14 @@ packages:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
+ onetime@7.0.0:
+ resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
+ engines: {node: '>=18'}
+
+ open@10.1.0:
+ resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==}
+ engines: {node: '>=18'}
+
open@8.4.2:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
engines: {node: '>=12'}
@@ -3485,11 +6550,18 @@ packages:
resolution: {integrity: sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==}
engines: {node: '>=10'}
+ ora@5.4.1:
+ resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
+ engines: {node: '>=10'}
+
+ ordered-binary@1.6.1:
+ resolution: {integrity: sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==}
+
outdent@0.5.0:
resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==}
- oxc-resolver@11.18.0:
- resolution: {integrity: sha512-Fv/b05AfhpYoCDvsog6tgsDm2yIwIeJafpMFLncNwKHRYu+Y1xQu5Q/rgUn7xBfuhNgjtPO7C0jCf7p2fLDj1g==}
+ oxc-resolver@11.17.1:
+ resolution: {integrity: sha512-pyRXK9kH81zKlirHufkFhOFBZRks8iAMLwPH8gU7lvKFiuzUH9L8MxDEllazwOb8fjXMcWjY1PMDfMJ2/yh5cw==}
p-filter@2.1.0:
resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==}
@@ -3503,6 +6575,10 @@ packages:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
+ p-limit@4.0.0:
+ resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
@@ -3511,45 +6587,105 @@ packages:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
+ p-locate@6.0.0:
+ resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
p-map@2.1.0:
resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==}
engines: {node: '>=6'}
+ p-map@7.0.4:
+ resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==}
+ engines: {node: '>=18'}
+
+ p-retry@6.2.1:
+ resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==}
+ engines: {node: '>=16.17'}
+
p-try@2.2.0:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
package-manager-detector@0.2.11:
resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==}
package-manager-detector@1.6.0:
resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==}
+ pacote@20.0.0:
+ resolution: {integrity: sha512-pRjC5UFwZCgx9kUFDVM9YEahv4guZ1nSLqwmWiLUnDbGsjs+U5w7z6Uc8HNR1a6x8qnu5y9xtGE6D1uAuYz+0A==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+ hasBin: true
+
parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ parse-node-version@1.0.1:
+ resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==}
+ engines: {node: '>= 0.10'}
+
+ parse5-html-rewriting-stream@7.0.0:
+ resolution: {integrity: sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==}
+
parse5-htmlparser2-tree-adapter@7.1.0:
resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==}
parse5-parser-stream@7.1.2:
resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==}
+ parse5-sax-parser@7.0.0:
+ resolution: {integrity: sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==}
+
parse5@7.3.0:
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
+ path-exists@5.0.0:
+ resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ path-to-regexp@0.1.12:
+ resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==}
+
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
+ path-type@6.0.0:
+ resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==}
+ engines: {node: '>=18'}
+
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
@@ -3560,6 +6696,10 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
+ picomatch@4.0.2:
+ resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+ engines: {node: '>=12'}
+
picomatch@4.0.3:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
@@ -3568,10 +6708,68 @@ packages:
resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
engines: {node: '>=6'}
+ piscina@4.8.0:
+ resolution: {integrity: sha512-EZJb+ZxDrQf3dihsUL7p42pjNyrNIFJCrRHPMgxu/svsj+P3xS3fuEWp7k2+rfsavfl1N0G29b1HGs7J0m8rZA==}
+
+ pkg-dir@7.0.0:
+ resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==}
+ engines: {node: '>=14.16'}
+
possible-typed-array-names@1.1.0:
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
+ postcss-loader@8.1.1:
+ resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==}
+ engines: {node: '>= 18.12.0'}
+ peerDependencies:
+ '@rspack/core': 0.x || 1.x
+ postcss: ^7.0.0 || ^8.0.1
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ '@rspack/core':
+ optional: true
+ webpack:
+ optional: true
+
+ postcss-media-query-parser@0.2.3:
+ resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==}
+
+ postcss-modules-extract-imports@3.1.0:
+ resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-modules-local-by-default@4.2.0:
+ resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-modules-scope@3.2.1:
+ resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-modules-values@4.0.0:
+ resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-selector-parser@7.1.1:
+ resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==}
+ engines: {node: '>=4'}
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+ postcss@8.5.2:
+ resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==}
+ engines: {node: ^10 || ^12 || >=14}
+
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
@@ -3612,9 +6810,27 @@ packages:
resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==}
engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ proc-log@5.0.0:
+ resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+
+ promise-retry@2.0.1:
+ resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==}
+ engines: {node: '>=10'}
+
+ proxy-addr@2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+ prr@1.0.1:
+ resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
+
publint@0.3.17:
resolution: {integrity: sha512-Q3NLegA9XM6usW+dYQRG1g9uEHiYUzcCVBJDJ7yMcWRqVU9LYZUWdqbwMZfmTCFC5PZLQpLAmhvRcQRl3exqkw==}
engines: {node: '>=18'}
@@ -3624,10 +6840,21 @@ packages:
resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
engines: {node: '>=6'}
+ punycode@1.4.1:
+ resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==}
+
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
+ qjobs@1.2.0:
+ resolution: {integrity: sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==}
+ engines: {node: '>=0.9'}
+
+ qs@6.14.2:
+ resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==}
+ engines: {node: '>=0.6'}
+
quansync@0.2.11:
resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
@@ -3637,6 +6864,17 @@ packages:
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
+ raw-body@2.5.3:
+ resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==}
+ engines: {node: '>= 0.8'}
+
react-dom@19.2.4:
resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==}
peerDependencies:
@@ -3660,22 +6898,67 @@ packages:
resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==}
engines: {node: '>=6'}
+ readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+
readable-stream@3.6.2:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'}
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ readdirp@4.1.2:
+ resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
+ engines: {node: '>= 14.18.0'}
+
redent@3.0.0:
resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
engines: {node: '>=8'}
+ reflect-metadata@0.2.2:
+ resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==}
+
+ regenerate-unicode-properties@10.2.2:
+ resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==}
+ engines: {node: '>=4'}
+
+ regenerate@1.4.2:
+ resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ regex-parser@2.3.1:
+ resolution: {integrity: sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==}
+
regexp.prototype.flags@1.5.4:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines: {node: '>= 0.4'}
+ regexpu-core@6.4.0:
+ resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==}
+ engines: {node: '>=4'}
+
+ regjsgen@0.8.0:
+ resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==}
+
+ regjsparser@0.13.0:
+ resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==}
+ hasBin: true
+
require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
+ requires-port@1.0.0:
+ resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
+
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -3687,18 +6970,52 @@ packages:
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+ resolve-url-loader@5.0.0:
+ resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==}
+ engines: {node: '>=12'}
+
resolve.exports@2.0.3:
resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==}
engines: {node: '>=10'}
+ resolve@1.22.10:
+ resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
restore-cursor@3.1.0:
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
engines: {node: '>=8'}
+ restore-cursor@5.1.0:
+ resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
+ engines: {node: '>=18'}
+
+ retry@0.12.0:
+ resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
+ engines: {node: '>= 4'}
+
+ retry@0.13.1:
+ resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
+ engines: {node: '>= 4'}
+
reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
+ rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+
rolldown-plugin-dts@0.22.1:
resolution: {integrity: sha512-5E0AiM5RSQhU6cjtkDFWH6laW4IrMu0j1Mo8x04Xo1ALHmaRMs9/7zej7P3RrryVHW/DdZAp85MA7Be55p0iUw==}
engines: {node: '>=20.19.0'}
@@ -3723,18 +7040,36 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
- rollup@4.58.0:
- resolution: {integrity: sha512-wbT0mBmWbIvvq8NeEYWWvevvxnOyhKChir47S66WCxw1SXqhw7ssIYejnQEVt7XYQpsj2y8F9PM+Cr3SNEa0gw==}
+ rollup@4.34.8:
+ resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ rollup@4.57.1:
+ resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
+ run-applescript@7.1.0:
+ resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
+ engines: {node: '>=18'}
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ rxjs@7.8.1:
+ resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
+
+ rxjs@7.8.2:
+ resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
+
sade@1.8.1:
resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
engines: {node: '>=6'}
+ safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
@@ -3745,18 +7080,75 @@ packages:
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ sass-loader@16.0.5:
+ resolution: {integrity: sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==}
+ engines: {node: '>= 18.12.0'}
+ peerDependencies:
+ '@rspack/core': 0.x || 1.x
+ node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
+ sass: ^1.3.0
+ sass-embedded: '*'
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ '@rspack/core':
+ optional: true
+ node-sass:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ webpack:
+ optional: true
+
+ sass@1.85.0:
+ resolution: {integrity: sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ sax@1.4.4:
+ resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==}
+ engines: {node: '>=11.0.0'}
+
scheduler@0.27.0:
resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
+ schema-utils@4.3.3:
+ resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==}
+ engines: {node: '>= 10.13.0'}
+
+ select-hose@2.0.0:
+ resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==}
+
+ selfsigned@2.4.1:
+ resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==}
+ engines: {node: '>=10'}
+
+ semver@5.7.2:
+ resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
+ hasBin: true
+
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
+ semver@7.7.1:
+ resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
semver@7.7.4:
resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
engines: {node: '>=10'}
hasBin: true
+ send@0.19.2:
+ resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==}
+ engines: {node: '>= 0.8.0'}
+
+ serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+
seroval-plugins@1.5.0:
resolution: {integrity: sha512-EAHqADIQondwRZIdeW2I636zgsODzoBDwb3PT/+7TLDWyw1Dy/Xv7iGUIEXXav7usHDE9HVhOU61irI3EnyyHA==}
engines: {node: '>=10'}
@@ -3767,6 +7159,14 @@ packages:
resolution: {integrity: sha512-OE4cvmJ1uSPrKorFIH9/w/Qwuvi/IMcGbv5RKgcJ/zjA/IohDLU6SVaxFN9FwajbP7nsX0dQqMDes1whk3y+yw==}
engines: {node: '>=10'}
+ serve-index@1.9.2:
+ resolution: {integrity: sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==}
+ engines: {node: '>= 0.8.0'}
+
+ serve-static@1.16.3:
+ resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==}
+ engines: {node: '>= 0.8.0'}
+
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@@ -3775,6 +7175,13 @@ packages:
resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
engines: {node: '>= 0.4'}
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ shallow-clone@3.0.1:
+ resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
+ engines: {node: '>=8'}
+
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -3783,6 +7190,10 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
+ shell-quote@1.8.3:
+ resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
+ engines: {node: '>= 0.4'}
+
sherif-darwin-arm64@1.10.0:
resolution: {integrity: sha512-fHRg/fgyxHebCH9vuGEhImyGqmwlBq67BVyI8Ugda8GM+W+Ofj1cQnzDX82cYuCHU+KJ7hQFq8iPHkRizXWOrA==}
cpu: [arm64]
@@ -3853,6 +7264,10 @@ packages:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
+ sigstore@3.1.0:
+ resolution: {integrity: sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
simple-code-frame@1.3.0:
resolution: {integrity: sha512-MB4pQmETUBlNs62BBeRjIFGeuy/x6gGKh7+eRUemn1rCFhqo7K+4slPqsyizCbcbYLnaYqaoZ2FWsZ/jN06D8w==}
@@ -3870,10 +7285,48 @@ packages:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
+ slash@5.1.0:
+ resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==}
+ engines: {node: '>=14.16'}
+
+ slice-ansi@5.0.0:
+ resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
+ engines: {node: '>=12'}
+
+ slice-ansi@7.1.2:
+ resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==}
+ engines: {node: '>=18'}
+
+ smart-buffer@4.2.0:
+ resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
+ engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
+
smol-toml@1.6.0:
resolution: {integrity: sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==}
engines: {node: '>= 18'}
+ socket.io-adapter@2.5.6:
+ resolution: {integrity: sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ==}
+
+ socket.io-parser@4.2.5:
+ resolution: {integrity: sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==}
+ engines: {node: '>=10.0.0'}
+
+ socket.io@4.8.3:
+ resolution: {integrity: sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A==}
+ engines: {node: '>=10.2.0'}
+
+ sockjs@0.3.24:
+ resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==}
+
+ socks-proxy-agent@8.0.5:
+ resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
+ engines: {node: '>= 14'}
+
+ socks@2.8.7:
+ resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
+ engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
+
solid-js@1.9.11:
resolution: {integrity: sha512-WEJtcc5mkh/BnHA6Yrg4whlF8g6QwpmXXRg4P2ztPmcKeHHlH4+djYecBLhSpecZY2RRECXYUwIc/C2r3yzQ4Q==}
@@ -3886,16 +7339,52 @@ packages:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
- source-map@0.7.6:
- resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
- engines: {node: '>= 12'}
+ source-map-loader@5.0.0:
+ resolution: {integrity: sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==}
+ engines: {node: '>= 18.12.0'}
+ peerDependencies:
+ webpack: ^5.72.1
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.7.4:
+ resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
+ engines: {node: '>= 8'}
spawndamnit@3.0.1:
resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==}
+ spdx-correct@3.2.0:
+ resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
+
+ spdx-exceptions@2.5.0:
+ resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
+
+ spdx-expression-parse@3.0.1:
+ resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
+
+ spdx-license-ids@3.0.22:
+ resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==}
+
+ spdy-transport@3.0.0:
+ resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==}
+
+ spdy@4.0.2:
+ resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==}
+ engines: {node: '>=6.0.0'}
+
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+ ssri@12.0.0:
+ resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
stable-hash-x@0.2.0:
resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==}
engines: {node: '>=12.0.0'}
@@ -3907,6 +7396,14 @@ packages:
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+ statuses@1.5.0:
+ resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
+ engines: {node: '>= 0.6'}
+
+ statuses@2.0.2:
+ resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
+ engines: {node: '>= 0.8'}
+
std-env@3.10.0:
resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
@@ -3914,6 +7411,10 @@ packages:
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
engines: {node: '>= 0.4'}
+ streamroller@3.1.5:
+ resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==}
+ engines: {node: '>=8.0'}
+
string-ts@2.3.1:
resolution: {integrity: sha512-xSJq+BS52SaFFAVxuStmx6n5aYZU571uYUnUrPXkPFCfdHyZMMlbP2v2Wx5sNBnAVzq/2+0+mcBLBa3Xa5ubYw==}
@@ -3921,6 +7422,17 @@ packages:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
+
+ string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+
string_decoder@1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
@@ -3928,6 +7440,10 @@ packages:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
+ strip-ansi@7.1.2:
+ resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
+ engines: {node: '>=12'}
+
strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
@@ -3948,10 +7464,22 @@ packages:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
- svelte@5.53.1:
- resolution: {integrity: sha512-WzxFHZhhD23Qzu7JCYdvm1rxvRSzdt9HtHO8TScMBX51bLRFTcJmATVqjqXG+6Ln6hrViGCo9DzwOhAasxwC/w==}
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ svelte@5.50.3:
+ resolution: {integrity: sha512-5JCO8P/cFlwyfi1LeZ9uppMZvuaHWygyZmqxyKOIqbV3PoHKaddvV1C6njL/InpDXplNYZnAVEbn8mLslycBxQ==}
engines: {node: '>=18'}
+ symbol-observable@4.0.0:
+ resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==}
+ engines: {node: '>=0.10'}
+
tapable@2.3.0:
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
engines: {node: '>=6'}
@@ -3960,10 +7488,49 @@ packages:
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
engines: {node: '>=6'}
+ tar@6.2.1:
+ resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
+ engines: {node: '>=10'}
+ deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
+
+ tar@7.5.9:
+ resolution: {integrity: sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==}
+ engines: {node: '>=18'}
+
term-size@2.2.1:
resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
engines: {node: '>=8'}
+ terser-webpack-plugin@5.3.16:
+ resolution: {integrity: sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ '@swc/core': '*'
+ esbuild: '*'
+ uglify-js: '*'
+ webpack: ^5.1.0
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ esbuild:
+ optional: true
+ uglify-js:
+ optional: true
+
+ terser@5.39.0:
+ resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ thingies@2.5.0:
+ resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==}
+ engines: {node: '>=10.18'}
+ peerDependencies:
+ tslib: ^2
+
+ thunky@1.1.0:
+ resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==}
+
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
@@ -3987,9 +7554,19 @@ packages:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+ tree-dump@1.1.0:
+ resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
tree-kill@1.2.2:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
hasBin: true
@@ -4040,10 +7617,21 @@ packages:
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+ tuf-js@3.1.0:
+ resolution: {integrity: sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
+ type-is@1.6.18:
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
+
+ typed-assert@1.0.9:
+ resolution: {integrity: sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==}
+
typedoc-plugin-frontmatter@1.3.0:
resolution: {integrity: sha512-xYQFMAecMlsRUjmf9oM/Sq2FVz4zlgcbIeVFNLdO118CHTN06gIKJNSlyExh9+Xl8sK0YhIvoQwViUURxritWA==}
peerDependencies:
@@ -4062,34 +7650,75 @@ packages:
peerDependencies:
typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x
- typescript-eslint@8.56.0:
- resolution: {integrity: sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg==}
+ typescript-eslint@8.55.0:
+ resolution: {integrity: sha512-HE4wj+r5lmDVS9gdaN0/+iqNvPZwGfnJ5lZuz7s5vLlg9ODw0bIiiETaios9LvFI1U94/VBXGm3CB2Y5cNFMpw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
+ typescript@5.7.3:
+ resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
typescript@5.9.3:
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=14.17'}
hasBin: true
+ ua-parser-js@0.7.41:
+ resolution: {integrity: sha512-O3oYyCMPYgNNHuO7Jjk3uacJWZF8loBgwrfd/5LE/HyZ3lUIOdniQ7DNXJcIgZbwioZxk0fLfI4EVnetdiX5jg==}
+ hasBin: true
+
uc.micro@2.1.0:
resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
- unconfig-core@7.5.0:
- resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==}
+ unconfig-core@7.4.2:
+ resolution: {integrity: sha512-VgPCvLWugINbXvMQDf8Jh0mlbvNjNC6eSUziHsBCMpxR05OPrNrvDnyatdMjRgcHaaNsCqz+wjNXxNw1kRLHUg==}
undici-types@7.18.2:
resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
- undici@7.22.0:
- resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==}
+ undici@7.21.0:
+ resolution: {integrity: sha512-Hn2tCQpoDt1wv23a68Ctc8Cr/BHpUSfaPYrkajTXOS9IKpxVRx/X5m1K2YkbK2ipgZgxXSgsUinl3x+2YdSSfg==}
engines: {node: '>=20.18.1'}
- universalify@0.1.2:
- resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
- engines: {node: '>= 4.0.0'}
+ unicode-canonical-property-names-ecmascript@2.0.1:
+ resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
+ engines: {node: '>=4'}
+
+ unicode-match-property-ecmascript@2.0.0:
+ resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+ engines: {node: '>=4'}
+
+ unicode-match-property-value-ecmascript@2.2.1:
+ resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==}
+ engines: {node: '>=4'}
+
+ unicode-property-aliases-ecmascript@2.2.0:
+ resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==}
+ engines: {node: '>=4'}
+
+ unicorn-magic@0.3.0:
+ resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
+ engines: {node: '>=18'}
+
+ unique-filename@4.0.0:
+ resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ unique-slug@5.0.0:
+ resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ universalify@0.1.2:
+ resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
+ engines: {node: '>= 4.0.0'}
+
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
unrs-resolver@1.11.1:
resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
@@ -4121,6 +7750,25 @@ packages:
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ utils-merge@1.0.1:
+ resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ engines: {node: '>= 0.4.0'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ validate-npm-package-license@3.0.4:
+ resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+
+ validate-npm-package-name@6.0.2:
+ resolution: {integrity: sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
vite-plugin-solid@2.11.10:
resolution: {integrity: sha512-Yr1dQybmtDtDAHkii6hXuc1oVH9CPcS/Zb2jN/P36qqcrkNnVPsMTzQ06jyzFPFjj3U1IYKMVt/9ZqcwGCEbjw==}
peerDependencies:
@@ -4136,6 +7784,46 @@ packages:
peerDependencies:
vite: 5.x || 6.x || 7.x
+ vite@6.4.1:
+ resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ jiti: '>=1.21.0'
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
vite@7.3.1:
resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -4218,6 +7906,10 @@ packages:
jsdom:
optional: true
+ void-elements@2.0.1:
+ resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==}
+ engines: {node: '>=0.10.0'}
+
vue-eslint-parser@10.4.0:
resolution: {integrity: sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -4228,12 +7920,84 @@ packages:
resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==}
engines: {node: 20 || >=22}
+ watchpack@2.4.2:
+ resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==}
+ engines: {node: '>=10.13.0'}
+
+ watchpack@2.5.1:
+ resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==}
+ engines: {node: '>=10.13.0'}
+
+ wbuf@1.7.3:
+ resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==}
+
wcwidth@1.0.1:
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+ weak-lru-cache@1.2.2:
+ resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==}
+
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ webpack-dev-middleware@7.4.2:
+ resolution: {integrity: sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==}
+ engines: {node: '>= 18.12.0'}
+ peerDependencies:
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ webpack:
+ optional: true
+
+ webpack-dev-server@5.2.2:
+ resolution: {integrity: sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==}
+ engines: {node: '>= 18.12.0'}
+ hasBin: true
+ peerDependencies:
+ webpack: ^5.0.0
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack:
+ optional: true
+ webpack-cli:
+ optional: true
+
+ webpack-merge@6.0.1:
+ resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==}
+ engines: {node: '>=18.0.0'}
+
+ webpack-sources@3.3.4:
+ resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==}
+ engines: {node: '>=10.13.0'}
+
+ webpack-subresource-integrity@5.1.0:
+ resolution: {integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==}
+ engines: {node: '>= 12'}
+ peerDependencies:
+ html-webpack-plugin: '>= 5.0.0-beta.1 < 6'
+ webpack: ^5.12.0
+ peerDependenciesMeta:
+ html-webpack-plugin:
+ optional: true
+
+ webpack@5.105.0:
+ resolution: {integrity: sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ peerDependencies:
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack-cli:
+ optional: true
+
+ websocket-driver@0.7.4:
+ resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==}
+ engines: {node: '>=0.8.0'}
+
+ websocket-extensions@0.1.4:
+ resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==}
+ engines: {node: '>=0.8.0'}
+
whatwg-encoding@3.1.1:
resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
engines: {node: '>=18'}
@@ -4262,27 +8026,63 @@ packages:
resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==}
engines: {node: '>= 0.4'}
+ which@1.3.1:
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
+ hasBin: true
+
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
hasBin: true
+ which@5.0.0:
+ resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+ hasBin: true
+
why-is-node-running@2.3.0:
resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
engines: {node: '>=8'}
hasBin: true
+ wildcard@2.0.1:
+ resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==}
+
word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
+ wrap-ansi@6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
+
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ wrap-ansi@9.0.2:
+ resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
+ engines: {node: '>=18'}
+
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ ws@8.18.3:
+ resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
ws@8.19.0:
resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==}
engines: {node: '>=10.0.0'}
@@ -4302,15 +8102,30 @@ packages:
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
+ yallist@5.0.0:
+ resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
+ engines: {node: '>=18'}
+
yaml@2.8.2:
resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
engines: {node: '>= 14.6'}
hasBin: true
+ yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+
yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
yargs@17.7.2:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
@@ -4319,6 +8134,14 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
+ yocto-queue@1.2.2:
+ resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==}
+ engines: {node: '>=12.20'}
+
+ yoctocolors-cjs@2.1.3:
+ resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==}
+ engines: {node: '>=18'}
+
zimmerframe@1.1.4:
resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==}
@@ -4340,165 +8163,878 @@ packages:
zod@4.3.6:
resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==}
+ zone.js@0.15.1:
+ resolution: {integrity: sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==}
+
snapshots:
- '@adobe/css-tools@4.4.4': {}
+ '@adobe/css-tools@4.4.4': {}
+
+ '@ampproject/remapping@2.3.0':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@angular-devkit/architect@0.1902.20(chokidar@4.0.3)':
+ dependencies:
+ '@angular-devkit/core': 19.2.20(chokidar@4.0.3)
+ rxjs: 7.8.1
+ transitivePeerDependencies:
+ - chokidar
+
+ '@angular-devkit/build-angular@19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.7.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@angular-devkit/architect': 0.1902.20(chokidar@4.0.3)
+ '@angular-devkit/build-webpack': 0.1902.20(chokidar@4.0.3)(webpack-dev-server@5.2.2(tslib@2.8.1)(webpack@5.105.0))(webpack@5.105.0(esbuild@0.25.4))
+ '@angular-devkit/core': 19.2.20(chokidar@4.0.3)
+ '@angular/build': 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(typescript@5.7.3)(yaml@2.8.2)
+ '@angular/compiler-cli': 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
+ '@babel/core': 7.26.10
+ '@babel/generator': 7.26.10
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-split-export-declaration': 7.24.7
+ '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10)
+ '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-runtime': 7.26.10(@babel/core@7.26.10)
+ '@babel/preset-env': 7.26.9(@babel/core@7.26.10)
+ '@babel/runtime': 7.26.10
+ '@discoveryjs/json-ext': 0.6.3
+ '@ngtools/webpack': 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(typescript@5.7.3)(webpack@5.105.0(esbuild@0.25.4))
+ '@vitejs/plugin-basic-ssl': 1.2.0(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
+ ansi-colors: 4.1.3
+ autoprefixer: 10.4.20(postcss@8.5.2)
+ babel-loader: 9.2.1(@babel/core@7.26.10)(webpack@5.105.0(esbuild@0.25.4))
+ browserslist: 4.28.1
+ copy-webpack-plugin: 12.0.2(webpack@5.105.0(esbuild@0.25.4))
+ css-loader: 7.1.2(webpack@5.105.0(esbuild@0.25.4))
+ esbuild-wasm: 0.25.4
+ fast-glob: 3.3.3
+ http-proxy-middleware: 3.0.5
+ istanbul-lib-instrument: 6.0.3
+ jsonc-parser: 3.3.1
+ karma-source-map-support: 1.4.0
+ less: 4.2.2
+ less-loader: 12.2.0(less@4.2.2)(webpack@5.105.0(esbuild@0.25.4))
+ license-webpack-plugin: 4.0.2(webpack@5.105.0(esbuild@0.25.4))
+ loader-utils: 3.3.1
+ mini-css-extract-plugin: 2.9.2(webpack@5.105.0(esbuild@0.25.4))
+ open: 10.1.0
+ ora: 5.4.1
+ picomatch: 4.0.2
+ piscina: 4.8.0
+ postcss: 8.5.2
+ postcss-loader: 8.1.1(postcss@8.5.2)(typescript@5.7.3)(webpack@5.105.0(esbuild@0.25.4))
+ resolve-url-loader: 5.0.0
+ rxjs: 7.8.1
+ sass: 1.85.0
+ sass-loader: 16.0.5(sass@1.85.0)(webpack@5.105.0(esbuild@0.25.4))
+ semver: 7.7.1
+ source-map-loader: 5.0.0(webpack@5.105.0(esbuild@0.25.4))
+ source-map-support: 0.5.21
+ terser: 5.39.0
+ tree-kill: 1.2.2
+ tslib: 2.8.1
+ typescript: 5.7.3
+ webpack: 5.105.0(esbuild@0.25.4)
+ webpack-dev-middleware: 7.4.2(tslib@2.8.1)(webpack@5.105.0)
+ webpack-dev-server: 5.2.2(tslib@2.8.1)(webpack@5.105.0)
+ webpack-merge: 6.0.1
+ webpack-subresource-integrity: 5.1.0(webpack@5.105.0(esbuild@0.25.4))
+ optionalDependencies:
+ esbuild: 0.25.4
+ karma: 6.4.4
+ transitivePeerDependencies:
+ - '@angular/compiler'
+ - '@rspack/core'
+ - '@swc/core'
+ - '@types/node'
+ - bufferutil
+ - chokidar
+ - debug
+ - html-webpack-plugin
+ - jiti
+ - lightningcss
+ - node-sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - tsx
+ - uglify-js
+ - utf-8-validate
+ - vite
+ - webpack-cli
+ - yaml
+
+ '@angular-devkit/build-webpack@0.1902.20(chokidar@4.0.3)(webpack-dev-server@5.2.2(tslib@2.8.1)(webpack@5.105.0))(webpack@5.105.0(esbuild@0.25.4))':
+ dependencies:
+ '@angular-devkit/architect': 0.1902.20(chokidar@4.0.3)
+ rxjs: 7.8.1
+ webpack: 5.105.0(esbuild@0.25.4)
+ webpack-dev-server: 5.2.2(tslib@2.8.1)(webpack@5.105.0)
+ transitivePeerDependencies:
+ - chokidar
+
+ '@angular-devkit/core@19.2.20(chokidar@4.0.3)':
+ dependencies:
+ ajv: 8.17.1
+ ajv-formats: 3.0.1(ajv@8.17.1)
+ jsonc-parser: 3.3.1
+ picomatch: 4.0.2
+ rxjs: 7.8.1
+ source-map: 0.7.4
+ optionalDependencies:
+ chokidar: 4.0.3
+
+ '@angular-devkit/schematics@19.2.20(chokidar@4.0.3)':
+ dependencies:
+ '@angular-devkit/core': 19.2.20(chokidar@4.0.3)
+ jsonc-parser: 3.3.1
+ magic-string: 0.30.17
+ ora: 5.4.1
+ rxjs: 7.8.1
+ transitivePeerDependencies:
+ - chokidar
+
+ '@angular/build@19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(typescript@5.7.3)(yaml@2.8.2)':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@angular-devkit/architect': 0.1902.20(chokidar@4.0.3)
+ '@angular/compiler': 19.2.18
+ '@angular/compiler-cli': 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
+ '@babel/core': 7.26.10
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-split-export-declaration': 7.24.7
+ '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10)
+ '@inquirer/confirm': 5.1.6(@types/node@25.3.0)
+ '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
+ beasties: 0.3.2
+ browserslist: 4.28.1
+ esbuild: 0.25.4
+ fast-glob: 3.3.3
+ https-proxy-agent: 7.0.6
+ istanbul-lib-instrument: 6.0.3
+ listr2: 8.2.5
+ magic-string: 0.30.17
+ mrmime: 2.0.1
+ parse5-html-rewriting-stream: 7.0.0
+ picomatch: 4.0.2
+ piscina: 4.8.0
+ rollup: 4.34.8
+ sass: 1.85.0
+ semver: 7.7.1
+ source-map-support: 0.5.21
+ typescript: 5.7.3
+ vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
+ watchpack: 2.4.2
+ optionalDependencies:
+ karma: 6.4.4
+ less: 4.2.2
+ lmdb: 3.2.6
+ postcss: 8.5.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - chokidar
+ - jiti
+ - lightningcss
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
+
+ '@angular/cli@19.2.20(@types/node@25.3.0)(chokidar@4.0.3)':
+ dependencies:
+ '@angular-devkit/architect': 0.1902.20(chokidar@4.0.3)
+ '@angular-devkit/core': 19.2.20(chokidar@4.0.3)
+ '@angular-devkit/schematics': 19.2.20(chokidar@4.0.3)
+ '@inquirer/prompts': 7.3.2(@types/node@25.3.0)
+ '@listr2/prompt-adapter-inquirer': 2.0.18(@inquirer/prompts@7.3.2(@types/node@25.3.0))
+ '@schematics/angular': 19.2.20(chokidar@4.0.3)
+ '@yarnpkg/lockfile': 1.1.0
+ ini: 5.0.0
+ jsonc-parser: 3.3.1
+ listr2: 8.2.5
+ npm-package-arg: 12.0.2
+ npm-pick-manifest: 10.0.0
+ pacote: 20.0.0
+ resolve: 1.22.10
+ semver: 7.7.1
+ symbol-observable: 4.0.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - chokidar
+ - supports-color
+
+ '@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)':
+ dependencies:
+ '@angular/core': 19.2.18(rxjs@7.8.2)(zone.js@0.15.1)
+ rxjs: 7.8.2
+ tslib: 2.8.1
+
+ '@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)':
+ dependencies:
+ '@angular/compiler': 19.2.18
+ '@babel/core': 7.26.9
+ '@jridgewell/sourcemap-codec': 1.5.5
+ chokidar: 4.0.3
+ convert-source-map: 1.9.0
+ reflect-metadata: 0.2.2
+ semver: 7.7.4
+ tslib: 2.8.1
+ typescript: 5.7.3
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@angular/compiler@19.2.18':
+ dependencies:
+ tslib: 2.8.1
+
+ '@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)':
+ dependencies:
+ rxjs: 7.8.2
+ tslib: 2.8.1
+ zone.js: 0.15.1
+
+ '@angular/forms@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)':
+ dependencies:
+ '@angular/common': 19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
+ '@angular/core': 19.2.18(rxjs@7.8.2)(zone.js@0.15.1)
+ '@angular/platform-browser': 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))
+ rxjs: 7.8.2
+ tslib: 2.8.1
+
+ '@angular/platform-browser-dynamic@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.18)(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))':
+ dependencies:
+ '@angular/common': 19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
+ '@angular/compiler': 19.2.18
+ '@angular/core': 19.2.18(rxjs@7.8.2)(zone.js@0.15.1)
+ '@angular/platform-browser': 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))
+ tslib: 2.8.1
+
+ '@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))':
+ dependencies:
+ '@angular/common': 19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
+ '@angular/core': 19.2.18(rxjs@7.8.2)(zone.js@0.15.1)
+ tslib: 2.8.1
+
+ '@angular/router@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)':
+ dependencies:
+ '@angular/common': 19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
+ '@angular/core': 19.2.18(rxjs@7.8.2)(zone.js@0.15.1)
+ '@angular/platform-browser': 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))
+ rxjs: 7.8.2
+ tslib: 2.8.1
+
+ '@babel/code-frame@7.29.0':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.29.0': {}
+
+ '@babel/core@7.26.10':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.26.10)
+ '@babel/helpers': 7.28.6
+ '@babel/parser': 7.29.0
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/core@7.26.9':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.26.9)
+ '@babel/helpers': 7.28.6
+ '@babel/parser': 7.29.0
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/core@7.29.0':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
+ '@babel/helpers': 7.28.6
+ '@babel/parser': 7.29.0
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.26.10':
+ dependencies:
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/generator@7.29.1':
+ dependencies:
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/generator@8.0.0-rc.1':
+ dependencies:
+ '@babel/parser': 8.0.0-rc.1
+ '@babel/types': 8.0.0-rc.1
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ '@types/jsesc': 2.5.1
+ jsesc: 3.1.0
+
+ '@babel/helper-annotate-as-pure@7.25.9':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@babel/helper-annotate-as-pure@7.27.3':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@babel/helper-compilation-targets@7.28.6':
+ dependencies:
+ '@babel/compat-data': 7.29.0
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.28.1
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-member-expression-to-functions': 7.28.5
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/helper-replace-supers': 7.28.6(@babel/core@7.26.10)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/traverse': 7.29.0
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-member-expression-to-functions': 7.28.5
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/traverse': 7.29.0
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-annotate-as-pure': 7.27.3
+ regexpu-core: 6.4.0
+ semver: 6.3.1
+
+ '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ debug: 4.4.3
+ lodash.debounce: 4.0.8
+ resolve: 1.22.11
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-member-expression-to-functions@7.28.5':
+ dependencies:
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-imports@7.18.6':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@babel/helper-module-imports@7.28.6':
+ dependencies:
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.26.9)':
+ dependencies:
+ '@babel/core': 7.26.9
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-optimise-call-expression@7.27.1':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@babel/helper-plugin-utils@7.28.6': {}
+
+ '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-wrap-function': 7.28.6
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-replace-supers@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-member-expression-to-functions': 7.28.5
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-member-expression-to-functions': 7.28.5
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-split-export-declaration@7.24.7':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-string-parser@8.0.0-rc.1': {}
+
+ '@babel/helper-validator-identifier@7.28.5': {}
+
+ '@babel/helper-validator-identifier@8.0.0-rc.1': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helper-wrap-function@7.28.6':
+ dependencies:
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helpers@7.28.6':
+ dependencies:
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
+
+ '@babel/parser@7.29.0':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@babel/parser@8.0.0-rc.1':
+ dependencies:
+ '@babel/types': 8.0.0-rc.1
+
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.26.10)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+
+ '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/code-frame@7.29.0':
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10)':
dependencies:
- '@babel/helper-validator-identifier': 7.28.5
- js-tokens: 4.0.0
- picocolors: 1.1.1
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/compat-data@7.29.0': {}
+ '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/core@7.29.0':
+ '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.10)':
dependencies:
- '@babel/code-frame': 7.29.0
- '@babel/generator': 7.29.1
- '@babel/helper-compilation-targets': 7.28.6
- '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
- '@babel/helpers': 7.28.6
- '@babel/parser': 7.29.0
- '@babel/template': 7.28.6
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.10)
'@babel/traverse': 7.29.0
- '@babel/types': 7.29.0
- '@jridgewell/remapping': 2.3.5
- convert-source-map: 2.0.0
- debug: 4.4.3
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/generator@7.29.1':
+ '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.10)':
dependencies:
- '@babel/parser': 7.29.0
- '@babel/types': 7.29.0
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
- jsesc: 3.1.0
+ '@babel/core': 7.26.10
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.10)
+ transitivePeerDependencies:
+ - supports-color
- '@babel/generator@8.0.0-rc.1':
+ '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.26.10)':
dependencies:
- '@babel/parser': 8.0.0-rc.1
- '@babel/types': 8.0.0-rc.1
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
- '@types/jsesc': 2.5.1
- jsesc: 3.1.0
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/helper-annotate-as-pure@7.27.3':
+ '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.26.10)':
dependencies:
- '@babel/types': 7.29.0
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/helper-compilation-targets@7.28.6':
+ '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.26.10)':
dependencies:
- '@babel/compat-data': 7.29.0
- '@babel/helper-validator-option': 7.27.1
- browserslist: 4.28.1
- lru-cache: 5.1.1
- semver: 6.3.1
+ '@babel/core': 7.26.10
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
- '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)':
+ '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.26.10)':
dependencies:
- '@babel/core': 7.29.0
+ '@babel/core': 7.26.10
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-classes@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
'@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-member-expression-to-functions': 7.28.5
- '@babel/helper-optimise-call-expression': 7.27.1
- '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0)
- '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-globals': 7.28.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-replace-supers': 7.28.6(@babel/core@7.26.10)
'@babel/traverse': 7.29.0
- semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/helper-globals@7.28.0': {}
+ '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/template': 7.28.6
- '@babel/helper-member-expression-to-functions@7.28.5':
+ '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.26.10)':
dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
'@babel/traverse': 7.29.0
- '@babel/types': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-imports@7.18.6':
+ '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.26.10)':
dependencies:
- '@babel/types': 7.29.0
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/helper-module-imports@7.28.6':
+ '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.26.10)':
dependencies:
- '@babel/traverse': 7.29.0
- '@babel/types': 7.29.0
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)':
+ '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.26.10)':
dependencies:
- '@babel/core': 7.29.0
- '@babel/helper-module-imports': 7.28.6
- '@babel/helper-validator-identifier': 7.28.5
+ '@babel/core': 7.26.10
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
'@babel/traverse': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/helper-optimise-call-expression@7.27.1':
+ '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.26.10)':
dependencies:
- '@babel/types': 7.29.0
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/helper-plugin-utils@7.28.6': {}
+ '@babel/plugin-transform-literals@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)':
+ '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.26.10)':
dependencies:
- '@babel/core': 7.29.0
- '@babel/helper-member-expression-to-functions': 7.28.5
- '@babel/helper-optimise-call-expression': 7.27.1
- '@babel/traverse': 7.29.0
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
transitivePeerDependencies:
- supports-color
- '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+ '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.26.10)':
dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
'@babel/traverse': 7.29.0
- '@babel/types': 7.29.0
transitivePeerDependencies:
- supports-color
- '@babel/helper-string-parser@7.27.1': {}
+ '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
- '@babel/helper-string-parser@8.0.0-rc.2': {}
+ '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/helper-validator-identifier@7.28.5': {}
+ '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/helper-validator-identifier@8.0.0-rc.1': {}
+ '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/helper-validator-option@7.27.1': {}
+ '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/helpers@7.28.6':
+ '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.26.10)':
dependencies:
- '@babel/template': 7.28.6
- '@babel/types': 7.29.0
+ '@babel/core': 7.26.10
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.26.10)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.26.10)
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
- '@babel/parser@7.29.0':
+ '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.26.10)':
dependencies:
- '@babel/types': 7.29.0
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-replace-supers': 7.28.6(@babel/core@7.26.10)
+ transitivePeerDependencies:
+ - supports-color
- '@babel/parser@8.0.0-rc.1':
+ '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.26.10)':
dependencies:
- '@babel/types': 8.0.0-rc.1
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.29.0)':
+ '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.26.10)':
dependencies:
- '@babel/core': 7.29.0
- '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
+ '@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)':
+ '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.26.10)':
dependencies:
- '@babel/core': 7.29.0
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.28.6
'@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.0)':
@@ -4529,6 +9065,171 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-runtime@7.26.10(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.26.10)
+ babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10)
+ babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.26.10)
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-spread@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/preset-env@7.26.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/compat-data': 7.29.0
+ '@babel/core': 7.26.10
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-validator-option': 7.27.1
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.26.10)
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)
+ '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10)
+ '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.26.10)
+ '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.26.10)
+ '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.26.10)
+ '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.26.10)
+ '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.26.10)
+ '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.26.10)
+ '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.26.10)
+ '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.26.10)
+ '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.10)
+ babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.26.10)
+ babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10)
+ babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.26.10)
+ core-js-compat: 3.48.0
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/types': 7.29.0
+ esutils: 2.0.3
+
+ '@babel/runtime@7.26.10':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
'@babel/runtime@7.28.6': {}
'@babel/template@7.28.6':
@@ -4556,7 +9257,7 @@ snapshots:
'@babel/types@8.0.0-rc.1':
dependencies:
- '@babel/helper-string-parser': 8.0.0-rc.2
+ '@babel/helper-string-parser': 8.0.0-rc.1
'@babel/helper-validator-identifier': 8.0.0-rc.1
'@changesets/apply-release-plan@7.0.14':
@@ -4642,10 +9343,10 @@ snapshots:
picocolors: 1.1.1
semver: 7.7.4
- '@changesets/get-github-info@0.6.0':
+ '@changesets/get-github-info@0.6.0(encoding@0.1.13)':
dependencies:
dataloader: 1.4.0
- node-fetch: 2.7.0
+ node-fetch: 2.7.0(encoding@0.1.13)
transitivePeerDependencies:
- encoding
@@ -4710,6 +9411,10 @@ snapshots:
human-id: 4.1.3
prettier: 2.8.8
+ '@colors/colors@1.5.0': {}
+
+ '@discoveryjs/json-ext@0.6.3': {}
+
'@emnapi/core@1.8.1':
dependencies:
'@emnapi/wasi-threads': 1.1.0
@@ -4723,113 +9428,188 @@ snapshots:
dependencies:
tslib: 2.8.1
+ '@esbuild/aix-ppc64@0.25.4':
+ optional: true
+
'@esbuild/aix-ppc64@0.27.3':
optional: true
+ '@esbuild/android-arm64@0.25.4':
+ optional: true
+
'@esbuild/android-arm64@0.27.3':
optional: true
+ '@esbuild/android-arm@0.25.4':
+ optional: true
+
'@esbuild/android-arm@0.27.3':
optional: true
+ '@esbuild/android-x64@0.25.4':
+ optional: true
+
'@esbuild/android-x64@0.27.3':
optional: true
+ '@esbuild/darwin-arm64@0.25.4':
+ optional: true
+
'@esbuild/darwin-arm64@0.27.3':
optional: true
+ '@esbuild/darwin-x64@0.25.4':
+ optional: true
+
'@esbuild/darwin-x64@0.27.3':
optional: true
+ '@esbuild/freebsd-arm64@0.25.4':
+ optional: true
+
'@esbuild/freebsd-arm64@0.27.3':
optional: true
+ '@esbuild/freebsd-x64@0.25.4':
+ optional: true
+
'@esbuild/freebsd-x64@0.27.3':
optional: true
+ '@esbuild/linux-arm64@0.25.4':
+ optional: true
+
'@esbuild/linux-arm64@0.27.3':
optional: true
+ '@esbuild/linux-arm@0.25.4':
+ optional: true
+
'@esbuild/linux-arm@0.27.3':
optional: true
+ '@esbuild/linux-ia32@0.25.4':
+ optional: true
+
'@esbuild/linux-ia32@0.27.3':
optional: true
+ '@esbuild/linux-loong64@0.25.4':
+ optional: true
+
'@esbuild/linux-loong64@0.27.3':
optional: true
+ '@esbuild/linux-mips64el@0.25.4':
+ optional: true
+
'@esbuild/linux-mips64el@0.27.3':
optional: true
+ '@esbuild/linux-ppc64@0.25.4':
+ optional: true
+
'@esbuild/linux-ppc64@0.27.3':
optional: true
+ '@esbuild/linux-riscv64@0.25.4':
+ optional: true
+
'@esbuild/linux-riscv64@0.27.3':
optional: true
+ '@esbuild/linux-s390x@0.25.4':
+ optional: true
+
'@esbuild/linux-s390x@0.27.3':
optional: true
+ '@esbuild/linux-x64@0.25.4':
+ optional: true
+
'@esbuild/linux-x64@0.27.3':
optional: true
+ '@esbuild/netbsd-arm64@0.25.4':
+ optional: true
+
'@esbuild/netbsd-arm64@0.27.3':
optional: true
+ '@esbuild/netbsd-x64@0.25.4':
+ optional: true
+
'@esbuild/netbsd-x64@0.27.3':
optional: true
+ '@esbuild/openbsd-arm64@0.25.4':
+ optional: true
+
'@esbuild/openbsd-arm64@0.27.3':
optional: true
+ '@esbuild/openbsd-x64@0.25.4':
+ optional: true
+
'@esbuild/openbsd-x64@0.27.3':
optional: true
'@esbuild/openharmony-arm64@0.27.3':
optional: true
+ '@esbuild/sunos-x64@0.25.4':
+ optional: true
+
'@esbuild/sunos-x64@0.27.3':
optional: true
+ '@esbuild/win32-arm64@0.25.4':
+ optional: true
+
'@esbuild/win32-arm64@0.27.3':
optional: true
+ '@esbuild/win32-ia32@0.25.4':
+ optional: true
+
'@esbuild/win32-ia32@0.27.3':
optional: true
+ '@esbuild/win32-x64@0.25.4':
+ optional: true
+
'@esbuild/win32-x64@0.27.3':
optional: true
- '@eslint-community/eslint-utils@4.9.1(eslint@9.39.3(jiti@2.6.1))':
+ '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))':
dependencies:
- eslint: 9.39.3(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
- '@eslint-react/ast@2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)':
+ '@eslint-react/ast@2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-react/eff': 2.13.0
- '@typescript-eslint/types': 8.56.0
- '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.39.3(jiti@2.6.1)
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.2(jiti@2.6.1)
string-ts: 2.3.1
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@eslint-react/core@2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)':
+ '@eslint-react/core@2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@eslint-react/ast': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/ast': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
'@eslint-react/eff': 2.13.0
- '@eslint-react/shared': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@eslint-react/var': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.56.0
- '@typescript-eslint/types': 8.56.0
- '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.39.3(jiti@2.6.1)
+ '@eslint-react/shared': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/var': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.55.0
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.2(jiti@2.6.1)
ts-pattern: 5.9.0
typescript: 5.9.3
transitivePeerDependencies:
@@ -4837,46 +9617,46 @@ snapshots:
'@eslint-react/eff@2.13.0': {}
- '@eslint-react/eslint-plugin@2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)':
+ '@eslint-react/eslint-plugin@2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-react/eff': 2.13.0
- '@eslint-react/shared': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.56.0
- '@typescript-eslint/type-utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/types': 8.56.0
- '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.39.3(jiti@2.6.1)
- eslint-plugin-react-dom: 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- eslint-plugin-react-hooks-extra: 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- eslint-plugin-react-naming-convention: 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- eslint-plugin-react-rsc: 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- eslint-plugin-react-web-api: 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- eslint-plugin-react-x: 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/shared': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.55.0
+ '@typescript-eslint/type-utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.2(jiti@2.6.1)
+ eslint-plugin-react-dom: 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint-plugin-react-hooks-extra: 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint-plugin-react-naming-convention: 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint-plugin-react-rsc: 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint-plugin-react-web-api: 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint-plugin-react-x: 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
ts-api-utils: 2.4.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@eslint-react/shared@2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)':
+ '@eslint-react/shared@2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-react/eff': 2.13.0
- '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.39.3(jiti@2.6.1)
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.2(jiti@2.6.1)
ts-pattern: 5.9.0
typescript: 5.9.3
zod: 4.3.6
transitivePeerDependencies:
- supports-color
- '@eslint-react/var@2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)':
+ '@eslint-react/var@2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@eslint-react/ast': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/ast': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
'@eslint-react/eff': 2.13.0
- '@eslint-react/shared': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.56.0
- '@typescript-eslint/types': 8.56.0
- '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.39.3(jiti@2.6.1)
+ '@eslint-react/shared': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.55.0
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.2(jiti@2.6.1)
ts-pattern: 5.9.0
typescript: 5.9.3
transitivePeerDependencies:
@@ -4900,7 +9680,7 @@ snapshots:
'@eslint/eslintrc@3.3.3':
dependencies:
- ajv: 6.14.0
+ ajv: 6.12.6
debug: 4.4.3
espree: 10.4.0
globals: 14.0.0
@@ -4912,11 +9692,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/js@10.0.1(eslint@9.39.3(jiti@2.6.1))':
+ '@eslint/js@10.0.1(eslint@9.39.2(jiti@2.6.1))':
optionalDependencies:
- eslint: 9.39.3(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
- '@eslint/js@9.39.3': {}
+ '@eslint/js@9.39.2': {}
'@eslint/object-schema@2.1.7': {}
@@ -4946,6 +9726,61 @@ snapshots:
'@humanwhocodes/retry@0.4.3': {}
+ '@inquirer/ansi@1.0.2': {}
+
+ '@inquirer/checkbox@4.3.2(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/confirm@5.1.21(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/confirm@5.1.6(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/core@10.3.2(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ cli-width: 4.1.0
+ mute-stream: 2.0.0
+ signal-exit: 4.1.0
+ wrap-ansi: 6.2.0
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/editor@4.2.23(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/external-editor': 1.0.3(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/expand@4.0.23(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 25.3.0
+
'@inquirer/external-editor@1.0.3(@types/node@25.3.0)':
dependencies:
chardet: 2.1.1
@@ -4953,12 +9788,103 @@ snapshots:
optionalDependencies:
'@types/node': 25.3.0
+ '@inquirer/figures@1.0.15': {}
+
+ '@inquirer/input@4.3.1(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/number@3.0.23(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/password@4.0.23(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/prompts@7.3.2(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/checkbox': 4.3.2(@types/node@25.3.0)
+ '@inquirer/confirm': 5.1.21(@types/node@25.3.0)
+ '@inquirer/editor': 4.2.23(@types/node@25.3.0)
+ '@inquirer/expand': 4.0.23(@types/node@25.3.0)
+ '@inquirer/input': 4.3.1(@types/node@25.3.0)
+ '@inquirer/number': 3.0.23(@types/node@25.3.0)
+ '@inquirer/password': 4.0.23(@types/node@25.3.0)
+ '@inquirer/rawlist': 4.1.11(@types/node@25.3.0)
+ '@inquirer/search': 3.2.2(@types/node@25.3.0)
+ '@inquirer/select': 4.4.2(@types/node@25.3.0)
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/rawlist@4.1.11(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/search@3.2.2(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/select@4.4.2(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/type@1.5.5':
+ dependencies:
+ mute-stream: 1.0.0
+
+ '@inquirer/type@3.0.10(@types/node@25.3.0)':
+ optionalDependencies:
+ '@types/node': 25.3.0
+
'@isaacs/balanced-match@4.0.1': {}
'@isaacs/brace-expansion@5.0.1':
dependencies:
'@isaacs/balanced-match': 4.0.1
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.2
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@isaacs/cliui@9.0.0': {}
+
+ '@isaacs/fs-minipass@4.0.1':
+ dependencies:
+ minipass: 7.1.3
+
+ '@istanbuljs/schema@0.1.3': {}
+
'@jest/diff-sequences@30.0.1': {}
'@jest/get-type@30.1.0': {}
@@ -4972,35 +9898,282 @@ snapshots:
'@jridgewell/sourcemap-codec': 1.5.5
'@jridgewell/trace-mapping': 0.3.31
- '@jridgewell/remapping@2.3.5':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/source-map@0.3.11':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)':
+ dependencies:
+ tslib: 2.8.1
+
+ '@jsonjoy.com/base64@17.67.0(tslib@2.8.1)':
+ dependencies:
+ tslib: 2.8.1
+
+ '@jsonjoy.com/buffers@1.2.1(tslib@2.8.1)':
+ dependencies:
+ tslib: 2.8.1
+
+ '@jsonjoy.com/buffers@17.67.0(tslib@2.8.1)':
+ dependencies:
+ tslib: 2.8.1
+
+ '@jsonjoy.com/codegen@1.0.0(tslib@2.8.1)':
+ dependencies:
+ tslib: 2.8.1
+
+ '@jsonjoy.com/codegen@17.67.0(tslib@2.8.1)':
+ dependencies:
+ tslib: 2.8.1
+
+ '@jsonjoy.com/fs-core@4.56.10(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1)
+ thingies: 2.5.0(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@jsonjoy.com/fs-fsa@4.56.10(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1)
+ thingies: 2.5.0(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@jsonjoy.com/fs-node-builtins@4.56.10(tslib@2.8.1)':
+ dependencies:
+ tslib: 2.8.1
+
+ '@jsonjoy.com/fs-node-to-fsa@4.56.10(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/fs-fsa': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@jsonjoy.com/fs-node-utils@4.56.10(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@jsonjoy.com/fs-node@4.56.10(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-print': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-snapshot': 4.56.10(tslib@2.8.1)
+ glob-to-regex.js: 1.2.0(tslib@2.8.1)
+ thingies: 2.5.0(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@jsonjoy.com/fs-print@4.56.10(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1)
+ tree-dump: 1.1.0(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@jsonjoy.com/fs-snapshot@4.56.10(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/json-pack': 17.67.0(tslib@2.8.1)
+ '@jsonjoy.com/util': 17.67.0(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@jsonjoy.com/json-pack@1.21.0(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1)
+ '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1)
+ '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1)
+ '@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1)
+ '@jsonjoy.com/util': 1.9.0(tslib@2.8.1)
+ hyperdyperid: 1.2.0
+ thingies: 2.5.0(tslib@2.8.1)
+ tree-dump: 1.1.0(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@jsonjoy.com/json-pack@17.67.0(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/base64': 17.67.0(tslib@2.8.1)
+ '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1)
+ '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1)
+ '@jsonjoy.com/json-pointer': 17.67.0(tslib@2.8.1)
+ '@jsonjoy.com/util': 17.67.0(tslib@2.8.1)
+ hyperdyperid: 1.2.0
+ thingies: 2.5.0(tslib@2.8.1)
+ tree-dump: 1.1.0(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@jsonjoy.com/json-pointer@1.0.2(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1)
+ '@jsonjoy.com/util': 1.9.0(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@jsonjoy.com/json-pointer@17.67.0(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/util': 17.67.0(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@jsonjoy.com/util@1.9.0(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1)
+ '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@jsonjoy.com/util@17.67.0(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1)
+ '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@leichtgewicht/ip-codec@2.0.5': {}
+
+ '@listr2/prompt-adapter-inquirer@2.0.18(@inquirer/prompts@7.3.2(@types/node@25.3.0))':
+ dependencies:
+ '@inquirer/prompts': 7.3.2(@types/node@25.3.0)
+ '@inquirer/type': 1.5.5
+
+ '@lmdb/lmdb-darwin-arm64@3.2.6':
+ optional: true
+
+ '@lmdb/lmdb-darwin-x64@3.2.6':
+ optional: true
+
+ '@lmdb/lmdb-linux-arm64@3.2.6':
+ optional: true
+
+ '@lmdb/lmdb-linux-arm@3.2.6':
+ optional: true
+
+ '@lmdb/lmdb-linux-x64@3.2.6':
+ optional: true
+
+ '@lmdb/lmdb-win32-x64@3.2.6':
+ optional: true
+
+ '@manypkg/find-root@1.1.0':
+ dependencies:
+ '@babel/runtime': 7.28.6
+ '@types/node': 12.20.55
+ find-up: 4.1.0
+ fs-extra: 8.1.0
+
+ '@manypkg/get-packages@1.1.3':
+ dependencies:
+ '@babel/runtime': 7.28.6
+ '@changesets/types': 4.1.0
+ '@manypkg/find-root': 1.1.0
+ fs-extra: 8.1.0
+ globby: 11.1.0
+ read-yaml-file: 1.1.0
+
+ '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3':
+ optional: true
+
+ '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3':
+ optional: true
+
+ '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3':
+ optional: true
+
+ '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3':
+ optional: true
+
+ '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3':
+ optional: true
+
+ '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3':
+ optional: true
+
+ '@napi-rs/nice-android-arm-eabi@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-android-arm64@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-darwin-arm64@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-darwin-x64@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-freebsd-x64@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-linux-arm-gnueabihf@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-linux-arm64-gnu@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-linux-arm64-musl@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-linux-ppc64-gnu@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-linux-riscv64-gnu@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-linux-s390x-gnu@1.1.1':
+ optional: true
- '@jridgewell/resolve-uri@3.1.2': {}
+ '@napi-rs/nice-linux-x64-gnu@1.1.1':
+ optional: true
- '@jridgewell/sourcemap-codec@1.5.5': {}
+ '@napi-rs/nice-linux-x64-musl@1.1.1':
+ optional: true
- '@jridgewell/trace-mapping@0.3.31':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.5
+ '@napi-rs/nice-openharmony-arm64@1.1.1':
+ optional: true
- '@manypkg/find-root@1.1.0':
- dependencies:
- '@babel/runtime': 7.28.6
- '@types/node': 12.20.55
- find-up: 4.1.0
- fs-extra: 8.1.0
+ '@napi-rs/nice-win32-arm64-msvc@1.1.1':
+ optional: true
- '@manypkg/get-packages@1.1.3':
- dependencies:
- '@babel/runtime': 7.28.6
- '@changesets/types': 4.1.0
- '@manypkg/find-root': 1.1.0
- fs-extra: 8.1.0
- globby: 11.1.0
- read-yaml-file: 1.1.0
+ '@napi-rs/nice-win32-ia32-msvc@1.1.1':
+ optional: true
+
+ '@napi-rs/nice-win32-x64-msvc@1.1.1':
+ optional: true
+
+ '@napi-rs/nice@1.1.1':
+ optionalDependencies:
+ '@napi-rs/nice-android-arm-eabi': 1.1.1
+ '@napi-rs/nice-android-arm64': 1.1.1
+ '@napi-rs/nice-darwin-arm64': 1.1.1
+ '@napi-rs/nice-darwin-x64': 1.1.1
+ '@napi-rs/nice-freebsd-x64': 1.1.1
+ '@napi-rs/nice-linux-arm-gnueabihf': 1.1.1
+ '@napi-rs/nice-linux-arm64-gnu': 1.1.1
+ '@napi-rs/nice-linux-arm64-musl': 1.1.1
+ '@napi-rs/nice-linux-ppc64-gnu': 1.1.1
+ '@napi-rs/nice-linux-riscv64-gnu': 1.1.1
+ '@napi-rs/nice-linux-s390x-gnu': 1.1.1
+ '@napi-rs/nice-linux-x64-gnu': 1.1.1
+ '@napi-rs/nice-linux-x64-musl': 1.1.1
+ '@napi-rs/nice-openharmony-arm64': 1.1.1
+ '@napi-rs/nice-win32-arm64-msvc': 1.1.1
+ '@napi-rs/nice-win32-ia32-msvc': 1.1.1
+ '@napi-rs/nice-win32-x64-msvc': 1.1.1
+ optional: true
'@napi-rs/wasm-runtime@0.2.12':
dependencies:
@@ -5022,6 +10195,12 @@ snapshots:
'@tybys/wasm-util': 0.10.1
optional: true
+ '@ngtools/webpack@19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(typescript@5.7.3)(webpack@5.105.0(esbuild@0.25.4))':
+ dependencies:
+ '@angular/compiler-cli': 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
+ typescript: 5.7.3
+ webpack: 5.105.0(esbuild@0.25.4)
+
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -5034,6 +10213,65 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.20.1
+ '@npmcli/agent@3.0.0':
+ dependencies:
+ agent-base: 7.1.4
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.6
+ lru-cache: 10.4.3
+ socks-proxy-agent: 8.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@npmcli/fs@4.0.0':
+ dependencies:
+ semver: 7.7.4
+
+ '@npmcli/git@6.0.3':
+ dependencies:
+ '@npmcli/promise-spawn': 8.0.3
+ ini: 5.0.0
+ lru-cache: 10.4.3
+ npm-pick-manifest: 10.0.0
+ proc-log: 5.0.0
+ promise-retry: 2.0.1
+ semver: 7.7.4
+ which: 5.0.0
+
+ '@npmcli/installed-package-contents@3.0.0':
+ dependencies:
+ npm-bundled: 4.0.0
+ npm-normalize-package-bin: 4.0.0
+
+ '@npmcli/node-gyp@4.0.0': {}
+
+ '@npmcli/package-json@6.2.0':
+ dependencies:
+ '@npmcli/git': 6.0.3
+ glob: 10.5.0
+ hosted-git-info: 8.1.0
+ json-parse-even-better-errors: 4.0.0
+ proc-log: 5.0.0
+ semver: 7.7.4
+ validate-npm-package-license: 3.0.4
+
+ '@npmcli/promise-spawn@8.0.3':
+ dependencies:
+ which: 5.0.0
+
+ '@npmcli/redact@3.2.2': {}
+
+ '@npmcli/run-script@9.1.0':
+ dependencies:
+ '@npmcli/node-gyp': 4.0.0
+ '@npmcli/package-json': 6.2.0
+ '@npmcli/promise-spawn': 8.0.3
+ node-gyp: 11.5.0
+ proc-log: 5.0.0
+ which: 5.0.0
+ transitivePeerDependencies:
+ - supports-color
+
'@nx/nx-darwin-arm64@22.5.2':
optional: true
@@ -5066,80 +10304,144 @@ snapshots:
'@oxc-project/types@0.112.0': {}
- '@oxc-resolver/binding-android-arm-eabi@11.18.0':
+ '@oxc-resolver/binding-android-arm-eabi@11.17.1':
optional: true
- '@oxc-resolver/binding-android-arm64@11.18.0':
+ '@oxc-resolver/binding-android-arm64@11.17.1':
optional: true
- '@oxc-resolver/binding-darwin-arm64@11.18.0':
+ '@oxc-resolver/binding-darwin-arm64@11.17.1':
optional: true
- '@oxc-resolver/binding-darwin-x64@11.18.0':
+ '@oxc-resolver/binding-darwin-x64@11.17.1':
optional: true
- '@oxc-resolver/binding-freebsd-x64@11.18.0':
+ '@oxc-resolver/binding-freebsd-x64@11.17.1':
optional: true
- '@oxc-resolver/binding-linux-arm-gnueabihf@11.18.0':
+ '@oxc-resolver/binding-linux-arm-gnueabihf@11.17.1':
optional: true
- '@oxc-resolver/binding-linux-arm-musleabihf@11.18.0':
+ '@oxc-resolver/binding-linux-arm-musleabihf@11.17.1':
optional: true
- '@oxc-resolver/binding-linux-arm64-gnu@11.18.0':
+ '@oxc-resolver/binding-linux-arm64-gnu@11.17.1':
optional: true
- '@oxc-resolver/binding-linux-arm64-musl@11.18.0':
+ '@oxc-resolver/binding-linux-arm64-musl@11.17.1':
optional: true
- '@oxc-resolver/binding-linux-ppc64-gnu@11.18.0':
+ '@oxc-resolver/binding-linux-ppc64-gnu@11.17.1':
optional: true
- '@oxc-resolver/binding-linux-riscv64-gnu@11.18.0':
+ '@oxc-resolver/binding-linux-riscv64-gnu@11.17.1':
optional: true
- '@oxc-resolver/binding-linux-riscv64-musl@11.18.0':
+ '@oxc-resolver/binding-linux-riscv64-musl@11.17.1':
optional: true
- '@oxc-resolver/binding-linux-s390x-gnu@11.18.0':
+ '@oxc-resolver/binding-linux-s390x-gnu@11.17.1':
optional: true
- '@oxc-resolver/binding-linux-x64-gnu@11.18.0':
+ '@oxc-resolver/binding-linux-x64-gnu@11.17.1':
optional: true
- '@oxc-resolver/binding-linux-x64-musl@11.18.0':
+ '@oxc-resolver/binding-linux-x64-musl@11.17.1':
optional: true
- '@oxc-resolver/binding-openharmony-arm64@11.18.0':
+ '@oxc-resolver/binding-openharmony-arm64@11.17.1':
optional: true
- '@oxc-resolver/binding-wasm32-wasi@11.18.0':
+ '@oxc-resolver/binding-wasm32-wasi@11.17.1':
dependencies:
'@napi-rs/wasm-runtime': 1.1.1
optional: true
- '@oxc-resolver/binding-win32-arm64-msvc@11.18.0':
+ '@oxc-resolver/binding-win32-arm64-msvc@11.17.1':
+ optional: true
+
+ '@oxc-resolver/binding-win32-ia32-msvc@11.17.1':
+ optional: true
+
+ '@oxc-resolver/binding-win32-x64-msvc@11.17.1':
optional: true
- '@oxc-resolver/binding-win32-ia32-msvc@11.18.0':
+ '@parcel/watcher-android-arm64@2.5.6':
optional: true
- '@oxc-resolver/binding-win32-x64-msvc@11.18.0':
+ '@parcel/watcher-darwin-arm64@2.5.6':
optional: true
- '@preact/preset-vite@2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.58.0)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))':
+ '@parcel/watcher-darwin-x64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-freebsd-x64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm-glibc@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm-musl@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-musl@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-x64-glibc@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-x64-musl@2.5.6':
+ optional: true
+
+ '@parcel/watcher-win32-arm64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-win32-ia32@2.5.6':
+ optional: true
+
+ '@parcel/watcher-win32-x64@2.5.6':
+ optional: true
+
+ '@parcel/watcher@2.5.6':
+ dependencies:
+ detect-libc: 2.1.2
+ is-glob: 4.0.3
+ node-addon-api: 7.1.1
+ picomatch: 4.0.3
+ optionalDependencies:
+ '@parcel/watcher-android-arm64': 2.5.6
+ '@parcel/watcher-darwin-arm64': 2.5.6
+ '@parcel/watcher-darwin-x64': 2.5.6
+ '@parcel/watcher-freebsd-x64': 2.5.6
+ '@parcel/watcher-linux-arm-glibc': 2.5.6
+ '@parcel/watcher-linux-arm-musl': 2.5.6
+ '@parcel/watcher-linux-arm64-glibc': 2.5.6
+ '@parcel/watcher-linux-arm64-musl': 2.5.6
+ '@parcel/watcher-linux-x64-glibc': 2.5.6
+ '@parcel/watcher-linux-x64-musl': 2.5.6
+ '@parcel/watcher-win32-arm64': 2.5.6
+ '@parcel/watcher-win32-ia32': 2.5.6
+ '@parcel/watcher-win32-x64': 2.5.6
+ optional: true
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@preact/preset-vite@2.10.3(@babel/core@7.29.0)(preact@10.28.4)(rollup@4.57.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0)
'@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0)
- '@prefresh/vite': 2.4.12(preact@10.28.4)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
- '@rollup/pluginutils': 5.3.0(rollup@4.58.0)
+ '@prefresh/vite': 2.4.12(preact@10.28.4)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
+ '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.29.0)
debug: 4.4.3
picocolors: 1.1.1
- vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
- vite-prerender-plugin: 0.5.12(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
+ vite-prerender-plugin: 0.5.12(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
transitivePeerDependencies:
- preact
- rollup
@@ -5153,7 +10455,7 @@ snapshots:
'@prefresh/utils@1.2.1': {}
- '@prefresh/vite@2.4.12(preact@10.28.4)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))':
+ '@prefresh/vite@2.4.12(preact@10.28.4)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))':
dependencies:
'@babel/core': 7.29.0
'@prefresh/babel-plugin': 0.5.3
@@ -5161,7 +10463,7 @@ snapshots:
'@prefresh/utils': 1.2.1
'@rollup/pluginutils': 4.2.1
preact: 10.28.4
- vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
transitivePeerDependencies:
- supports-color
@@ -5219,89 +10521,154 @@ snapshots:
estree-walker: 2.0.2
picomatch: 2.3.1
- '@rollup/pluginutils@5.3.0(rollup@4.58.0)':
+ '@rollup/pluginutils@5.3.0(rollup@4.57.1)':
dependencies:
'@types/estree': 1.0.8
estree-walker: 2.0.2
picomatch: 4.0.3
optionalDependencies:
- rollup: 4.58.0
+ rollup: 4.57.1
+
+ '@rollup/rollup-android-arm-eabi@4.34.8':
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.57.1':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.34.8':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.57.1':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.34.8':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.57.1':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.34.8':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.57.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.34.8':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.57.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.34.8':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.57.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.34.8':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.57.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.34.8':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.57.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.34.8':
+ optional: true
- '@rollup/rollup-android-arm-eabi@4.58.0':
+ '@rollup/rollup-linux-arm64-gnu@4.57.1':
optional: true
- '@rollup/rollup-android-arm64@4.58.0':
+ '@rollup/rollup-linux-arm64-musl@4.34.8':
optional: true
- '@rollup/rollup-darwin-arm64@4.58.0':
+ '@rollup/rollup-linux-arm64-musl@4.57.1':
optional: true
- '@rollup/rollup-darwin-x64@4.58.0':
+ '@rollup/rollup-linux-loong64-gnu@4.57.1':
optional: true
- '@rollup/rollup-freebsd-arm64@4.58.0':
+ '@rollup/rollup-linux-loong64-musl@4.57.1':
optional: true
- '@rollup/rollup-freebsd-x64@4.58.0':
+ '@rollup/rollup-linux-loongarch64-gnu@4.34.8':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.58.0':
+ '@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.58.0':
+ '@rollup/rollup-linux-ppc64-gnu@4.57.1':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.58.0':
+ '@rollup/rollup-linux-ppc64-musl@4.57.1':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.58.0':
+ '@rollup/rollup-linux-riscv64-gnu@4.34.8':
optional: true
- '@rollup/rollup-linux-loong64-gnu@4.58.0':
+ '@rollup/rollup-linux-riscv64-gnu@4.57.1':
optional: true
- '@rollup/rollup-linux-loong64-musl@4.58.0':
+ '@rollup/rollup-linux-riscv64-musl@4.57.1':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.58.0':
+ '@rollup/rollup-linux-s390x-gnu@4.34.8':
optional: true
- '@rollup/rollup-linux-ppc64-musl@4.58.0':
+ '@rollup/rollup-linux-s390x-gnu@4.57.1':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.58.0':
+ '@rollup/rollup-linux-x64-gnu@4.34.8':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.58.0':
+ '@rollup/rollup-linux-x64-gnu@4.57.1':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.58.0':
+ '@rollup/rollup-linux-x64-musl@4.34.8':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.58.0':
+ '@rollup/rollup-linux-x64-musl@4.57.1':
optional: true
- '@rollup/rollup-linux-x64-musl@4.58.0':
+ '@rollup/rollup-openbsd-x64@4.57.1':
optional: true
- '@rollup/rollup-openbsd-x64@4.58.0':
+ '@rollup/rollup-openharmony-arm64@4.57.1':
optional: true
- '@rollup/rollup-openharmony-arm64@4.58.0':
+ '@rollup/rollup-win32-arm64-msvc@4.34.8':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.58.0':
+ '@rollup/rollup-win32-arm64-msvc@4.57.1':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.58.0':
+ '@rollup/rollup-win32-ia32-msvc@4.34.8':
optional: true
- '@rollup/rollup-win32-x64-gnu@4.58.0':
+ '@rollup/rollup-win32-ia32-msvc@4.57.1':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.58.0':
+ '@rollup/rollup-win32-x64-gnu@4.57.1':
optional: true
+ '@rollup/rollup-win32-x64-msvc@4.34.8':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.57.1':
+ optional: true
+
+ '@schematics/angular@19.2.20(chokidar@4.0.3)':
+ dependencies:
+ '@angular-devkit/core': 19.2.20(chokidar@4.0.3)
+ '@angular-devkit/schematics': 19.2.20(chokidar@4.0.3)
+ jsonc-parser: 3.3.1
+ transitivePeerDependencies:
+ - chokidar
+
'@shikijs/engine-oniguruma@3.22.0':
dependencies:
'@shikijs/types': 3.22.0
@@ -5322,8 +10689,42 @@ snapshots:
'@shikijs/vscode-textmate@10.0.2': {}
+ '@sigstore/bundle@3.1.0':
+ dependencies:
+ '@sigstore/protobuf-specs': 0.4.3
+
+ '@sigstore/core@2.0.0': {}
+
+ '@sigstore/protobuf-specs@0.4.3': {}
+
+ '@sigstore/sign@3.1.0':
+ dependencies:
+ '@sigstore/bundle': 3.1.0
+ '@sigstore/core': 2.0.0
+ '@sigstore/protobuf-specs': 0.4.3
+ make-fetch-happen: 14.0.3
+ proc-log: 5.0.0
+ promise-retry: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@sigstore/tuf@3.1.1':
+ dependencies:
+ '@sigstore/protobuf-specs': 0.4.3
+ tuf-js: 3.1.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@sigstore/verify@2.1.1':
+ dependencies:
+ '@sigstore/bundle': 3.1.0
+ '@sigstore/core': 2.0.0
+ '@sigstore/protobuf-specs': 0.4.3
+
'@sinclair/typebox@0.34.48': {}
+ '@sindresorhus/merge-streams@2.3.0': {}
+
'@size-limit/esbuild@12.0.0(size-limit@12.0.0(jiti@2.6.1))':
dependencies:
esbuild: 0.27.3
@@ -5340,6 +10741,8 @@ snapshots:
'@size-limit/file': 12.0.0(size-limit@12.0.0(jiti@2.6.1))
size-limit: 12.0.0(jiti@2.6.1)
+ '@socket.io/component-emitter@3.1.2': {}
+
'@solid-primitives/event-listener@2.4.3(solid-js@1.9.11)':
dependencies:
'@solid-primitives/utils': 6.3.2(solid-js@1.9.11)
@@ -5381,27 +10784,34 @@ snapshots:
'@standard-schema/spec@1.1.0': {}
- '@stylistic/eslint-plugin@5.9.0(eslint@9.39.3(jiti@2.6.1))':
+ '@stylistic/eslint-plugin@5.8.0(eslint@9.39.2(jiti@2.6.1))':
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1))
- '@typescript-eslint/types': 8.56.0
- eslint: 9.39.3(jiti@2.6.1)
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
+ '@typescript-eslint/types': 8.55.0
+ eslint: 9.39.2(jiti@2.6.1)
eslint-visitor-keys: 4.2.1
espree: 10.4.0
estraverse: 5.3.0
picomatch: 4.0.3
- '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)':
+ '@sveltejs/acorn-typescript@1.0.9(acorn@8.15.0)':
dependencies:
- acorn: 8.16.0
+ acorn: 8.15.0
- '@svitejs/changesets-changelog-github-compact@1.2.0':
+ '@svitejs/changesets-changelog-github-compact@1.2.0(encoding@0.1.13)':
dependencies:
- '@changesets/get-github-info': 0.6.0
+ '@changesets/get-github-info': 0.6.0(encoding@0.1.13)
dotenv: 16.6.1
transitivePeerDependencies:
- encoding
+ '@tanstack/angular-store@0.8.1(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))':
+ dependencies:
+ '@angular/common': 19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
+ '@angular/core': 19.2.18(rxjs@7.8.2)(zone.js@0.15.1)
+ '@tanstack/store': 0.8.1
+ tslib: 2.8.1
+
'@tanstack/devtools-client@0.0.5':
dependencies:
'@tanstack/devtools-event-client': 0.4.0
@@ -5473,16 +10883,16 @@ snapshots:
- csstype
- utf-8-validate
- '@tanstack/eslint-config@0.4.0(@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)':
+ '@tanstack/eslint-config@0.4.0(@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@eslint/js': 10.0.1(eslint@9.39.3(jiti@2.6.1))
- '@stylistic/eslint-plugin': 5.9.0(eslint@9.39.3(jiti@2.6.1))
- eslint: 9.39.3(jiti@2.6.1)
- eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))
- eslint-plugin-n: 17.24.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint/js': 10.0.1(eslint@9.39.2(jiti@2.6.1))
+ '@stylistic/eslint-plugin': 5.8.0(eslint@9.39.2(jiti@2.6.1))
+ eslint: 9.39.2(jiti@2.6.1)
+ eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))
+ eslint-plugin-n: 17.24.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
globals: 17.3.0
- typescript-eslint: 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- vue-eslint-parser: 10.4.0(eslint@9.39.3(jiti@2.6.1))
+ typescript-eslint: 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ vue-eslint-parser: 10.4.0(eslint@9.39.2(jiti@2.6.1))
transitivePeerDependencies:
- '@typescript-eslint/utils'
- eslint-import-resolver-node
@@ -5538,6 +10948,8 @@ snapshots:
'@tanstack/store': 0.9.1
solid-js: 1.9.11
+ '@tanstack/store@0.8.1': {}
+
'@tanstack/store@0.9.1': {}
'@tanstack/typedoc-config@0.3.3(typescript@5.9.3)':
@@ -5594,6 +11006,13 @@ snapshots:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
+ '@tufjs/canonical-json@2.0.0': {}
+
+ '@tufjs/models@3.0.1':
+ dependencies:
+ '@tufjs/canonical-json': 2.0.0
+ minimatch: 9.0.5
+
'@tybys/wasm-util@0.10.1':
dependencies:
tslib: 2.8.1
@@ -5626,31 +11045,95 @@ snapshots:
dependencies:
'@babel/types': 7.29.0
+ '@types/body-parser@1.19.6':
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 25.3.0
+
+ '@types/bonjour@3.5.13':
+ dependencies:
+ '@types/node': 25.3.0
+
'@types/chai@5.2.3':
dependencies:
'@types/deep-eql': 4.0.2
assertion-error: 2.0.1
+ '@types/connect-history-api-fallback@1.5.4':
+ dependencies:
+ '@types/express-serve-static-core': 4.19.8
+ '@types/node': 25.3.0
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 25.3.0
+
+ '@types/cors@2.8.19':
+ dependencies:
+ '@types/node': 25.3.0
+
'@types/deep-eql@4.0.2': {}
- '@types/esrecurse@4.3.1': {}
+ '@types/eslint-scope@3.7.7':
+ dependencies:
+ '@types/eslint': 9.6.1
+ '@types/estree': 1.0.8
+
+ '@types/eslint@9.6.1':
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/json-schema': 7.0.15
+
+ '@types/estree@1.0.6': {}
'@types/estree@1.0.8': {}
+ '@types/express-serve-static-core@4.19.8':
+ dependencies:
+ '@types/node': 25.3.0
+ '@types/qs': 6.14.0
+ '@types/range-parser': 1.2.7
+ '@types/send': 1.2.1
+
+ '@types/express@4.17.25':
+ dependencies:
+ '@types/body-parser': 1.19.6
+ '@types/express-serve-static-core': 4.19.8
+ '@types/qs': 6.14.0
+ '@types/serve-static': 1.15.10
+
'@types/hast@3.0.4':
dependencies:
'@types/unist': 3.0.3
+ '@types/http-errors@2.0.5': {}
+
+ '@types/http-proxy@1.17.17':
+ dependencies:
+ '@types/node': 25.3.0
+
+ '@types/jasmine@5.1.15': {}
+
'@types/jsesc@2.5.1': {}
'@types/json-schema@7.0.15': {}
+ '@types/mime@1.3.5': {}
+
+ '@types/node-forge@1.3.14':
+ dependencies:
+ '@types/node': 25.3.0
+
'@types/node@12.20.55': {}
'@types/node@25.3.0':
dependencies:
undici-types: 7.18.2
+ '@types/qs@6.14.0': {}
+
+ '@types/range-parser@1.2.7': {}
+
'@types/react-dom@19.2.3(@types/react@19.2.14)':
dependencies:
'@types/react': 19.2.14
@@ -5659,7 +11142,30 @@ snapshots:
dependencies:
csstype: 3.2.3
- '@types/trusted-types@2.0.7': {}
+ '@types/retry@0.12.2': {}
+
+ '@types/send@0.17.6':
+ dependencies:
+ '@types/mime': 1.3.5
+ '@types/node': 25.3.0
+
+ '@types/send@1.2.1':
+ dependencies:
+ '@types/node': 25.3.0
+
+ '@types/serve-index@1.9.4':
+ dependencies:
+ '@types/express': 4.17.25
+
+ '@types/serve-static@1.15.10':
+ dependencies:
+ '@types/http-errors': 2.0.5
+ '@types/node': 25.3.0
+ '@types/send': 0.17.6
+
+ '@types/sockjs@0.3.36':
+ dependencies:
+ '@types/node': 25.3.0
'@types/unist@3.0.3': {}
@@ -5669,15 +11175,15 @@ snapshots:
dependencies:
'@types/node': 25.3.0
- '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.56.0
- '@typescript-eslint/type-utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.56.0
- eslint: 9.39.3(jiti@2.6.1)
+ '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.55.0
+ '@typescript-eslint/type-utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.55.0
+ eslint: 9.39.2(jiti@2.6.1)
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 2.4.0(typescript@5.9.3)
@@ -5685,56 +11191,56 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.56.0
- '@typescript-eslint/types': 8.56.0
- '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.56.0
+ '@typescript-eslint/scope-manager': 8.55.0
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.55.0
debug: 4.4.3
- eslint: 9.39.3(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.56.0(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.55.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.56.0
+ '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.55.0
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.56.0':
+ '@typescript-eslint/scope-manager@8.55.0':
dependencies:
- '@typescript-eslint/types': 8.56.0
- '@typescript-eslint/visitor-keys': 8.56.0
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/visitor-keys': 8.55.0
- '@typescript-eslint/tsconfig-utils@8.56.0(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.55.0(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.56.0
- '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
debug: 4.4.3
- eslint: 9.39.3(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
ts-api-utils: 2.4.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.56.0': {}
+ '@typescript-eslint/types@8.55.0': {}
- '@typescript-eslint/typescript-estree@8.56.0(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.55.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/project-service': 8.56.0(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.56.0
- '@typescript-eslint/visitor-keys': 8.56.0
+ '@typescript-eslint/project-service': 8.55.0(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/visitor-keys': 8.55.0
debug: 4.4.3
minimatch: 9.0.5
semver: 7.7.4
@@ -5744,21 +11250,21 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1))
- '@typescript-eslint/scope-manager': 8.56.0
- '@typescript-eslint/types': 8.56.0
- '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3)
- eslint: 9.39.3(jiti@2.6.1)
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
+ '@typescript-eslint/scope-manager': 8.55.0
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3)
+ eslint: 9.39.2(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.56.0':
+ '@typescript-eslint/visitor-keys@8.55.0':
dependencies:
- '@typescript-eslint/types': 8.56.0
- eslint-visitor-keys: 5.0.1
+ '@typescript-eslint/types': 8.55.0
+ eslint-visitor-keys: 4.2.1
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
optional: true
@@ -5819,7 +11325,15 @@ snapshots:
'@unrs/resolver-binding-win32-x64-msvc@1.11.1':
optional: true
- '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))':
+ '@vitejs/plugin-basic-ssl@1.2.0(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))':
+ dependencies:
+ vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
+
+ '@vitejs/plugin-basic-ssl@1.2.0(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))':
+ dependencies:
+ vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
+
+ '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
@@ -5827,7 +11341,7 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-rc.3
'@types/babel__core': 7.20.5
react-refresh: 0.18.0
- vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
transitivePeerDependencies:
- supports-color
@@ -5840,13 +11354,13 @@ snapshots:
chai: 6.2.2
tinyrainbow: 3.0.3
- '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))':
+ '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))':
dependencies:
'@vitest/spy': 4.0.18
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
'@vitest/pretty-format@4.0.18':
dependencies:
@@ -5870,42 +11384,182 @@ snapshots:
'@vitest/pretty-format': 4.0.18
tinyrainbow: 3.0.3
+ '@webassemblyjs/ast@1.14.1':
+ dependencies:
+ '@webassemblyjs/helper-numbers': 1.13.2
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+
+ '@webassemblyjs/floating-point-hex-parser@1.13.2': {}
+
+ '@webassemblyjs/helper-api-error@1.13.2': {}
+
+ '@webassemblyjs/helper-buffer@1.14.1': {}
+
+ '@webassemblyjs/helper-numbers@1.13.2':
+ dependencies:
+ '@webassemblyjs/floating-point-hex-parser': 1.13.2
+ '@webassemblyjs/helper-api-error': 1.13.2
+ '@xtuc/long': 4.2.2
+
+ '@webassemblyjs/helper-wasm-bytecode@1.13.2': {}
+
+ '@webassemblyjs/helper-wasm-section@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/wasm-gen': 1.14.1
+
+ '@webassemblyjs/ieee754@1.13.2':
+ dependencies:
+ '@xtuc/ieee754': 1.2.0
+
+ '@webassemblyjs/leb128@1.13.2':
+ dependencies:
+ '@xtuc/long': 4.2.2
+
+ '@webassemblyjs/utf8@1.13.2': {}
+
+ '@webassemblyjs/wasm-edit@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/helper-wasm-section': 1.14.1
+ '@webassemblyjs/wasm-gen': 1.14.1
+ '@webassemblyjs/wasm-opt': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+ '@webassemblyjs/wast-printer': 1.14.1
+
+ '@webassemblyjs/wasm-gen@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/ieee754': 1.13.2
+ '@webassemblyjs/leb128': 1.13.2
+ '@webassemblyjs/utf8': 1.13.2
+
+ '@webassemblyjs/wasm-opt@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/wasm-gen': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+
+ '@webassemblyjs/wasm-parser@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-api-error': 1.13.2
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/ieee754': 1.13.2
+ '@webassemblyjs/leb128': 1.13.2
+ '@webassemblyjs/utf8': 1.13.2
+
+ '@webassemblyjs/wast-printer@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@xtuc/long': 4.2.2
+
+ '@xtuc/ieee754@1.2.0': {}
+
+ '@xtuc/long@4.2.2': {}
+
'@yarnpkg/lockfile@1.1.0': {}
'@yarnpkg/parsers@3.0.2':
dependencies:
- js-yaml: 3.14.2
- tslib: 2.8.1
+ js-yaml: 3.14.2
+ tslib: 2.8.1
+
+ '@zkochan/js-yaml@0.0.7':
+ dependencies:
+ argparse: 2.0.1
+
+ abbrev@3.0.1: {}
+
+ accepts@1.3.8:
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+
+ acorn-import-phases@1.0.4(acorn@8.15.0):
+ dependencies:
+ acorn: 8.15.0
- '@zkochan/js-yaml@0.0.7':
+ acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
- argparse: 2.0.1
+ acorn: 8.15.0
- acorn-jsx@5.3.2(acorn@8.16.0):
+ acorn@8.15.0: {}
+
+ adjust-sourcemap-loader@4.0.0:
dependencies:
- acorn: 8.16.0
+ loader-utils: 2.0.4
+ regex-parser: 2.3.1
+
+ agent-base@7.1.4: {}
+
+ ajv-formats@2.1.1(ajv@8.18.0):
+ optionalDependencies:
+ ajv: 8.18.0
- acorn@8.16.0: {}
+ ajv-formats@3.0.1(ajv@8.17.1):
+ optionalDependencies:
+ ajv: 8.17.1
+
+ ajv-keywords@5.1.0(ajv@8.18.0):
+ dependencies:
+ ajv: 8.18.0
+ fast-deep-equal: 3.1.3
- ajv@6.14.0:
+ ajv@6.12.6:
dependencies:
fast-deep-equal: 3.1.3
fast-json-stable-stringify: 2.1.0
json-schema-traverse: 0.4.1
uri-js: 4.4.1
+ ajv@8.17.1:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.0
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
+ ajv@8.18.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.0
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
ansi-colors@4.1.3: {}
+ ansi-escapes@7.3.0:
+ dependencies:
+ environment: 1.1.0
+
+ ansi-html-community@0.0.8: {}
+
ansi-regex@5.0.1: {}
+ ansi-regex@6.2.2: {}
+
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
ansi-styles@5.2.0: {}
+ ansi-styles@6.2.3: {}
+
ansis@4.2.0: {}
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
@@ -5927,6 +11581,8 @@ snapshots:
call-bound: 1.0.4
is-array-buffer: 3.0.5
+ array-flatten@1.1.1: {}
+
array-union@2.1.0: {}
assertion-error@2.0.1: {}
@@ -5941,13 +11597,23 @@ snapshots:
asynckit@0.4.0: {}
+ autoprefixer@10.4.20(postcss@8.5.2):
+ dependencies:
+ browserslist: 4.28.1
+ caniuse-lite: 1.0.30001769
+ fraction.js: 4.3.7
+ normalize-range: 0.1.2
+ picocolors: 1.1.1
+ postcss: 8.5.2
+ postcss-value-parser: 4.2.0
+
available-typed-arrays@1.0.7:
dependencies:
possible-typed-array-names: 1.1.0
axios@1.13.5:
dependencies:
- follow-redirects: 1.15.11
+ follow-redirects: 1.15.11(debug@4.4.3)
form-data: 4.0.5
proxy-from-env: 1.1.0
transitivePeerDependencies:
@@ -5955,7 +11621,14 @@ snapshots:
axobject-query@4.1.0: {}
- babel-plugin-jsx-dom-expressions@0.40.5(@babel/core@7.29.0):
+ babel-loader@9.2.1(@babel/core@7.26.10)(webpack@5.105.0(esbuild@0.25.4)):
+ dependencies:
+ '@babel/core': 7.26.10
+ find-cache-dir: 4.0.0
+ schema-utils: 4.3.3
+ webpack: 5.105.0(esbuild@0.25.4)
+
+ babel-plugin-jsx-dom-expressions@0.40.3(@babel/core@7.29.0):
dependencies:
'@babel/core': 7.29.0
'@babel/helper-module-imports': 7.18.6
@@ -5964,6 +11637,30 @@ snapshots:
html-entities: 2.3.3
parse5: 7.3.0
+ babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.26.10):
+ dependencies:
+ '@babel/compat-data': 7.29.0
+ '@babel/core': 7.26.10
+ '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.26.10)
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.10):
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.26.10)
+ core-js-compat: 3.48.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.26.10):
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.26.10)
+ transitivePeerDependencies:
+ - supports-color
+
babel-plugin-transform-hook-names@1.0.2(@babel/core@7.29.0):
dependencies:
'@babel/core': 7.29.0
@@ -5971,22 +11668,43 @@ snapshots:
babel-preset-solid@1.9.10(@babel/core@7.29.0)(solid-js@1.9.11):
dependencies:
'@babel/core': 7.29.0
- babel-plugin-jsx-dom-expressions: 0.40.5(@babel/core@7.29.0)
+ babel-plugin-jsx-dom-expressions: 0.40.3(@babel/core@7.29.0)
optionalDependencies:
solid-js: 1.9.11
balanced-match@1.0.2: {}
- balanced-match@4.0.3: {}
+ balanced-match@4.0.2:
+ dependencies:
+ jackspeak: 4.2.3
base64-js@1.5.1: {}
- baseline-browser-mapping@2.10.0: {}
+ base64id@2.0.0: {}
+
+ baseline-browser-mapping@2.9.19: {}
+
+ batch@0.6.1: {}
+
+ beasties@0.3.2:
+ dependencies:
+ css-select: 5.2.2
+ css-what: 6.2.2
+ dom-serializer: 2.0.0
+ domhandler: 5.0.3
+ htmlparser2: 10.1.0
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-media-query-parser: 0.2.3
better-path-resolve@1.0.0:
dependencies:
is-windows: 1.0.2
+ big.js@5.2.2: {}
+
+ binary-extensions@2.3.0: {}
+
birecord@0.1.1: {}
birpc@4.0.0: {}
@@ -5997,6 +11715,28 @@ snapshots:
inherits: 2.0.4
readable-stream: 3.6.2
+ body-parser@1.20.4:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.1
+ iconv-lite: 0.4.24
+ on-finished: 2.4.1
+ qs: 6.14.2
+ raw-body: 2.5.3
+ type-is: 1.6.18
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ bonjour-service@1.3.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ multicast-dns: 7.2.5
+
boolbase@1.0.0: {}
brace-expansion@1.1.12:
@@ -6010,7 +11750,7 @@ snapshots:
brace-expansion@5.0.2:
dependencies:
- balanced-match: 4.0.3
+ balanced-match: 4.0.2
braces@3.0.3:
dependencies:
@@ -6018,21 +11758,44 @@ snapshots:
browserslist@4.28.1:
dependencies:
- baseline-browser-mapping: 2.10.0
- caniuse-lite: 1.0.30001770
- electron-to-chromium: 1.5.302
+ baseline-browser-mapping: 2.9.19
+ caniuse-lite: 1.0.30001769
+ electron-to-chromium: 1.5.286
node-releases: 2.0.27
update-browserslist-db: 1.2.3(browserslist@4.28.1)
+ buffer-from@1.1.2: {}
+
buffer@5.7.1:
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
+ bundle-name@4.1.0:
+ dependencies:
+ run-applescript: 7.1.0
+
bytes-iec@3.1.1: {}
+ bytes@3.1.2: {}
+
cac@6.7.14: {}
+ cacache@19.0.1:
+ dependencies:
+ '@npmcli/fs': 4.0.0
+ fs-minipass: 3.0.3
+ glob: 10.5.0
+ lru-cache: 10.4.3
+ minipass: 7.1.3
+ minipass-collect: 2.0.1
+ minipass-flush: 1.0.5
+ minipass-pipeline: 1.2.4
+ p-map: 7.0.4
+ ssri: 12.0.0
+ tar: 7.5.9
+ unique-filename: 4.0.0
+
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
@@ -6052,7 +11815,7 @@ snapshots:
callsites@3.1.0: {}
- caniuse-lite@1.0.30001770: {}
+ caniuse-lite@1.0.30001769: {}
chai@6.2.2: {}
@@ -6083,23 +11846,68 @@ snapshots:
parse5: 7.3.0
parse5-htmlparser2-tree-adapter: 7.1.0
parse5-parser-stream: 7.1.2
- undici: 7.22.0
+ undici: 7.21.0
whatwg-mimetype: 4.0.0
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ chokidar@4.0.3:
+ dependencies:
+ readdirp: 4.1.2
+
+ chownr@2.0.0: {}
+
+ chownr@3.0.0: {}
+
+ chrome-trace-event@1.0.4: {}
+
ci-info@3.9.0: {}
cli-cursor@3.1.0:
dependencies:
restore-cursor: 3.1.0
+ cli-cursor@5.0.0:
+ dependencies:
+ restore-cursor: 5.1.0
+
cli-spinners@2.6.1: {}
+ cli-truncate@4.0.0:
+ dependencies:
+ slice-ansi: 5.0.0
+ string-width: 7.2.0
+
+ cli-width@4.1.0: {}
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
cliui@8.0.1:
dependencies:
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
+ clone-deep@4.0.1:
+ dependencies:
+ is-plain-object: 2.0.4
+ kind-of: 6.0.3
+ shallow-clone: 3.0.1
+
clone@1.0.4: {}
clsx@2.1.1: {}
@@ -6110,24 +11918,116 @@ snapshots:
color-name@1.1.4: {}
+ colorette@2.0.20: {}
+
combined-stream@1.0.8:
dependencies:
delayed-stream: 1.0.0
+ commander@2.20.3: {}
+
comment-parser@1.4.5: {}
+ common-path-prefix@3.0.0: {}
+
compare-versions@6.1.1: {}
+ compressible@2.0.18:
+ dependencies:
+ mime-db: 1.52.0
+
+ compression@1.8.1:
+ dependencies:
+ bytes: 3.1.2
+ compressible: 2.0.18
+ debug: 2.6.9
+ negotiator: 0.6.4
+ on-headers: 1.1.0
+ safe-buffer: 5.2.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
concat-map@0.0.1: {}
+ connect-history-api-fallback@2.0.0: {}
+
+ connect@3.7.0:
+ dependencies:
+ debug: 2.6.9
+ finalhandler: 1.1.2
+ parseurl: 1.3.3
+ utils-merge: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ content-disposition@0.5.4:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ content-type@1.0.5: {}
+
+ convert-source-map@1.9.0: {}
+
convert-source-map@2.0.0: {}
+ cookie-signature@1.0.7: {}
+
+ cookie@0.7.2: {}
+
+ copy-anything@2.0.6:
+ dependencies:
+ is-what: 3.14.1
+
+ copy-webpack-plugin@12.0.2(webpack@5.105.0(esbuild@0.25.4)):
+ dependencies:
+ fast-glob: 3.3.3
+ glob-parent: 6.0.2
+ globby: 14.1.0
+ normalize-path: 3.0.0
+ schema-utils: 4.3.3
+ serialize-javascript: 6.0.2
+ webpack: 5.105.0(esbuild@0.25.4)
+
+ core-js-compat@3.48.0:
+ dependencies:
+ browserslist: 4.28.1
+
+ core-util-is@1.0.3: {}
+
+ cors@2.8.6:
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+
+ cosmiconfig@9.0.0(typescript@5.7.3):
+ dependencies:
+ env-paths: 2.2.1
+ import-fresh: 3.3.1
+ js-yaml: 4.1.1
+ parse-json: 5.2.0
+ optionalDependencies:
+ typescript: 5.7.3
+
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
+ css-loader@7.1.2(webpack@5.105.0(esbuild@0.25.4)):
+ dependencies:
+ icss-utils: 5.1.0(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-modules-extract-imports: 3.1.0(postcss@8.5.6)
+ postcss-modules-local-by-default: 4.2.0(postcss@8.5.6)
+ postcss-modules-scope: 3.2.1(postcss@8.5.6)
+ postcss-modules-values: 4.0.0(postcss@8.5.6)
+ postcss-value-parser: 4.2.0
+ semver: 7.7.4
+ optionalDependencies:
+ webpack: 5.105.0(esbuild@0.25.4)
+
css-select@5.2.2:
dependencies:
boolbase: 1.0.0
@@ -6140,10 +12040,20 @@ snapshots:
css.escape@1.5.1: {}
+ cssesc@3.0.0: {}
+
csstype@3.2.3: {}
+ custom-event@1.0.1: {}
+
dataloader@1.4.0: {}
+ date-format@4.0.14: {}
+
+ debug@2.6.9:
+ dependencies:
+ ms: 2.0.0
+
debug@4.4.3:
dependencies:
ms: 2.1.3
@@ -6171,6 +12081,13 @@ snapshots:
deep-is@0.1.4: {}
+ default-browser-id@5.0.1: {}
+
+ default-browser@5.5.0:
+ dependencies:
+ bundle-name: 4.1.0
+ default-browser-id: 5.0.1
+
defaults@1.0.4:
dependencies:
clone: 1.0.4
@@ -6183,6 +12100,8 @@ snapshots:
define-lazy-prop@2.0.0: {}
+ define-lazy-prop@3.0.0: {}
+
define-properties@1.2.1:
dependencies:
define-data-property: 1.1.4
@@ -6193,20 +12112,44 @@ snapshots:
delayed-stream@1.0.0: {}
+ depd@1.1.2: {}
+
+ depd@2.0.0: {}
+
dequal@2.0.3: {}
+ destroy@1.2.0: {}
+
detect-indent@6.1.0: {}
- devalue@5.6.3: {}
+ detect-libc@2.1.2:
+ optional: true
+
+ detect-node@2.1.0: {}
+
+ devalue@5.6.2: {}
+
+ di@0.0.1: {}
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
+ dns-packet@5.6.1:
+ dependencies:
+ '@leichtgewicht/ip-codec': 2.0.5
+
dom-accessibility-api@0.5.16: {}
dom-accessibility-api@0.6.3: {}
+ dom-serialize@2.2.1:
+ dependencies:
+ custom-event: 1.0.1
+ ent: 2.2.2
+ extend: 3.0.2
+ void-elements: 2.0.1
+
dom-serializer@2.0.0:
dependencies:
domelementtype: 2.3.0
@@ -6233,9 +12176,9 @@ snapshots:
dotenv@16.6.1: {}
- dts-resolver@2.1.3(oxc-resolver@11.18.0):
+ dts-resolver@2.1.3(oxc-resolver@11.17.1):
optionalDependencies:
- oxc-resolver: 11.18.0
+ oxc-resolver: 11.17.1
dunder-proto@1.0.1:
dependencies:
@@ -6243,25 +12186,62 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
+ eastasianwidth@0.2.0: {}
+
+ ee-first@1.1.1: {}
+
ejs@3.1.10:
dependencies:
jake: 10.9.4
- electron-to-chromium@1.5.302: {}
+ electron-to-chromium@1.5.286: {}
+
+ emoji-regex@10.6.0: {}
emoji-regex@8.0.0: {}
+ emoji-regex@9.2.2: {}
+
+ emojis-list@3.0.0: {}
+
empathic@2.0.0: {}
+ encodeurl@1.0.2: {}
+
+ encodeurl@2.0.0: {}
+
encoding-sniffer@0.2.1:
dependencies:
iconv-lite: 0.6.3
whatwg-encoding: 3.1.1
+ encoding@0.1.13:
+ dependencies:
+ iconv-lite: 0.6.3
+ optional: true
+
end-of-stream@1.4.5:
dependencies:
once: 1.4.0
+ engine.io-parser@5.2.3: {}
+
+ engine.io@6.6.5:
+ dependencies:
+ '@types/cors': 2.8.19
+ '@types/node': 25.3.0
+ accepts: 1.3.8
+ base64id: 2.0.0
+ cookie: 0.7.2
+ cors: 2.8.6
+ debug: 4.4.3
+ engine.io-parser: 5.2.3
+ ws: 8.18.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
enhanced-resolve@5.19.0:
dependencies:
graceful-fs: 4.2.11
@@ -6276,12 +12256,34 @@ snapshots:
ansi-colors: 4.1.3
strip-ansi: 6.0.1
+ ent@2.2.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ punycode: 1.4.1
+ safe-regex-test: 1.1.0
+
entities@4.5.0: {}
entities@6.0.1: {}
entities@7.0.1: {}
+ env-paths@2.2.1: {}
+
+ environment@1.1.0: {}
+
+ err-code@2.0.3: {}
+
+ errno@0.1.8:
+ dependencies:
+ prr: 1.0.1
+ optional: true
+
+ error-ex@1.3.4:
+ dependencies:
+ is-arrayish: 0.2.1
+
es-define-property@1.0.1: {}
es-errors@1.3.0: {}
@@ -6300,6 +12302,8 @@ snapshots:
es-module-lexer@1.7.0: {}
+ es-module-lexer@2.0.0: {}
+
es-object-atoms@1.1.1:
dependencies:
es-errors: 1.3.0
@@ -6311,6 +12315,36 @@ snapshots:
has-tostringtag: 1.0.2
hasown: 2.0.2
+ esbuild-wasm@0.25.4: {}
+
+ esbuild@0.25.4:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.25.4
+ '@esbuild/android-arm': 0.25.4
+ '@esbuild/android-arm64': 0.25.4
+ '@esbuild/android-x64': 0.25.4
+ '@esbuild/darwin-arm64': 0.25.4
+ '@esbuild/darwin-x64': 0.25.4
+ '@esbuild/freebsd-arm64': 0.25.4
+ '@esbuild/freebsd-x64': 0.25.4
+ '@esbuild/linux-arm': 0.25.4
+ '@esbuild/linux-arm64': 0.25.4
+ '@esbuild/linux-ia32': 0.25.4
+ '@esbuild/linux-loong64': 0.25.4
+ '@esbuild/linux-mips64el': 0.25.4
+ '@esbuild/linux-ppc64': 0.25.4
+ '@esbuild/linux-riscv64': 0.25.4
+ '@esbuild/linux-s390x': 0.25.4
+ '@esbuild/linux-x64': 0.25.4
+ '@esbuild/netbsd-arm64': 0.25.4
+ '@esbuild/netbsd-x64': 0.25.4
+ '@esbuild/openbsd-arm64': 0.25.4
+ '@esbuild/openbsd-x64': 0.25.4
+ '@esbuild/sunos-x64': 0.25.4
+ '@esbuild/win32-arm64': 0.25.4
+ '@esbuild/win32-ia32': 0.25.4
+ '@esbuild/win32-x64': 0.25.4
+
esbuild@0.27.3:
optionalDependencies:
'@esbuild/aix-ppc64': 0.27.3
@@ -6342,13 +12376,15 @@ snapshots:
escalade@3.2.0: {}
+ escape-html@1.0.3: {}
+
escape-string-regexp@1.0.5: {}
escape-string-regexp@4.0.0: {}
- eslint-compat-utils@0.5.1(eslint@9.39.3(jiti@2.6.1)):
+ eslint-compat-utils@0.5.1(eslint@9.39.2(jiti@2.6.1)):
dependencies:
- eslint: 9.39.3(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
semver: 7.7.4
eslint-import-context@0.1.9(unrs-resolver@1.11.1):
@@ -6358,36 +12394,36 @@ snapshots:
optionalDependencies:
unrs-resolver: 1.11.1
- eslint-plugin-es-x@7.8.0(eslint@9.39.3(jiti@2.6.1)):
+ eslint-plugin-es-x@7.8.0(eslint@9.39.2(jiti@2.6.1)):
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1))
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.2
- eslint: 9.39.3(jiti@2.6.1)
- eslint-compat-utils: 0.5.1(eslint@9.39.3(jiti@2.6.1))
+ eslint: 9.39.2(jiti@2.6.1)
+ eslint-compat-utils: 0.5.1(eslint@9.39.2(jiti@2.6.1))
- eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1)):
+ eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)):
dependencies:
- '@typescript-eslint/types': 8.56.0
+ '@typescript-eslint/types': 8.55.0
comment-parser: 1.4.5
debug: 4.4.3
- eslint: 9.39.3(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
eslint-import-context: 0.1.9(unrs-resolver@1.11.1)
is-glob: 4.0.3
- minimatch: 10.2.2
+ minimatch: 10.2.0
semver: 7.7.4
stable-hash-x: 0.2.0
unrs-resolver: 1.11.1
optionalDependencies:
- '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
transitivePeerDependencies:
- supports-color
- eslint-plugin-n@17.24.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3):
+ eslint-plugin-n@17.24.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3):
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1))
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
enhanced-resolve: 5.19.0
- eslint: 9.39.3(jiti@2.6.1)
- eslint-plugin-es-x: 7.8.0(eslint@9.39.3(jiti@2.6.1))
+ eslint: 9.39.2(jiti@2.6.1)
+ eslint-plugin-es-x: 7.8.0(eslint@9.39.2(jiti@2.6.1))
get-tsconfig: 4.13.6
globals: 15.15.0
globrex: 0.1.2
@@ -6397,147 +12433,145 @@ snapshots:
transitivePeerDependencies:
- typescript
- eslint-plugin-react-compiler@19.1.0-rc.2(eslint@9.39.3(jiti@2.6.1)):
+ eslint-plugin-react-compiler@19.1.0-rc.2(eslint@9.39.2(jiti@2.6.1)):
dependencies:
'@babel/core': 7.29.0
'@babel/parser': 7.29.0
'@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.29.0)
- eslint: 9.39.3(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
hermes-parser: 0.25.1
zod: 3.25.76
zod-validation-error: 3.5.4(zod@3.25.76)
transitivePeerDependencies:
- supports-color
- eslint-plugin-react-dom@2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3):
+ eslint-plugin-react-dom@2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3):
dependencies:
- '@eslint-react/ast': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@eslint-react/core': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/ast': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/core': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
'@eslint-react/eff': 2.13.0
- '@eslint-react/shared': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@eslint-react/var': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.56.0
- '@typescript-eslint/types': 8.56.0
- '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/shared': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/var': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.55.0
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
compare-versions: 6.1.1
- eslint: 9.39.3(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
ts-pattern: 5.9.0
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- eslint-plugin-react-hooks-extra@2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3):
+ eslint-plugin-react-hooks-extra@2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3):
dependencies:
- '@eslint-react/ast': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@eslint-react/core': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/ast': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/core': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
'@eslint-react/eff': 2.13.0
- '@eslint-react/shared': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@eslint-react/var': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.56.0
- '@typescript-eslint/type-utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/types': 8.56.0
- '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.39.3(jiti@2.6.1)
+ '@eslint-react/shared': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/var': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.55.0
+ '@typescript-eslint/type-utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.2(jiti@2.6.1)
ts-pattern: 5.9.0
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- eslint-plugin-react-hooks@7.0.1(eslint@9.39.3(jiti@2.6.1)):
+ eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@2.6.1)):
dependencies:
'@babel/core': 7.29.0
'@babel/parser': 7.29.0
- eslint: 9.39.3(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
hermes-parser: 0.25.1
zod: 4.3.6
zod-validation-error: 4.0.2(zod@4.3.6)
transitivePeerDependencies:
- supports-color
- eslint-plugin-react-naming-convention@2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3):
+ eslint-plugin-react-naming-convention@2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3):
dependencies:
- '@eslint-react/ast': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@eslint-react/core': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/ast': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/core': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
'@eslint-react/eff': 2.13.0
- '@eslint-react/shared': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@eslint-react/var': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.56.0
- '@typescript-eslint/type-utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/types': 8.56.0
- '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/shared': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/var': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.55.0
+ '@typescript-eslint/type-utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
compare-versions: 6.1.1
- eslint: 9.39.3(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
string-ts: 2.3.1
ts-pattern: 5.9.0
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- eslint-plugin-react-rsc@2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3):
+ eslint-plugin-react-rsc@2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3):
dependencies:
- '@eslint-react/ast': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@eslint-react/shared': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@eslint-react/var': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/types': 8.56.0
- '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.39.3(jiti@2.6.1)
+ '@eslint-react/ast': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/shared': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/var': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.2(jiti@2.6.1)
ts-pattern: 5.9.0
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- eslint-plugin-react-web-api@2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3):
+ eslint-plugin-react-web-api@2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3):
dependencies:
- '@eslint-react/ast': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@eslint-react/core': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/ast': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/core': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
'@eslint-react/eff': 2.13.0
- '@eslint-react/shared': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@eslint-react/var': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.56.0
- '@typescript-eslint/types': 8.56.0
- '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/shared': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/var': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.55.0
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
birecord: 0.1.1
- eslint: 9.39.3(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
ts-pattern: 5.9.0
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- eslint-plugin-react-x@2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3):
+ eslint-plugin-react-x@2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3):
dependencies:
- '@eslint-react/ast': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@eslint-react/core': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/ast': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/core': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
'@eslint-react/eff': 2.13.0
- '@eslint-react/shared': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@eslint-react/var': 2.13.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.56.0
- '@typescript-eslint/type-utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/types': 8.56.0
- '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/shared': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@eslint-react/var': 2.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.55.0
+ '@typescript-eslint/type-utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
compare-versions: 6.1.1
- eslint: 9.39.3(jiti@2.6.1)
- is-immutable-type: 5.0.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.2(jiti@2.6.1)
+ is-immutable-type: 5.0.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
ts-api-utils: 2.4.0(typescript@5.9.3)
ts-pattern: 5.9.0
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1)):
+ eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)):
dependencies:
- eslint: 9.39.3(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
optionalDependencies:
- '@typescript-eslint/eslint-plugin': 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/eslint-plugin': 8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
- eslint-scope@8.4.0:
+ eslint-scope@5.1.1:
dependencies:
esrecurse: 4.3.0
- estraverse: 5.3.0
+ estraverse: 4.3.0
- eslint-scope@9.1.1:
+ eslint-scope@8.4.0:
dependencies:
- '@types/esrecurse': 4.3.1
- '@types/estree': 1.0.8
esrecurse: 4.3.0
estraverse: 5.3.0
@@ -6545,23 +12579,21 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
- eslint-visitor-keys@5.0.1: {}
-
- eslint@9.39.3(jiti@2.6.1):
+ eslint@9.39.2(jiti@2.6.1):
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1))
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.21.1
'@eslint/config-helpers': 0.4.2
'@eslint/core': 0.17.0
'@eslint/eslintrc': 3.3.3
- '@eslint/js': 9.39.3
+ '@eslint/js': 9.39.2
'@eslint/plugin-kit': 0.4.1
'@humanfs/node': 0.16.7
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.3
'@types/estree': 1.0.8
- ajv: 6.14.0
+ ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.6
debug: 4.4.3
@@ -6592,16 +12624,10 @@ snapshots:
espree@10.4.0:
dependencies:
- acorn: 8.16.0
- acorn-jsx: 5.3.2(acorn@8.16.0)
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 4.2.1
- espree@11.1.1:
- dependencies:
- acorn: 8.16.0
- acorn-jsx: 5.3.2(acorn@8.16.0)
- eslint-visitor-keys: 5.0.1
-
esprima@4.0.1: {}
esquery@1.7.0:
@@ -6616,6 +12642,8 @@ snapshots:
dependencies:
estraverse: 5.3.0
+ estraverse@4.3.0: {}
+
estraverse@5.3.0: {}
estree-walker@2.0.2: {}
@@ -6626,8 +12654,56 @@ snapshots:
esutils@2.0.3: {}
+ etag@1.8.1: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.4: {}
+
+ events@3.3.0: {}
+
expect-type@1.3.0: {}
+ exponential-backoff@3.1.3: {}
+
+ express@4.22.1:
+ dependencies:
+ accepts: 1.3.8
+ array-flatten: 1.1.1
+ body-parser: 1.20.4
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookie: 0.7.2
+ cookie-signature: 1.0.7
+ debug: 2.6.9
+ depd: 2.0.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.3.2
+ fresh: 0.5.2
+ http-errors: 2.0.1
+ merge-descriptors: 1.0.3
+ methods: 1.1.2
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.12
+ proxy-addr: 2.0.7
+ qs: 6.14.2
+ range-parser: 1.2.1
+ safe-buffer: 5.2.1
+ send: 0.19.2
+ serve-static: 1.16.3
+ setprototypeof: 1.2.0
+ statuses: 2.0.2
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ extend@3.0.2: {}
+
extendable-error@0.1.7: {}
fast-deep-equal@3.1.3: {}
@@ -6644,10 +12720,16 @@ snapshots:
fast-levenshtein@2.0.6: {}
+ fast-uri@3.1.0: {}
+
fastq@1.20.1:
dependencies:
reusify: 1.1.0
+ faye-websocket@0.11.4:
+ dependencies:
+ websocket-driver: 0.7.4
+
fd-package-json@2.0.0:
dependencies:
walk-up-path: 4.0.0
@@ -6672,6 +12754,35 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
+ finalhandler@1.1.2:
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ on-finished: 2.3.0
+ parseurl: 1.3.3
+ statuses: 1.5.0
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ finalhandler@1.3.2:
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.2
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ find-cache-dir@4.0.0:
+ dependencies:
+ common-path-prefix: 3.0.0
+ pkg-dir: 7.0.0
+
find-up@4.1.0:
dependencies:
locate-path: 5.0.0
@@ -6682,6 +12793,11 @@ snapshots:
locate-path: 6.0.0
path-exists: 4.0.0
+ find-up@6.3.0:
+ dependencies:
+ locate-path: 7.2.0
+ path-exists: 5.0.0
+
flat-cache@4.0.1:
dependencies:
flatted: 3.3.3
@@ -6691,12 +12807,19 @@ snapshots:
flatted@3.3.3: {}
- follow-redirects@1.15.11: {}
+ follow-redirects@1.15.11(debug@4.4.3):
+ optionalDependencies:
+ debug: 4.4.3
for-each@0.3.5:
dependencies:
is-callable: 1.2.7
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
form-data@4.0.5:
dependencies:
asynckit: 0.4.0
@@ -6709,6 +12832,12 @@ snapshots:
dependencies:
fd-package-json: 2.0.0
+ forwarded@0.2.0: {}
+
+ fraction.js@4.3.7: {}
+
+ fresh@0.5.2: {}
+
front-matter@4.0.2:
dependencies:
js-yaml: 3.14.2
@@ -6727,6 +12856,16 @@ snapshots:
jsonfile: 4.0.0
universalify: 0.1.2
+ fs-minipass@2.1.0:
+ dependencies:
+ minipass: 3.3.6
+
+ fs-minipass@3.0.3:
+ dependencies:
+ minipass: 7.1.3
+
+ fs.realpath@1.0.0: {}
+
fsevents@2.3.3:
optional: true
@@ -6738,6 +12877,8 @@ snapshots:
get-caller-file@2.0.5: {}
+ get-east-asian-width@1.5.0: {}
+
get-intrinsic@1.3.0:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -6766,7 +12907,31 @@ snapshots:
glob-parent@6.0.2:
dependencies:
- is-glob: 4.0.3
+ is-glob: 4.0.3
+
+ glob-to-regex.js@1.2.0(tslib@2.8.1):
+ dependencies:
+ tslib: 2.8.1
+
+ glob-to-regexp@0.4.1: {}
+
+ glob@10.5.0:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.3
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
globals@14.0.0: {}
@@ -6783,6 +12948,15 @@ snapshots:
merge2: 1.4.1
slash: 3.0.0
+ globby@14.1.0:
+ dependencies:
+ '@sindresorhus/merge-streams': 2.3.0
+ fast-glob: 3.3.3
+ ignore: 7.0.5
+ path-type: 6.0.0
+ slash: 5.1.0
+ unicorn-magic: 0.3.0
+
globrex@0.1.2: {}
goober@2.1.18(csstype@3.2.3):
@@ -6793,6 +12967,8 @@ snapshots:
graceful-fs@4.2.11: {}
+ handle-thing@2.0.1: {}
+
happy-dom@20.7.0:
dependencies:
'@types/node': 25.3.0
@@ -6833,8 +13009,21 @@ snapshots:
hookable@6.0.1: {}
+ hosted-git-info@8.1.0:
+ dependencies:
+ lru-cache: 10.4.3
+
+ hpack.js@2.1.6:
+ dependencies:
+ inherits: 2.0.4
+ obuf: 1.1.2
+ readable-stream: 2.3.8
+ wbuf: 1.7.3
+
html-entities@2.3.3: {}
+ html-escaper@2.0.2: {}
+
html-link-extractor@1.0.5:
dependencies:
cheerio: 1.2.0
@@ -6846,8 +13035,81 @@ snapshots:
domutils: 3.2.2
entities: 7.0.1
+ http-cache-semantics@4.2.0: {}
+
+ http-deceiver@1.2.7: {}
+
+ http-errors@1.8.1:
+ dependencies:
+ depd: 1.1.2
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 1.5.0
+ toidentifier: 1.0.1
+
+ http-errors@2.0.1:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.2
+ toidentifier: 1.0.1
+
+ http-parser-js@0.5.10: {}
+
+ http-proxy-agent@7.0.2:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ http-proxy-middleware@2.0.9(@types/express@4.17.25):
+ dependencies:
+ '@types/http-proxy': 1.17.17
+ http-proxy: 1.18.1(debug@4.4.3)
+ is-glob: 4.0.3
+ is-plain-obj: 3.0.0
+ micromatch: 4.0.8
+ optionalDependencies:
+ '@types/express': 4.17.25
+ transitivePeerDependencies:
+ - debug
+
+ http-proxy-middleware@3.0.5:
+ dependencies:
+ '@types/http-proxy': 1.17.17
+ debug: 4.4.3
+ http-proxy: 1.18.1(debug@4.4.3)
+ is-glob: 4.0.3
+ is-plain-object: 5.0.0
+ micromatch: 4.0.8
+ transitivePeerDependencies:
+ - supports-color
+
+ http-proxy@1.18.1(debug@4.4.3):
+ dependencies:
+ eventemitter3: 4.0.7
+ follow-redirects: 1.15.11(debug@4.4.3)
+ requires-port: 1.0.0
+ transitivePeerDependencies:
+ - debug
+
+ https-proxy-agent@7.0.6:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
human-id@4.1.3: {}
+ hyperdyperid@1.2.0: {}
+
+ iconv-lite@0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+
iconv-lite@0.6.3:
dependencies:
safer-buffer: 2.1.2
@@ -6856,12 +13118,25 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
+ icss-utils@5.1.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
ieee754@1.2.1: {}
+ ignore-walk@7.0.0:
+ dependencies:
+ minimatch: 9.0.5
+
ignore@5.3.2: {}
ignore@7.0.5: {}
+ image-size@0.5.5:
+ optional: true
+
+ immutable@5.1.4: {}
+
import-fresh@3.3.1:
dependencies:
parent-module: 1.0.1
@@ -6873,14 +13148,27 @@ snapshots:
indent-string@4.0.0: {}
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
inherits@2.0.4: {}
+ ini@5.0.0: {}
+
internal-slot@1.1.0:
dependencies:
es-errors: 1.3.0
hasown: 2.0.2
side-channel: 1.1.0
+ ip-address@10.1.0: {}
+
+ ipaddr.js@1.9.1: {}
+
+ ipaddr.js@2.3.0: {}
+
is-arguments@1.2.0:
dependencies:
call-bound: 1.0.4
@@ -6892,10 +13180,16 @@ snapshots:
call-bound: 1.0.4
get-intrinsic: 1.3.0
+ is-arrayish@0.2.1: {}
+
is-bigint@1.1.0:
dependencies:
has-bigints: 1.1.0
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
is-boolean-object@1.2.2:
dependencies:
call-bound: 1.0.4
@@ -6903,6 +13197,10 @@ snapshots:
is-callable@1.2.7: {}
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
is-date-object@1.1.0:
dependencies:
call-bound: 1.0.4
@@ -6910,28 +13208,42 @@ snapshots:
is-docker@2.2.1: {}
+ is-docker@3.0.0: {}
+
is-extglob@2.1.1: {}
is-fullwidth-code-point@3.0.0: {}
+ is-fullwidth-code-point@4.0.0: {}
+
+ is-fullwidth-code-point@5.1.0:
+ dependencies:
+ get-east-asian-width: 1.5.0
+
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
- is-immutable-type@5.0.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3):
+ is-immutable-type@5.0.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3):
dependencies:
- '@typescript-eslint/type-utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.39.3(jiti@2.6.1)
+ '@typescript-eslint/type-utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.2(jiti@2.6.1)
ts-api-utils: 2.4.0(typescript@5.9.3)
ts-declaration-location: 1.0.7(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
+ is-inside-container@1.0.0:
+ dependencies:
+ is-docker: 3.0.0
+
is-interactive@1.0.0: {}
is-map@2.0.3: {}
+ is-network-error@1.3.0: {}
+
is-number-object@1.1.1:
dependencies:
call-bound: 1.0.4
@@ -6939,6 +13251,14 @@ snapshots:
is-number@7.0.0: {}
+ is-plain-obj@3.0.0: {}
+
+ is-plain-object@2.0.4:
+ dependencies:
+ isobject: 3.0.1
+
+ is-plain-object@5.0.0: {}
+
is-reference@3.0.3:
dependencies:
'@types/estree': 1.0.8
@@ -6980,6 +13300,8 @@ snapshots:
call-bound: 1.0.4
get-intrinsic: 1.3.0
+ is-what@3.14.1: {}
+
is-what@4.1.16: {}
is-windows@1.0.2: {}
@@ -6988,16 +13310,83 @@ snapshots:
dependencies:
is-docker: 2.2.1
+ is-wsl@3.1.1:
+ dependencies:
+ is-inside-container: 1.0.0
+
+ isarray@1.0.0: {}
+
isarray@2.0.5: {}
+ isbinaryfile@4.0.10: {}
+
isexe@2.0.0: {}
+ isexe@3.1.5: {}
+
+ isobject@3.0.1: {}
+
+ istanbul-lib-coverage@3.2.2: {}
+
+ istanbul-lib-instrument@5.2.1:
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/parser': 7.29.0
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-lib-instrument@6.0.3:
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/parser': 7.29.0
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 7.7.4
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-lib-report@3.0.1:
+ dependencies:
+ istanbul-lib-coverage: 3.2.2
+ make-dir: 4.0.0
+ supports-color: 7.2.0
+
+ istanbul-lib-source-maps@4.0.1:
+ dependencies:
+ debug: 4.4.3
+ istanbul-lib-coverage: 3.2.2
+ source-map: 0.6.1
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-reports@3.2.0:
+ dependencies:
+ html-escaper: 2.0.2
+ istanbul-lib-report: 3.0.1
+
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ jackspeak@4.2.3:
+ dependencies:
+ '@isaacs/cliui': 9.0.0
+
jake@10.9.4:
dependencies:
async: 3.2.6
filelist: 1.0.4
picocolors: 1.1.1
+ jasmine-core@4.6.1: {}
+
+ jasmine-core@5.6.0: {}
+
jest-diff@30.2.0:
dependencies:
'@jest/diff-sequences': 30.0.1
@@ -7005,6 +13394,14 @@ snapshots:
chalk: 4.1.2
pretty-format: 30.2.0
+ jest-worker@27.5.1:
+ dependencies:
+ '@types/node': 25.3.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ jiti@1.21.7: {}
+
jiti@2.6.1: {}
js-tokens@4.0.0: {}
@@ -7022,22 +13419,96 @@ snapshots:
json-buffer@3.0.1: {}
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-parse-even-better-errors@4.0.0: {}
+
json-schema-traverse@0.4.1: {}
+ json-schema-traverse@1.0.0: {}
+
json-stable-stringify-without-jsonify@1.0.1: {}
json5@2.2.3: {}
jsonc-parser@3.2.0: {}
+ jsonc-parser@3.3.1: {}
+
jsonfile@4.0.0:
optionalDependencies:
graceful-fs: 4.2.11
+ jsonparse@1.3.1: {}
+
+ karma-chrome-launcher@3.2.0:
+ dependencies:
+ which: 1.3.1
+
+ karma-coverage@2.2.1:
+ dependencies:
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-instrument: 5.2.1
+ istanbul-lib-report: 3.0.1
+ istanbul-lib-source-maps: 4.0.1
+ istanbul-reports: 3.2.0
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ karma-jasmine-html-reporter@2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4):
+ dependencies:
+ jasmine-core: 5.6.0
+ karma: 6.4.4
+ karma-jasmine: 5.1.0(karma@6.4.4)
+
+ karma-jasmine@5.1.0(karma@6.4.4):
+ dependencies:
+ jasmine-core: 4.6.1
+ karma: 6.4.4
+
+ karma-source-map-support@1.4.0:
+ dependencies:
+ source-map-support: 0.5.21
+
+ karma@6.4.4:
+ dependencies:
+ '@colors/colors': 1.5.0
+ body-parser: 1.20.4
+ braces: 3.0.3
+ chokidar: 3.6.0
+ connect: 3.7.0
+ di: 0.0.1
+ dom-serialize: 2.2.1
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ http-proxy: 1.18.1(debug@4.4.3)
+ isbinaryfile: 4.0.10
+ lodash: 4.17.23
+ log4js: 6.9.1
+ mime: 2.6.0
+ minimatch: 3.1.2
+ mkdirp: 0.5.6
+ qjobs: 1.2.0
+ range-parser: 1.2.1
+ rimraf: 3.0.2
+ socket.io: 4.8.3
+ source-map: 0.6.1
+ tmp: 0.2.5
+ ua-parser-js: 0.7.41
+ yargs: 16.2.0
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+
keyv@4.5.4:
dependencies:
json-buffer: 3.0.1
+ kind-of@6.0.3: {}
+
knip@5.85.0(@types/node@25.3.0)(typescript@5.9.3):
dependencies:
'@nodelib/fs.walk': 1.2.8
@@ -7047,7 +13518,7 @@ snapshots:
jiti: 2.6.1
js-yaml: 4.1.1
minimist: 1.2.8
- oxc-resolver: 11.18.0
+ oxc-resolver: 11.17.1
picocolors: 1.1.1
picomatch: 4.0.3
smol-toml: 1.6.0
@@ -7057,19 +13528,87 @@ snapshots:
kolorist@1.8.0: {}
+ launch-editor@2.13.0:
+ dependencies:
+ picocolors: 1.1.1
+ shell-quote: 1.8.3
+
+ less-loader@12.2.0(less@4.2.2)(webpack@5.105.0(esbuild@0.25.4)):
+ dependencies:
+ less: 4.2.2
+ optionalDependencies:
+ webpack: 5.105.0(esbuild@0.25.4)
+
+ less@4.2.2:
+ dependencies:
+ copy-anything: 2.0.6
+ parse-node-version: 1.0.1
+ tslib: 2.8.1
+ optionalDependencies:
+ errno: 0.1.8
+ graceful-fs: 4.2.11
+ image-size: 0.5.5
+ make-dir: 2.1.0
+ mime: 1.6.0
+ needle: 3.3.1
+ source-map: 0.6.1
+
levn@0.4.1:
dependencies:
prelude-ls: 1.2.1
type-check: 0.4.0
+ license-webpack-plugin@4.0.2(webpack@5.105.0(esbuild@0.25.4)):
+ dependencies:
+ webpack-sources: 3.3.4
+ optionalDependencies:
+ webpack: 5.105.0(esbuild@0.25.4)
+
lilconfig@3.1.3: {}
+ lines-and-columns@1.2.4: {}
+
lines-and-columns@2.0.3: {}
linkify-it@5.0.0:
dependencies:
uc.micro: 2.1.0
+ listr2@8.2.5:
+ dependencies:
+ cli-truncate: 4.0.0
+ colorette: 2.0.20
+ eventemitter3: 5.0.4
+ log-update: 6.1.0
+ rfdc: 1.4.1
+ wrap-ansi: 9.0.2
+
+ lmdb@3.2.6:
+ dependencies:
+ msgpackr: 1.11.8
+ node-addon-api: 6.1.0
+ node-gyp-build-optional-packages: 5.2.2
+ ordered-binary: 1.6.1
+ weak-lru-cache: 1.2.2
+ optionalDependencies:
+ '@lmdb/lmdb-darwin-arm64': 3.2.6
+ '@lmdb/lmdb-darwin-x64': 3.2.6
+ '@lmdb/lmdb-linux-arm': 3.2.6
+ '@lmdb/lmdb-linux-arm64': 3.2.6
+ '@lmdb/lmdb-linux-x64': 3.2.6
+ '@lmdb/lmdb-win32-x64': 3.2.6
+ optional: true
+
+ loader-runner@4.3.1: {}
+
+ loader-utils@2.0.4:
+ dependencies:
+ big.js: 5.2.2
+ emojis-list: 3.0.0
+ json5: 2.2.3
+
+ loader-utils@3.3.1: {}
+
locate-character@3.0.0: {}
locate-path@5.0.0:
@@ -7080,15 +13619,43 @@ snapshots:
dependencies:
p-locate: 5.0.0
+ locate-path@7.2.0:
+ dependencies:
+ p-locate: 6.0.0
+
+ lodash.debounce@4.0.8: {}
+
lodash.merge@4.6.2: {}
lodash.startcase@4.4.0: {}
+ lodash@4.17.23: {}
+
log-symbols@4.1.0:
dependencies:
chalk: 4.1.2
is-unicode-supported: 0.1.0
+ log-update@6.1.0:
+ dependencies:
+ ansi-escapes: 7.3.0
+ cli-cursor: 5.0.0
+ slice-ansi: 7.1.2
+ strip-ansi: 7.1.2
+ wrap-ansi: 9.0.2
+
+ log4js@6.9.1:
+ dependencies:
+ date-format: 4.0.14
+ debug: 4.4.3
+ flatted: 3.3.3
+ rfdc: 1.4.1
+ streamroller: 3.1.5
+ transitivePeerDependencies:
+ - supports-color
+
+ lru-cache@10.4.3: {}
+
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
@@ -7097,10 +13664,40 @@ snapshots:
lz-string@1.5.0: {}
+ magic-string@0.30.17:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
+ make-dir@2.1.0:
+ dependencies:
+ pify: 4.0.1
+ semver: 5.7.2
+ optional: true
+
+ make-dir@4.0.0:
+ dependencies:
+ semver: 7.7.4
+
+ make-fetch-happen@14.0.3:
+ dependencies:
+ '@npmcli/agent': 3.0.0
+ cacache: 19.0.1
+ http-cache-semantics: 4.2.0
+ minipass: 7.1.3
+ minipass-fetch: 4.0.1
+ minipass-flush: 1.0.5
+ minipass-pipeline: 1.2.4
+ negotiator: 1.0.0
+ proc-log: 5.0.0
+ promise-retry: 2.0.1
+ ssri: 12.0.0
+ transitivePeerDependencies:
+ - supports-color
+
markdown-it@14.1.1:
dependencies:
argparse: 2.0.1
@@ -7113,20 +13710,45 @@ snapshots:
markdown-link-extractor@4.0.3:
dependencies:
html-link-extractor: 1.0.5
- marked: 17.0.3
+ marked: 17.0.2
- marked@17.0.3: {}
+ marked@17.0.2: {}
math-intrinsics@1.1.0: {}
mdurl@2.0.0: {}
+ media-typer@0.3.0: {}
+
+ memfs@4.56.10(tslib@2.8.1):
+ dependencies:
+ '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-fsa': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-node': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-to-fsa': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-print': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/fs-snapshot': 4.56.10(tslib@2.8.1)
+ '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1)
+ '@jsonjoy.com/util': 1.9.0(tslib@2.8.1)
+ glob-to-regex.js: 1.2.0(tslib@2.8.1)
+ thingies: 2.5.0(tslib@2.8.1)
+ tree-dump: 1.1.0(tslib@2.8.1)
+ tslib: 2.8.1
+
merge-anything@5.1.7:
dependencies:
is-what: 4.1.16
+ merge-descriptors@1.0.3: {}
+
+ merge-stream@2.0.0: {}
+
merge2@1.4.1: {}
+ methods@1.1.2: {}
+
micromatch@4.0.8:
dependencies:
braces: 3.0.3
@@ -7138,36 +13760,127 @@ snapshots:
dependencies:
mime-db: 1.52.0
- mimic-fn@2.1.0: {}
+ mime@1.6.0: {}
+
+ mime@2.6.0: {}
+
+ mimic-fn@2.1.0: {}
+
+ mimic-function@5.0.1: {}
+
+ min-indent@1.0.1: {}
+
+ mini-css-extract-plugin@2.9.2(webpack@5.105.0(esbuild@0.25.4)):
+ dependencies:
+ schema-utils: 4.3.3
+ tapable: 2.3.0
+ webpack: 5.105.0(esbuild@0.25.4)
+
+ minimalistic-assert@1.0.1: {}
+
+ minimatch@10.1.1:
+ dependencies:
+ '@isaacs/brace-expansion': 5.0.1
+
+ minimatch@10.2.0:
+ dependencies:
+ brace-expansion: 5.0.2
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.12
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimist@1.2.8: {}
+
+ minipass-collect@2.0.1:
+ dependencies:
+ minipass: 7.1.3
+
+ minipass-fetch@4.0.1:
+ dependencies:
+ minipass: 7.1.3
+ minipass-sized: 1.0.3
+ minizlib: 3.1.0
+ optionalDependencies:
+ encoding: 0.1.13
+
+ minipass-flush@1.0.5:
+ dependencies:
+ minipass: 3.3.6
- min-indent@1.0.1: {}
+ minipass-pipeline@1.2.4:
+ dependencies:
+ minipass: 3.3.6
- minimatch@10.1.1:
+ minipass-sized@1.0.3:
dependencies:
- '@isaacs/brace-expansion': 5.0.1
+ minipass: 3.3.6
- minimatch@10.2.2:
+ minipass@3.3.6:
dependencies:
- brace-expansion: 5.0.2
+ yallist: 4.0.0
- minimatch@3.1.2:
+ minipass@5.0.0: {}
+
+ minipass@7.1.3: {}
+
+ minizlib@2.1.2:
dependencies:
- brace-expansion: 1.1.12
+ minipass: 3.3.6
+ yallist: 4.0.0
- minimatch@5.1.6:
+ minizlib@3.1.0:
dependencies:
- brace-expansion: 2.0.2
+ minipass: 7.1.3
- minimatch@9.0.5:
+ mkdirp@0.5.6:
dependencies:
- brace-expansion: 2.0.2
+ minimist: 1.2.8
- minimist@1.2.8: {}
+ mkdirp@1.0.4: {}
mri@1.2.0: {}
+ mrmime@2.0.1: {}
+
+ ms@2.0.0: {}
+
ms@2.1.3: {}
+ msgpackr-extract@3.0.3:
+ dependencies:
+ node-gyp-build-optional-packages: 5.2.2
+ optionalDependencies:
+ '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3
+ optional: true
+
+ msgpackr@1.11.8:
+ optionalDependencies:
+ msgpackr-extract: 3.0.3
+ optional: true
+
+ multicast-dns@7.2.5:
+ dependencies:
+ dns-packet: 5.6.1
+ thunky: 1.1.0
+
+ mute-stream@1.0.0: {}
+
+ mute-stream@2.0.0: {}
+
nanoid@3.3.11: {}
nanoid@5.1.6: {}
@@ -7180,9 +13893,53 @@ snapshots:
natural-compare@1.4.0: {}
- node-fetch@2.7.0:
+ needle@3.3.1:
+ dependencies:
+ iconv-lite: 0.6.3
+ sax: 1.4.4
+ optional: true
+
+ negotiator@0.6.3: {}
+
+ negotiator@0.6.4: {}
+
+ negotiator@1.0.0: {}
+
+ neo-async@2.6.2: {}
+
+ node-addon-api@6.1.0:
+ optional: true
+
+ node-addon-api@7.1.1:
+ optional: true
+
+ node-fetch@2.7.0(encoding@0.1.13):
dependencies:
whatwg-url: 5.0.0
+ optionalDependencies:
+ encoding: 0.1.13
+
+ node-forge@1.3.3: {}
+
+ node-gyp-build-optional-packages@5.2.2:
+ dependencies:
+ detect-libc: 2.1.2
+ optional: true
+
+ node-gyp@11.5.0:
+ dependencies:
+ env-paths: 2.2.1
+ exponential-backoff: 3.1.3
+ graceful-fs: 4.2.11
+ make-fetch-happen: 14.0.3
+ nopt: 8.1.0
+ proc-log: 5.0.0
+ semver: 7.7.4
+ tar: 7.5.9
+ tinyglobby: 0.2.15
+ which: 5.0.0
+ transitivePeerDependencies:
+ - supports-color
node-html-parser@6.1.13:
dependencies:
@@ -7193,6 +13950,55 @@ snapshots:
node-releases@2.0.27: {}
+ nopt@8.1.0:
+ dependencies:
+ abbrev: 3.0.1
+
+ normalize-path@3.0.0: {}
+
+ normalize-range@0.1.2: {}
+
+ npm-bundled@4.0.0:
+ dependencies:
+ npm-normalize-package-bin: 4.0.0
+
+ npm-install-checks@7.1.2:
+ dependencies:
+ semver: 7.7.4
+
+ npm-normalize-package-bin@4.0.0: {}
+
+ npm-package-arg@12.0.2:
+ dependencies:
+ hosted-git-info: 8.1.0
+ proc-log: 5.0.0
+ semver: 7.7.4
+ validate-npm-package-name: 6.0.2
+
+ npm-packlist@9.0.0:
+ dependencies:
+ ignore-walk: 7.0.0
+
+ npm-pick-manifest@10.0.0:
+ dependencies:
+ npm-install-checks: 7.1.2
+ npm-normalize-package-bin: 4.0.0
+ npm-package-arg: 12.0.2
+ semver: 7.7.4
+
+ npm-registry-fetch@18.0.2:
+ dependencies:
+ '@npmcli/redact': 3.2.2
+ jsonparse: 1.3.1
+ make-fetch-happen: 14.0.3
+ minipass: 7.1.3
+ minipass-fetch: 4.0.1
+ minizlib: 3.1.0
+ npm-package-arg: 12.0.2
+ proc-log: 5.0.0
+ transitivePeerDependencies:
+ - supports-color
+
npm-run-path@4.0.1:
dependencies:
path-key: 3.1.1
@@ -7253,6 +14059,8 @@ snapshots:
transitivePeerDependencies:
- debug
+ object-assign@4.1.1: {}
+
object-inspect@1.13.4: {}
object-is@1.1.6:
@@ -7271,8 +14079,20 @@ snapshots:
has-symbols: 1.1.0
object-keys: 1.1.1
+ obuf@1.1.2: {}
+
obug@2.1.1: {}
+ on-finished@2.3.0:
+ dependencies:
+ ee-first: 1.1.1
+
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
+ on-headers@1.1.0: {}
+
once@1.4.0:
dependencies:
wrappy: 1.0.2
@@ -7281,6 +14101,17 @@ snapshots:
dependencies:
mimic-fn: 2.1.0
+ onetime@7.0.0:
+ dependencies:
+ mimic-function: 5.0.1
+
+ open@10.1.0:
+ dependencies:
+ default-browser: 5.5.0
+ define-lazy-prop: 3.0.0
+ is-inside-container: 1.0.0
+ is-wsl: 3.1.1
+
open@8.4.2:
dependencies:
define-lazy-prop: 2.0.0
@@ -7307,30 +14138,45 @@ snapshots:
strip-ansi: 6.0.1
wcwidth: 1.0.1
+ ora@5.4.1:
+ dependencies:
+ bl: 4.1.0
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-spinners: 2.6.1
+ is-interactive: 1.0.0
+ is-unicode-supported: 0.1.0
+ log-symbols: 4.1.0
+ strip-ansi: 6.0.1
+ wcwidth: 1.0.1
+
+ ordered-binary@1.6.1:
+ optional: true
+
outdent@0.5.0: {}
- oxc-resolver@11.18.0:
+ oxc-resolver@11.17.1:
optionalDependencies:
- '@oxc-resolver/binding-android-arm-eabi': 11.18.0
- '@oxc-resolver/binding-android-arm64': 11.18.0
- '@oxc-resolver/binding-darwin-arm64': 11.18.0
- '@oxc-resolver/binding-darwin-x64': 11.18.0
- '@oxc-resolver/binding-freebsd-x64': 11.18.0
- '@oxc-resolver/binding-linux-arm-gnueabihf': 11.18.0
- '@oxc-resolver/binding-linux-arm-musleabihf': 11.18.0
- '@oxc-resolver/binding-linux-arm64-gnu': 11.18.0
- '@oxc-resolver/binding-linux-arm64-musl': 11.18.0
- '@oxc-resolver/binding-linux-ppc64-gnu': 11.18.0
- '@oxc-resolver/binding-linux-riscv64-gnu': 11.18.0
- '@oxc-resolver/binding-linux-riscv64-musl': 11.18.0
- '@oxc-resolver/binding-linux-s390x-gnu': 11.18.0
- '@oxc-resolver/binding-linux-x64-gnu': 11.18.0
- '@oxc-resolver/binding-linux-x64-musl': 11.18.0
- '@oxc-resolver/binding-openharmony-arm64': 11.18.0
- '@oxc-resolver/binding-wasm32-wasi': 11.18.0
- '@oxc-resolver/binding-win32-arm64-msvc': 11.18.0
- '@oxc-resolver/binding-win32-ia32-msvc': 11.18.0
- '@oxc-resolver/binding-win32-x64-msvc': 11.18.0
+ '@oxc-resolver/binding-android-arm-eabi': 11.17.1
+ '@oxc-resolver/binding-android-arm64': 11.17.1
+ '@oxc-resolver/binding-darwin-arm64': 11.17.1
+ '@oxc-resolver/binding-darwin-x64': 11.17.1
+ '@oxc-resolver/binding-freebsd-x64': 11.17.1
+ '@oxc-resolver/binding-linux-arm-gnueabihf': 11.17.1
+ '@oxc-resolver/binding-linux-arm-musleabihf': 11.17.1
+ '@oxc-resolver/binding-linux-arm64-gnu': 11.17.1
+ '@oxc-resolver/binding-linux-arm64-musl': 11.17.1
+ '@oxc-resolver/binding-linux-ppc64-gnu': 11.17.1
+ '@oxc-resolver/binding-linux-riscv64-gnu': 11.17.1
+ '@oxc-resolver/binding-linux-riscv64-musl': 11.17.1
+ '@oxc-resolver/binding-linux-s390x-gnu': 11.17.1
+ '@oxc-resolver/binding-linux-x64-gnu': 11.17.1
+ '@oxc-resolver/binding-linux-x64-musl': 11.17.1
+ '@oxc-resolver/binding-openharmony-arm64': 11.17.1
+ '@oxc-resolver/binding-wasm32-wasi': 11.17.1
+ '@oxc-resolver/binding-win32-arm64-msvc': 11.17.1
+ '@oxc-resolver/binding-win32-ia32-msvc': 11.17.1
+ '@oxc-resolver/binding-win32-x64-msvc': 11.17.1
p-filter@2.1.0:
dependencies:
@@ -7344,6 +14190,10 @@ snapshots:
dependencies:
yocto-queue: 0.1.0
+ p-limit@4.0.0:
+ dependencies:
+ yocto-queue: 1.2.2
+
p-locate@4.1.0:
dependencies:
p-limit: 2.3.0
@@ -7352,20 +14202,71 @@ snapshots:
dependencies:
p-limit: 3.1.0
+ p-locate@6.0.0:
+ dependencies:
+ p-limit: 4.0.0
+
p-map@2.1.0: {}
+ p-map@7.0.4: {}
+
+ p-retry@6.2.1:
+ dependencies:
+ '@types/retry': 0.12.2
+ is-network-error: 1.3.0
+ retry: 0.13.1
+
p-try@2.2.0: {}
+ package-json-from-dist@1.0.1: {}
+
package-manager-detector@0.2.11:
dependencies:
quansync: 0.2.11
package-manager-detector@1.6.0: {}
+ pacote@20.0.0:
+ dependencies:
+ '@npmcli/git': 6.0.3
+ '@npmcli/installed-package-contents': 3.0.0
+ '@npmcli/package-json': 6.2.0
+ '@npmcli/promise-spawn': 8.0.3
+ '@npmcli/run-script': 9.1.0
+ cacache: 19.0.1
+ fs-minipass: 3.0.3
+ minipass: 7.1.3
+ npm-package-arg: 12.0.2
+ npm-packlist: 9.0.0
+ npm-pick-manifest: 10.0.0
+ npm-registry-fetch: 18.0.2
+ proc-log: 5.0.0
+ promise-retry: 2.0.1
+ sigstore: 3.1.0
+ ssri: 12.0.0
+ tar: 6.2.1
+ transitivePeerDependencies:
+ - supports-color
+
parent-module@1.0.1:
dependencies:
callsites: 3.1.0
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ error-ex: 1.3.4
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ parse-node-version@1.0.1: {}
+
+ parse5-html-rewriting-stream@7.0.0:
+ dependencies:
+ entities: 4.5.0
+ parse5: 7.3.0
+ parse5-sax-parser: 7.0.0
+
parse5-htmlparser2-tree-adapter@7.1.0:
dependencies:
domhandler: 5.0.3
@@ -7375,28 +14276,106 @@ snapshots:
dependencies:
parse5: 7.3.0
+ parse5-sax-parser@7.0.0:
+ dependencies:
+ parse5: 7.3.0
+
parse5@7.3.0:
dependencies:
entities: 6.0.1
+ parseurl@1.3.3: {}
+
path-exists@4.0.0: {}
+ path-exists@5.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
path-key@3.1.1: {}
+ path-parse@1.0.7: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.3
+
+ path-to-regexp@0.1.12: {}
+
path-type@4.0.0: {}
+ path-type@6.0.0: {}
+
pathe@2.0.3: {}
picocolors@1.1.1: {}
picomatch@2.3.1: {}
+ picomatch@4.0.2: {}
+
picomatch@4.0.3: {}
pify@4.0.1: {}
+ piscina@4.8.0:
+ optionalDependencies:
+ '@napi-rs/nice': 1.1.1
+
+ pkg-dir@7.0.0:
+ dependencies:
+ find-up: 6.3.0
+
possible-typed-array-names@1.1.0: {}
+ postcss-loader@8.1.1(postcss@8.5.2)(typescript@5.7.3)(webpack@5.105.0(esbuild@0.25.4)):
+ dependencies:
+ cosmiconfig: 9.0.0(typescript@5.7.3)
+ jiti: 1.21.7
+ postcss: 8.5.2
+ semver: 7.7.4
+ optionalDependencies:
+ webpack: 5.105.0(esbuild@0.25.4)
+ transitivePeerDependencies:
+ - typescript
+
+ postcss-media-query-parser@0.2.3: {}
+
+ postcss-modules-extract-imports@3.1.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-modules-local-by-default@4.2.0(postcss@8.5.6):
+ dependencies:
+ icss-utils: 5.1.0(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+ postcss-value-parser: 4.2.0
+
+ postcss-modules-scope@3.2.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+
+ postcss-modules-values@4.0.0(postcss@8.5.6):
+ dependencies:
+ icss-utils: 5.1.0(postcss@8.5.6)
+ postcss: 8.5.6
+
+ postcss-selector-parser@7.1.1:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-value-parser@4.2.0: {}
+
+ postcss@8.5.2:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
postcss@8.5.6:
dependencies:
nanoid: 3.3.11
@@ -7409,10 +14388,10 @@ snapshots:
premove@4.0.0: {}
- prettier-plugin-svelte@3.5.0(prettier@3.8.1)(svelte@5.53.1):
+ prettier-plugin-svelte@3.5.0(prettier@3.8.1)(svelte@5.50.3):
dependencies:
prettier: 3.8.1
- svelte: 5.53.1
+ svelte: 5.50.3
prettier@2.8.8: {}
@@ -7430,8 +14409,25 @@ snapshots:
ansi-styles: 5.2.0
react-is: 18.3.1
+ proc-log@5.0.0: {}
+
+ process-nextick-args@2.0.1: {}
+
+ promise-retry@2.0.1:
+ dependencies:
+ err-code: 2.0.3
+ retry: 0.12.0
+
+ proxy-addr@2.0.7:
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+
proxy-from-env@1.1.0: {}
+ prr@1.0.1:
+ optional: true
+
publint@0.3.17:
dependencies:
'@publint/pack': 0.1.4
@@ -7441,14 +14437,35 @@ snapshots:
punycode.js@2.3.1: {}
+ punycode@1.4.1: {}
+
punycode@2.3.1: {}
+ qjobs@1.2.0: {}
+
+ qs@6.14.2:
+ dependencies:
+ side-channel: 1.1.0
+
quansync@0.2.11: {}
quansync@1.0.0: {}
queue-microtask@1.2.3: {}
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ range-parser@1.2.1: {}
+
+ raw-body@2.5.3:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.1
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+
react-dom@19.2.4(react@19.2.4):
dependencies:
react: 19.2.4
@@ -7469,17 +14486,45 @@ snapshots:
pify: 4.0.1
strip-bom: 3.0.0
+ readable-stream@2.3.8:
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+
readable-stream@3.6.2:
dependencies:
inherits: 2.0.4
string_decoder: 1.3.0
util-deprecate: 1.0.2
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ readdirp@4.1.2: {}
+
redent@3.0.0:
dependencies:
indent-string: 4.0.0
strip-indent: 3.0.0
+ reflect-metadata@0.2.2: {}
+
+ regenerate-unicode-properties@10.2.2:
+ dependencies:
+ regenerate: 1.4.2
+
+ regenerate@1.4.2: {}
+
+ regenerator-runtime@0.14.1: {}
+
+ regex-parser@2.3.1: {}
+
regexp.prototype.flags@1.5.4:
dependencies:
call-bind: 1.0.8
@@ -7489,24 +14534,78 @@ snapshots:
gopd: 1.2.0
set-function-name: 2.0.2
+ regexpu-core@6.4.0:
+ dependencies:
+ regenerate: 1.4.2
+ regenerate-unicode-properties: 10.2.2
+ regjsgen: 0.8.0
+ regjsparser: 0.13.0
+ unicode-match-property-ecmascript: 2.0.0
+ unicode-match-property-value-ecmascript: 2.2.1
+
+ regjsgen@0.8.0: {}
+
+ regjsparser@0.13.0:
+ dependencies:
+ jsesc: 3.1.0
+
require-directory@2.1.1: {}
+ require-from-string@2.0.2: {}
+
+ requires-port@1.0.0: {}
+
resolve-from@4.0.0: {}
resolve-from@5.0.0: {}
resolve-pkg-maps@1.0.0: {}
+ resolve-url-loader@5.0.0:
+ dependencies:
+ adjust-sourcemap-loader: 4.0.0
+ convert-source-map: 1.9.0
+ loader-utils: 2.0.4
+ postcss: 8.5.6
+ source-map: 0.6.1
+
resolve.exports@2.0.3: {}
+ resolve@1.22.10:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ resolve@1.22.11:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
restore-cursor@3.1.0:
dependencies:
onetime: 5.1.2
signal-exit: 3.0.7
+ restore-cursor@5.1.0:
+ dependencies:
+ onetime: 7.0.0
+ signal-exit: 4.1.0
+
+ retry@0.12.0: {}
+
+ retry@0.13.1: {}
+
reusify@1.1.0: {}
- rolldown-plugin-dts@0.22.1(oxc-resolver@11.18.0)(rolldown@1.0.0-rc.3)(typescript@5.9.3):
+ rfdc@1.4.1: {}
+
+ rimraf@3.0.2:
+ dependencies:
+ glob: 7.2.3
+
+ rolldown-plugin-dts@0.22.1(oxc-resolver@11.17.1)(rolldown@1.0.0-rc.3)(typescript@5.9.3):
dependencies:
'@babel/generator': 8.0.0-rc.1
'@babel/helper-validator-identifier': 8.0.0-rc.1
@@ -7514,7 +14613,7 @@ snapshots:
'@babel/types': 8.0.0-rc.1
ast-kit: 3.0.0-beta.1
birpc: 4.0.0
- dts-resolver: 2.1.3(oxc-resolver@11.18.0)
+ dts-resolver: 2.1.3(oxc-resolver@11.17.1)
get-tsconfig: 4.13.6
obug: 2.1.1
rolldown: 1.0.0-rc.3
@@ -7542,67 +14641,184 @@ snapshots:
'@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.3
'@rolldown/binding-win32-x64-msvc': 1.0.0-rc.3
- rollup@4.58.0:
+ rollup@4.34.8:
+ dependencies:
+ '@types/estree': 1.0.6
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.34.8
+ '@rollup/rollup-android-arm64': 4.34.8
+ '@rollup/rollup-darwin-arm64': 4.34.8
+ '@rollup/rollup-darwin-x64': 4.34.8
+ '@rollup/rollup-freebsd-arm64': 4.34.8
+ '@rollup/rollup-freebsd-x64': 4.34.8
+ '@rollup/rollup-linux-arm-gnueabihf': 4.34.8
+ '@rollup/rollup-linux-arm-musleabihf': 4.34.8
+ '@rollup/rollup-linux-arm64-gnu': 4.34.8
+ '@rollup/rollup-linux-arm64-musl': 4.34.8
+ '@rollup/rollup-linux-loongarch64-gnu': 4.34.8
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.34.8
+ '@rollup/rollup-linux-riscv64-gnu': 4.34.8
+ '@rollup/rollup-linux-s390x-gnu': 4.34.8
+ '@rollup/rollup-linux-x64-gnu': 4.34.8
+ '@rollup/rollup-linux-x64-musl': 4.34.8
+ '@rollup/rollup-win32-arm64-msvc': 4.34.8
+ '@rollup/rollup-win32-ia32-msvc': 4.34.8
+ '@rollup/rollup-win32-x64-msvc': 4.34.8
+ fsevents: 2.3.3
+
+ rollup@4.57.1:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.58.0
- '@rollup/rollup-android-arm64': 4.58.0
- '@rollup/rollup-darwin-arm64': 4.58.0
- '@rollup/rollup-darwin-x64': 4.58.0
- '@rollup/rollup-freebsd-arm64': 4.58.0
- '@rollup/rollup-freebsd-x64': 4.58.0
- '@rollup/rollup-linux-arm-gnueabihf': 4.58.0
- '@rollup/rollup-linux-arm-musleabihf': 4.58.0
- '@rollup/rollup-linux-arm64-gnu': 4.58.0
- '@rollup/rollup-linux-arm64-musl': 4.58.0
- '@rollup/rollup-linux-loong64-gnu': 4.58.0
- '@rollup/rollup-linux-loong64-musl': 4.58.0
- '@rollup/rollup-linux-ppc64-gnu': 4.58.0
- '@rollup/rollup-linux-ppc64-musl': 4.58.0
- '@rollup/rollup-linux-riscv64-gnu': 4.58.0
- '@rollup/rollup-linux-riscv64-musl': 4.58.0
- '@rollup/rollup-linux-s390x-gnu': 4.58.0
- '@rollup/rollup-linux-x64-gnu': 4.58.0
- '@rollup/rollup-linux-x64-musl': 4.58.0
- '@rollup/rollup-openbsd-x64': 4.58.0
- '@rollup/rollup-openharmony-arm64': 4.58.0
- '@rollup/rollup-win32-arm64-msvc': 4.58.0
- '@rollup/rollup-win32-ia32-msvc': 4.58.0
- '@rollup/rollup-win32-x64-gnu': 4.58.0
- '@rollup/rollup-win32-x64-msvc': 4.58.0
+ '@rollup/rollup-android-arm-eabi': 4.57.1
+ '@rollup/rollup-android-arm64': 4.57.1
+ '@rollup/rollup-darwin-arm64': 4.57.1
+ '@rollup/rollup-darwin-x64': 4.57.1
+ '@rollup/rollup-freebsd-arm64': 4.57.1
+ '@rollup/rollup-freebsd-x64': 4.57.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.57.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.57.1
+ '@rollup/rollup-linux-arm64-gnu': 4.57.1
+ '@rollup/rollup-linux-arm64-musl': 4.57.1
+ '@rollup/rollup-linux-loong64-gnu': 4.57.1
+ '@rollup/rollup-linux-loong64-musl': 4.57.1
+ '@rollup/rollup-linux-ppc64-gnu': 4.57.1
+ '@rollup/rollup-linux-ppc64-musl': 4.57.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.57.1
+ '@rollup/rollup-linux-riscv64-musl': 4.57.1
+ '@rollup/rollup-linux-s390x-gnu': 4.57.1
+ '@rollup/rollup-linux-x64-gnu': 4.57.1
+ '@rollup/rollup-linux-x64-musl': 4.57.1
+ '@rollup/rollup-openbsd-x64': 4.57.1
+ '@rollup/rollup-openharmony-arm64': 4.57.1
+ '@rollup/rollup-win32-arm64-msvc': 4.57.1
+ '@rollup/rollup-win32-ia32-msvc': 4.57.1
+ '@rollup/rollup-win32-x64-gnu': 4.57.1
+ '@rollup/rollup-win32-x64-msvc': 4.57.1
fsevents: 2.3.3
+ run-applescript@7.1.0: {}
+
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
- sade@1.8.1:
+ rxjs@7.8.1:
+ dependencies:
+ tslib: 2.8.1
+
+ rxjs@7.8.2:
+ dependencies:
+ tslib: 2.8.1
+
+ sade@1.8.1:
+ dependencies:
+ mri: 1.2.0
+
+ safe-buffer@5.1.2: {}
+
+ safe-buffer@5.2.1: {}
+
+ safe-regex-test@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-regex: 1.2.1
+
+ safer-buffer@2.1.2: {}
+
+ sass-loader@16.0.5(sass@1.85.0)(webpack@5.105.0(esbuild@0.25.4)):
+ dependencies:
+ neo-async: 2.6.2
+ optionalDependencies:
+ sass: 1.85.0
+ webpack: 5.105.0(esbuild@0.25.4)
+
+ sass@1.85.0:
+ dependencies:
+ chokidar: 4.0.3
+ immutable: 5.1.4
+ source-map-js: 1.2.1
+ optionalDependencies:
+ '@parcel/watcher': 2.5.6
+
+ sax@1.4.4:
+ optional: true
+
+ scheduler@0.27.0: {}
+
+ schema-utils@4.3.3:
dependencies:
- mri: 1.2.0
+ '@types/json-schema': 7.0.15
+ ajv: 8.18.0
+ ajv-formats: 2.1.1(ajv@8.18.0)
+ ajv-keywords: 5.1.0(ajv@8.18.0)
- safe-buffer@5.2.1: {}
+ select-hose@2.0.0: {}
- safe-regex-test@1.1.0:
+ selfsigned@2.4.1:
dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-regex: 1.2.1
-
- safer-buffer@2.1.2: {}
+ '@types/node-forge': 1.3.14
+ node-forge: 1.3.3
- scheduler@0.27.0: {}
+ semver@5.7.2:
+ optional: true
semver@6.3.1: {}
+ semver@7.7.1: {}
+
semver@7.7.4: {}
+ send@0.19.2:
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.1
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ serialize-javascript@6.0.2:
+ dependencies:
+ randombytes: 2.1.0
+
seroval-plugins@1.5.0(seroval@1.5.0):
dependencies:
seroval: 1.5.0
seroval@1.5.0: {}
+ serve-index@1.9.2:
+ dependencies:
+ accepts: 1.3.8
+ batch: 0.6.1
+ debug: 2.6.9
+ escape-html: 1.0.3
+ http-errors: 1.8.1
+ mime-types: 2.1.35
+ parseurl: 1.3.3
+ transitivePeerDependencies:
+ - supports-color
+
+ serve-static@1.16.3:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.19.2
+ transitivePeerDependencies:
+ - supports-color
+
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
@@ -7619,12 +14835,20 @@ snapshots:
functions-have-names: 1.2.3
has-property-descriptors: 1.0.2
+ setprototypeof@1.2.0: {}
+
+ shallow-clone@3.0.1:
+ dependencies:
+ kind-of: 6.0.3
+
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
shebang-regex@3.0.0: {}
+ shell-quote@1.8.3: {}
+
sherif-darwin-arm64@1.10.0:
optional: true
@@ -7694,6 +14918,17 @@ snapshots:
signal-exit@4.1.0: {}
+ sigstore@3.1.0:
+ dependencies:
+ '@sigstore/bundle': 3.1.0
+ '@sigstore/core': 2.0.0
+ '@sigstore/protobuf-specs': 0.4.3
+ '@sigstore/sign': 3.1.0
+ '@sigstore/tuf': 3.1.1
+ '@sigstore/verify': 2.1.1
+ transitivePeerDependencies:
+ - supports-color
+
simple-code-frame@1.3.0:
dependencies:
kolorist: 1.8.0
@@ -7710,8 +14945,71 @@ snapshots:
slash@3.0.0: {}
+ slash@5.1.0: {}
+
+ slice-ansi@5.0.0:
+ dependencies:
+ ansi-styles: 6.2.3
+ is-fullwidth-code-point: 4.0.0
+
+ slice-ansi@7.1.2:
+ dependencies:
+ ansi-styles: 6.2.3
+ is-fullwidth-code-point: 5.1.0
+
+ smart-buffer@4.2.0: {}
+
smol-toml@1.6.0: {}
+ socket.io-adapter@2.5.6:
+ dependencies:
+ debug: 4.4.3
+ ws: 8.18.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ socket.io-parser@4.2.5:
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ socket.io@4.8.3:
+ dependencies:
+ accepts: 1.3.8
+ base64id: 2.0.0
+ cors: 2.8.6
+ debug: 4.4.3
+ engine.io: 6.6.5
+ socket.io-adapter: 2.5.6
+ socket.io-parser: 4.2.5
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ sockjs@0.3.24:
+ dependencies:
+ faye-websocket: 0.11.4
+ uuid: 8.3.2
+ websocket-driver: 0.7.4
+
+ socks-proxy-agent@8.0.5:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ socks: 2.8.7
+ transitivePeerDependencies:
+ - supports-color
+
+ socks@2.8.7:
+ dependencies:
+ ip-address: 10.1.0
+ smart-buffer: 4.2.0
+
solid-js@1.9.11:
dependencies:
csstype: 3.2.3
@@ -7729,21 +15027,77 @@ snapshots:
source-map-js@1.2.1: {}
- source-map@0.7.6: {}
+ source-map-loader@5.0.0(webpack@5.105.0(esbuild@0.25.4)):
+ dependencies:
+ iconv-lite: 0.6.3
+ source-map-js: 1.2.1
+ webpack: 5.105.0(esbuild@0.25.4)
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ source-map@0.7.4: {}
spawndamnit@3.0.1:
dependencies:
cross-spawn: 7.0.6
signal-exit: 4.1.0
+ spdx-correct@3.2.0:
+ dependencies:
+ spdx-expression-parse: 3.0.1
+ spdx-license-ids: 3.0.22
+
+ spdx-exceptions@2.5.0: {}
+
+ spdx-expression-parse@3.0.1:
+ dependencies:
+ spdx-exceptions: 2.5.0
+ spdx-license-ids: 3.0.22
+
+ spdx-license-ids@3.0.22: {}
+
+ spdy-transport@3.0.0:
+ dependencies:
+ debug: 4.4.3
+ detect-node: 2.1.0
+ hpack.js: 2.1.6
+ obuf: 1.1.2
+ readable-stream: 3.6.2
+ wbuf: 1.7.3
+ transitivePeerDependencies:
+ - supports-color
+
+ spdy@4.0.2:
+ dependencies:
+ debug: 4.4.3
+ handle-thing: 2.0.1
+ http-deceiver: 1.2.7
+ select-hose: 2.0.0
+ spdy-transport: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
sprintf-js@1.0.3: {}
+ ssri@12.0.0:
+ dependencies:
+ minipass: 7.1.3
+
stable-hash-x@0.2.0: {}
stack-trace@1.0.0-pre2: {}
stackback@0.0.2: {}
+ statuses@1.5.0: {}
+
+ statuses@2.0.2: {}
+
std-env@3.10.0: {}
stop-iteration-iterator@1.1.0:
@@ -7751,6 +15105,14 @@ snapshots:
es-errors: 1.3.0
internal-slot: 1.1.0
+ streamroller@3.1.5:
+ dependencies:
+ date-format: 4.0.14
+ debug: 4.4.3
+ fs-extra: 8.1.0
+ transitivePeerDependencies:
+ - supports-color
+
string-ts@2.3.1: {}
string-width@4.2.3:
@@ -7759,6 +15121,22 @@ snapshots:
is-fullwidth-code-point: 3.0.0
strip-ansi: 6.0.1
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.2
+
+ string-width@7.2.0:
+ dependencies:
+ emoji-regex: 10.6.0
+ get-east-asian-width: 1.5.0
+ strip-ansi: 7.1.2
+
+ string_decoder@1.1.1:
+ dependencies:
+ safe-buffer: 5.1.2
+
string_decoder@1.3.0:
dependencies:
safe-buffer: 5.2.1
@@ -7767,6 +15145,10 @@ snapshots:
dependencies:
ansi-regex: 5.0.1
+ strip-ansi@7.1.2:
+ dependencies:
+ ansi-regex: 6.2.2
+
strip-bom@3.0.0: {}
strip-indent@3.0.0:
@@ -7781,18 +15163,23 @@ snapshots:
dependencies:
has-flag: 4.0.0
- svelte@5.53.1:
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ svelte@5.50.3:
dependencies:
'@jridgewell/remapping': 2.3.5
'@jridgewell/sourcemap-codec': 1.5.5
- '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0)
+ '@sveltejs/acorn-typescript': 1.0.9(acorn@8.15.0)
'@types/estree': 1.0.8
- '@types/trusted-types': 2.0.7
- acorn: 8.16.0
+ acorn: 8.15.0
aria-query: 5.3.2
axobject-query: 4.1.0
clsx: 2.1.1
- devalue: 5.6.3
+ devalue: 5.6.2
esm-env: 1.2.2
esrap: 2.2.3
is-reference: 3.0.3
@@ -7800,6 +15187,8 @@ snapshots:
magic-string: 0.30.21
zimmerframe: 1.1.4
+ symbol-observable@4.0.0: {}
+
tapable@2.3.0: {}
tar-stream@2.2.0:
@@ -7810,8 +15199,49 @@ snapshots:
inherits: 2.0.4
readable-stream: 3.6.2
+ tar@6.2.1:
+ dependencies:
+ chownr: 2.0.0
+ fs-minipass: 2.1.0
+ minipass: 5.0.0
+ minizlib: 2.1.2
+ mkdirp: 1.0.4
+ yallist: 4.0.0
+
+ tar@7.5.9:
+ dependencies:
+ '@isaacs/fs-minipass': 4.0.1
+ chownr: 3.0.0
+ minipass: 7.1.3
+ minizlib: 3.1.0
+ yallist: 5.0.0
+
term-size@2.2.1: {}
+ terser-webpack-plugin@5.3.16(esbuild@0.25.4)(webpack@5.105.0):
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ jest-worker: 27.5.1
+ schema-utils: 4.3.3
+ serialize-javascript: 6.0.2
+ terser: 5.39.0
+ webpack: 5.105.0(esbuild@0.25.4)
+ optionalDependencies:
+ esbuild: 0.25.4
+
+ terser@5.39.0:
+ dependencies:
+ '@jridgewell/source-map': 0.3.11
+ acorn: 8.15.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
+ thingies@2.5.0(tslib@2.8.1):
+ dependencies:
+ tslib: 2.8.1
+
+ thunky@1.1.0: {}
+
tinybench@2.9.0: {}
tinyexec@1.0.2: {}
@@ -7829,8 +15259,14 @@ snapshots:
dependencies:
is-number: 7.0.0
+ toidentifier@1.0.1: {}
+
tr46@0.0.3: {}
+ tree-dump@1.1.0(tslib@2.8.1):
+ dependencies:
+ tslib: 2.8.1
+
tree-kill@1.2.2: {}
ts-api-utils@2.4.0(typescript@5.9.3):
@@ -7850,7 +15286,7 @@ snapshots:
minimist: 1.2.8
strip-bom: 3.0.0
- tsdown@0.20.3(oxc-resolver@11.18.0)(publint@0.3.17)(typescript@5.9.3):
+ tsdown@0.20.3(oxc-resolver@11.17.1)(publint@0.3.17)(typescript@5.9.3):
dependencies:
ansis: 4.2.0
cac: 6.7.14
@@ -7861,12 +15297,12 @@ snapshots:
obug: 2.1.1
picomatch: 4.0.3
rolldown: 1.0.0-rc.3
- rolldown-plugin-dts: 0.22.1(oxc-resolver@11.18.0)(rolldown@1.0.0-rc.3)(typescript@5.9.3)
+ rolldown-plugin-dts: 0.22.1(oxc-resolver@11.17.1)(rolldown@1.0.0-rc.3)(typescript@5.9.3)
semver: 7.7.4
tinyexec: 1.0.2
tinyglobby: 0.2.15
tree-kill: 1.2.2
- unconfig-core: 7.5.0
+ unconfig-core: 7.4.2
unrun: 0.2.27
optionalDependencies:
publint: 0.3.17
@@ -7880,10 +15316,25 @@ snapshots:
tslib@2.8.1: {}
+ tuf-js@3.1.0:
+ dependencies:
+ '@tufjs/models': 3.0.1
+ debug: 4.4.3
+ make-fetch-happen: 14.0.3
+ transitivePeerDependencies:
+ - supports-color
+
type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1
+ type-is@1.6.18:
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+
+ typed-assert@1.0.9: {}
+
typedoc-plugin-frontmatter@1.3.0(typedoc-plugin-markdown@4.9.0(typedoc@0.28.14(typescript@5.9.3))):
dependencies:
typedoc-plugin-markdown: 4.9.0(typedoc@0.28.14(typescript@5.9.3))
@@ -7902,32 +15353,59 @@ snapshots:
typescript: 5.9.3
yaml: 2.8.2
- typescript-eslint@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3):
+ typescript-eslint@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/parser': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.39.3(jiti@2.6.1)
+ '@typescript-eslint/eslint-plugin': 8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.2(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
+ typescript@5.7.3: {}
+
typescript@5.9.3: {}
+ ua-parser-js@0.7.41: {}
+
uc.micro@2.1.0: {}
- unconfig-core@7.5.0:
+ unconfig-core@7.4.2:
dependencies:
'@quansync/fs': 1.0.0
quansync: 1.0.0
undici-types@7.18.2: {}
- undici@7.22.0: {}
+ undici@7.21.0: {}
+
+ unicode-canonical-property-names-ecmascript@2.0.1: {}
+
+ unicode-match-property-ecmascript@2.0.0:
+ dependencies:
+ unicode-canonical-property-names-ecmascript: 2.0.1
+ unicode-property-aliases-ecmascript: 2.2.0
+
+ unicode-match-property-value-ecmascript@2.2.1: {}
+
+ unicode-property-aliases-ecmascript@2.2.0: {}
+
+ unicorn-magic@0.3.0: {}
+
+ unique-filename@4.0.0:
+ dependencies:
+ unique-slug: 5.0.0
+
+ unique-slug@5.0.0:
+ dependencies:
+ imurmurhash: 0.1.4
universalify@0.1.2: {}
+ unpipe@1.0.0: {}
+
unrs-resolver@1.11.1:
dependencies:
napi-postinstall: 0.3.4
@@ -7972,7 +15450,20 @@ snapshots:
util-deprecate@1.0.2: {}
- vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)):
+ utils-merge@1.0.1: {}
+
+ uuid@8.3.2: {}
+
+ validate-npm-package-license@3.0.4:
+ dependencies:
+ spdx-correct: 3.2.0
+ spdx-expression-parse: 3.0.1
+
+ validate-npm-package-name@6.0.2: {}
+
+ vary@1.1.2: {}
+
+ vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)):
dependencies:
'@babel/core': 7.29.0
'@types/babel__core': 7.20.5
@@ -7980,45 +15471,65 @@ snapshots:
merge-anything: 5.1.7
solid-js: 1.9.11
solid-refresh: 0.6.3(solid-js@1.9.11)
- vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
- vitefu: 1.1.1(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
+ vitefu: 1.1.1(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
optionalDependencies:
'@testing-library/jest-dom': 6.9.1
transitivePeerDependencies:
- supports-color
- vite-prerender-plugin@0.5.12(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)):
+ vite-prerender-plugin@0.5.12(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)):
dependencies:
kolorist: 1.8.0
magic-string: 0.30.21
node-html-parser: 6.1.13
simple-code-frame: 1.3.0
- source-map: 0.7.6
+ source-map: 0.7.4
stack-trace: 1.0.0-pre2
- vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
+
+ vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2):
+ dependencies:
+ esbuild: 0.25.4
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.57.1
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 25.3.0
+ fsevents: 2.3.3
+ jiti: 2.6.1
+ less: 4.2.2
+ sass: 1.85.0
+ terser: 5.39.0
+ yaml: 2.8.2
- vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2):
+ vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2):
dependencies:
esbuild: 0.27.3
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
- rollup: 4.58.0
+ rollup: 4.57.1
tinyglobby: 0.2.15
optionalDependencies:
'@types/node': 25.3.0
fsevents: 2.3.3
jiti: 2.6.1
+ less: 4.2.2
+ sass: 1.85.0
+ terser: 5.39.0
yaml: 2.8.2
- vitefu@1.1.1(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)):
+ vitefu@1.1.1(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)):
optionalDependencies:
- vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
- vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.7.0)(jiti@2.6.1)(yaml@2.8.2):
+ vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2):
dependencies:
'@vitest/expect': 4.0.18
- '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2))
+ '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
'@vitest/pretty-format': 4.0.18
'@vitest/runner': 4.0.18
'@vitest/snapshot': 4.0.18
@@ -8035,7 +15546,7 @@ snapshots:
tinyexec: 1.0.2
tinyglobby: 0.2.15
tinyrainbow: 3.0.3
- vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 25.3.0
@@ -8053,13 +15564,15 @@ snapshots:
- tsx
- yaml
- vue-eslint-parser@10.4.0(eslint@9.39.3(jiti@2.6.1)):
+ void-elements@2.0.1: {}
+
+ vue-eslint-parser@10.4.0(eslint@9.39.2(jiti@2.6.1)):
dependencies:
debug: 4.4.3
- eslint: 9.39.3(jiti@2.6.1)
- eslint-scope: 9.1.1
- eslint-visitor-keys: 5.0.1
- espree: 11.1.1
+ eslint: 9.39.2(jiti@2.6.1)
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
esquery: 1.7.0
semver: 7.7.4
transitivePeerDependencies:
@@ -8067,12 +15580,134 @@ snapshots:
walk-up-path@4.0.0: {}
+ watchpack@2.4.2:
+ dependencies:
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+
+ watchpack@2.5.1:
+ dependencies:
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+
+ wbuf@1.7.3:
+ dependencies:
+ minimalistic-assert: 1.0.1
+
wcwidth@1.0.1:
dependencies:
defaults: 1.0.4
+ weak-lru-cache@1.2.2:
+ optional: true
+
webidl-conversions@3.0.1: {}
+ webpack-dev-middleware@7.4.2(tslib@2.8.1)(webpack@5.105.0):
+ dependencies:
+ colorette: 2.0.20
+ memfs: 4.56.10(tslib@2.8.1)
+ mime-types: 2.1.35
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ schema-utils: 4.3.3
+ optionalDependencies:
+ webpack: 5.105.0(esbuild@0.25.4)
+ transitivePeerDependencies:
+ - tslib
+
+ webpack-dev-server@5.2.2(tslib@2.8.1)(webpack@5.105.0):
+ dependencies:
+ '@types/bonjour': 3.5.13
+ '@types/connect-history-api-fallback': 1.5.4
+ '@types/express': 4.17.25
+ '@types/express-serve-static-core': 4.19.8
+ '@types/serve-index': 1.9.4
+ '@types/serve-static': 1.15.10
+ '@types/sockjs': 0.3.36
+ '@types/ws': 8.18.1
+ ansi-html-community: 0.0.8
+ bonjour-service: 1.3.0
+ chokidar: 3.6.0
+ colorette: 2.0.20
+ compression: 1.8.1
+ connect-history-api-fallback: 2.0.0
+ express: 4.22.1
+ graceful-fs: 4.2.11
+ http-proxy-middleware: 2.0.9(@types/express@4.17.25)
+ ipaddr.js: 2.3.0
+ launch-editor: 2.13.0
+ open: 10.1.0
+ p-retry: 6.2.1
+ schema-utils: 4.3.3
+ selfsigned: 2.4.1
+ serve-index: 1.9.2
+ sockjs: 0.3.24
+ spdy: 4.0.2
+ webpack-dev-middleware: 7.4.2(tslib@2.8.1)(webpack@5.105.0)
+ ws: 8.19.0
+ optionalDependencies:
+ webpack: 5.105.0(esbuild@0.25.4)
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - tslib
+ - utf-8-validate
+
+ webpack-merge@6.0.1:
+ dependencies:
+ clone-deep: 4.0.1
+ flat: 5.0.2
+ wildcard: 2.0.1
+
+ webpack-sources@3.3.4: {}
+
+ webpack-subresource-integrity@5.1.0(webpack@5.105.0(esbuild@0.25.4)):
+ dependencies:
+ typed-assert: 1.0.9
+ webpack: 5.105.0(esbuild@0.25.4)
+
+ webpack@5.105.0(esbuild@0.25.4):
+ dependencies:
+ '@types/eslint-scope': 3.7.7
+ '@types/estree': 1.0.8
+ '@types/json-schema': 7.0.15
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/wasm-edit': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+ acorn: 8.15.0
+ acorn-import-phases: 1.0.4(acorn@8.15.0)
+ browserslist: 4.28.1
+ chrome-trace-event: 1.0.4
+ enhanced-resolve: 5.19.0
+ es-module-lexer: 2.0.0
+ eslint-scope: 5.1.1
+ events: 3.3.0
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+ json-parse-even-better-errors: 2.3.1
+ loader-runner: 4.3.1
+ mime-types: 2.1.35
+ neo-async: 2.6.2
+ schema-utils: 4.3.3
+ tapable: 2.3.0
+ terser-webpack-plugin: 5.3.16(esbuild@0.25.4)(webpack@5.105.0)
+ watchpack: 2.5.1
+ webpack-sources: 3.3.4
+ transitivePeerDependencies:
+ - '@swc/core'
+ - esbuild
+ - uglify-js
+
+ websocket-driver@0.7.4:
+ dependencies:
+ http-parser-js: 0.5.10
+ safe-buffer: 5.2.1
+ websocket-extensions: 0.1.4
+
+ websocket-extensions@0.1.4: {}
+
whatwg-encoding@3.1.1:
dependencies:
iconv-lite: 0.6.3
@@ -8111,35 +15746,81 @@ snapshots:
gopd: 1.2.0
has-tostringtag: 1.0.2
+ which@1.3.1:
+ dependencies:
+ isexe: 2.0.0
+
which@2.0.2:
dependencies:
isexe: 2.0.0
+ which@5.0.0:
+ dependencies:
+ isexe: 3.1.5
+
why-is-node-running@2.3.0:
dependencies:
siginfo: 2.0.0
stackback: 0.0.2
+ wildcard@2.0.1: {}
+
word-wrap@1.2.5: {}
+ wrap-ansi@6.2.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 5.1.2
+ strip-ansi: 7.1.2
+
+ wrap-ansi@9.0.2:
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 7.2.0
+ strip-ansi: 7.1.2
+
wrappy@1.0.2: {}
+ ws@8.18.3: {}
+
ws@8.19.0: {}
y18n@5.0.8: {}
yallist@3.1.1: {}
+ yallist@4.0.0: {}
+
+ yallist@5.0.0: {}
+
yaml@2.8.2: {}
+ yargs-parser@20.2.9: {}
+
yargs-parser@21.1.1: {}
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+
yargs@17.7.2:
dependencies:
cliui: 8.0.1
@@ -8152,6 +15833,10 @@ snapshots:
yocto-queue@0.1.0: {}
+ yocto-queue@1.2.2: {}
+
+ yoctocolors-cjs@2.1.3: {}
+
zimmerframe@1.1.4: {}
zod-validation-error@3.5.4(zod@3.25.76):
@@ -8165,3 +15850,5 @@ snapshots:
zod@3.25.76: {}
zod@4.3.6: {}
+
+ zone.js@0.15.1: {}
diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts
index fc379be..6e465ea 100644
--- a/scripts/generate-docs.ts
+++ b/scripts/generate-docs.ts
@@ -48,6 +48,18 @@ await generateReferenceDocs({
outputDir: resolve(__dirname, '../docs/framework/solid/reference'),
exclude: ['packages/hotkeys/**/*'],
},
+ {
+ name: 'angular-hotkeys',
+ entryPoints: [
+ resolve(__dirname, '../packages/angular-hotkeys/src/index.ts'),
+ ],
+ tsconfig: resolve(
+ __dirname,
+ '../packages/angular-hotkeys/tsconfig.docs.json',
+ ),
+ outputDir: resolve(__dirname, '../docs/framework/angular/reference'),
+ exclude: ['packages/hotkeys/**/*'],
+ }
],
})
From 49a4ea4248e7611723a7e67034d4e3772f3bbc8a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?=
Date: Thu, 19 Feb 2026 23:45:10 -0300
Subject: [PATCH 02/11] fix: angular linting and docs
---
.changeset/odd-ties-clap.md | 5 ++
README.md | 4 +-
docs/config.json | 80 ++++++++++++++++-
.../functions/injectDefaultHotkeysOptions.md | 16 ++++
.../reference/functions/injectHeldKeyCodes.md | 39 ++++++++
.../reference/functions/injectHeldKeys.md | 34 +++++++
.../reference/functions/injectHotkey.md | 89 +++++++++++++++++++
.../functions/injectHotkeyRecorder.md | 53 +++++++++++
.../functions/injectHotkeySequence.md | 59 ++++++++++++
.../functions/injectHotkeysContext.md | 16 ++++
.../reference/functions/injectKeyHold.md | 55 ++++++++++++
.../reference/functions/provideHotkeys.md | 34 +++++++
docs/framework/angular/reference/index.md | 30 +++++++
.../interfaces/AngularHotkeyRecorder.md | 88 ++++++++++++++++++
.../interfaces/HotkeysContextValue.md | 18 ++++
.../interfaces/HotkeysProviderOptions.md | 38 ++++++++
.../interfaces/InjectHotkeyOptions.md | 28 ++++++
.../interfaces/InjectHotkeySequenceOptions.md | 24 +++++
.../variables/HOTKEYS_INJECTION_TOKEN.md | 12 +++
docs/installation.md | 2 +
docs/overview.md | 2 +-
.../angular-hotkeys/src/hotkeys-provider.ts | 6 +-
.../angular-hotkeys/src/injectHeldKeys.ts | 2 +-
.../src/injectHotkeyRecorder.ts | 10 +--
packages/angular-hotkeys/src/injectKeyHold.ts | 3 +-
25 files changed, 733 insertions(+), 14 deletions(-)
create mode 100644 .changeset/odd-ties-clap.md
create mode 100644 docs/framework/angular/reference/functions/injectDefaultHotkeysOptions.md
create mode 100644 docs/framework/angular/reference/functions/injectHeldKeyCodes.md
create mode 100644 docs/framework/angular/reference/functions/injectHeldKeys.md
create mode 100644 docs/framework/angular/reference/functions/injectHotkey.md
create mode 100644 docs/framework/angular/reference/functions/injectHotkeyRecorder.md
create mode 100644 docs/framework/angular/reference/functions/injectHotkeySequence.md
create mode 100644 docs/framework/angular/reference/functions/injectHotkeysContext.md
create mode 100644 docs/framework/angular/reference/functions/injectKeyHold.md
create mode 100644 docs/framework/angular/reference/functions/provideHotkeys.md
create mode 100644 docs/framework/angular/reference/index.md
create mode 100644 docs/framework/angular/reference/interfaces/AngularHotkeyRecorder.md
create mode 100644 docs/framework/angular/reference/interfaces/HotkeysContextValue.md
create mode 100644 docs/framework/angular/reference/interfaces/HotkeysProviderOptions.md
create mode 100644 docs/framework/angular/reference/interfaces/InjectHotkeyOptions.md
create mode 100644 docs/framework/angular/reference/interfaces/InjectHotkeySequenceOptions.md
create mode 100644 docs/framework/angular/reference/variables/HOTKEYS_INJECTION_TOKEN.md
diff --git a/.changeset/odd-ties-clap.md b/.changeset/odd-ties-clap.md
new file mode 100644
index 0000000..446f9e0
--- /dev/null
+++ b/.changeset/odd-ties-clap.md
@@ -0,0 +1,5 @@
+---
+'@tanstack/angular-hotkeys': patch
+---
+
+add angular adapter
diff --git a/README.md b/README.md
index 4609ad9..d627591 100644
--- a/README.md
+++ b/README.md
@@ -55,8 +55,8 @@ Type-safe keyboard shortcuts for the web. Template-string bindings, parsed objec
>
> - [**React Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/react/react-hotkeys)
> - [**Preact Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/preact/preact-hotkeys)
-> - [**Solid Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/solid/solid-hotkeys)
-> - Angular Hotkeys – needs a contributor!
+> - [**Solid Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/solid/reference)
+> - [**Angular Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/angular/reference)
> - Svelte Hotkeys – needs a contributor!
> - Vue Hotkeys – needs a contributor!
diff --git a/docs/config.json b/docs/config.json
index 92e9bf8..34bf384 100644
--- a/docs/config.json
+++ b/docs/config.json
@@ -168,6 +168,15 @@
"to": "framework/solid/reference/index"
}
]
+ },
+ {
+ "label": "angular",
+ "children": [
+ {
+ "label": "Angular Inject APIs",
+ "to": "framework/angular/reference/index"
+ }
+ ]
}
]
},
@@ -248,6 +257,27 @@
"to": "framework/solid/reference/interfaces/CreateHotkeyOptions"
}
]
+ },
+ {
+ "label": "angular",
+ "children": [
+ {
+ "label": "injectHotkey",
+ "to": "framework/angular/reference/functions/injectHotkey"
+ },
+ {
+ "label": "InjectHotkeyOptions",
+ "to": "framework/angular/reference/interfaces/InjectHotkeyOptions"
+ },
+ {
+ "label": "provideHotkeys",
+ "to": "framework/angular/reference/functions/provideHotkeys"
+ },
+ {
+ "label": "HotkeysProviderOptions",
+ "to": "framework/angular/reference/interfaces/HotkeysProviderOptions"
+ }
+ ]
}
]
},
@@ -316,6 +346,19 @@
"to": "framework/solid/reference/interfaces/CreateHotkeySequenceOptions"
}
]
+ },
+ {
+ "label": "angular",
+ "children": [
+ {
+ "label": "injectHotkeySequence",
+ "to": "framework/angular/reference/functions/injectHotkeySequence"
+ },
+ {
+ "label": "InjectHotkeySequenceOptions",
+ "to": "framework/angular/reference/interfaces/InjectHotkeySequenceOptions"
+ }
+ ]
}
]
},
@@ -368,6 +411,15 @@
"to": "framework/solid/reference/functions/createKeyHold"
}
]
+ },
+ {
+ "label": "angular",
+ "children": [
+ {
+ "label": "injectKeyHold",
+ "to": "framework/angular/reference/functions/injectKeyHold"
+ }
+ ]
}
]
},
@@ -432,6 +484,19 @@
"to": "framework/solid/reference/functions/createHeldKeyCodes"
}
]
+ },
+ {
+ "label": "angular",
+ "children": [
+ {
+ "label": "injectHeldKeys",
+ "to": "framework/angular/reference/functions/injectHeldKeys"
+ },
+ {
+ "label": "injectHeldKeyCodes",
+ "to": "framework/angular/reference/functions/injectHeldKeyCodes"
+ }
+ ]
}
]
},
@@ -492,6 +557,19 @@
"to": "framework/solid/reference/interfaces/SolidHotkeyRecorder"
}
]
+ },
+ {
+ "label": "angular",
+ "children": [
+ {
+ "label": "injectHotkeyRecorder",
+ "to": "framework/angular/reference/functions/injectHotkeyRecorder"
+ },
+ {
+ "label": "AngularHotkeyRecorder",
+ "to": "framework/angular/reference/interfaces/AngularHotkeyRecorder"
+ }
+ ]
}
]
},
@@ -636,4 +714,4 @@
]
}
]
-}
\ No newline at end of file
+}
diff --git a/docs/framework/angular/reference/functions/injectDefaultHotkeysOptions.md b/docs/framework/angular/reference/functions/injectDefaultHotkeysOptions.md
new file mode 100644
index 0000000..7bc05a2
--- /dev/null
+++ b/docs/framework/angular/reference/functions/injectDefaultHotkeysOptions.md
@@ -0,0 +1,16 @@
+---
+id: injectDefaultHotkeysOptions
+title: injectDefaultHotkeysOptions
+---
+
+# Function: injectDefaultHotkeysOptions()
+
+```ts
+function injectDefaultHotkeysOptions(): HotkeysProviderOptions;
+```
+
+Defined in: [hotkeys-provider.ts:34](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L34)
+
+## Returns
+
+[`HotkeysProviderOptions`](../interfaces/HotkeysProviderOptions.md)
diff --git a/docs/framework/angular/reference/functions/injectHeldKeyCodes.md b/docs/framework/angular/reference/functions/injectHeldKeyCodes.md
new file mode 100644
index 0000000..d36f56e
--- /dev/null
+++ b/docs/framework/angular/reference/functions/injectHeldKeyCodes.md
@@ -0,0 +1,39 @@
+---
+id: injectHeldKeyCodes
+title: injectHeldKeyCodes
+---
+
+# Function: injectHeldKeyCodes()
+
+```ts
+function injectHeldKeyCodes(): Signal>;
+```
+
+Defined in: [injectHeldKeyCodes.ts:28](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHeldKeyCodes.ts#L28)
+
+Angular inject-based API that returns a signal of a map from held key names to their physical `event.code` values.
+
+Useful for debugging which physical key was pressed (e.g. distinguishing
+left vs right Shift via "ShiftLeft" / "ShiftRight").
+
+## Returns
+
+`Signal`\<`Record`\<`string`, `string`\>\>
+
+Signal of record mapping normalized key names to their `event.code` values
+
+## Example
+
+```ts
+@Component({
+ template: `
+ @for (key of heldKeys(); track key) {
+ {{ key }} {{ heldCodes()[key] }}
+ }
+ `,
+})
+export class KeyDebugComponent {
+ heldKeys = injectHeldKeys()
+ heldCodes = injectHeldKeyCodes()
+}
+```
diff --git a/docs/framework/angular/reference/functions/injectHeldKeys.md b/docs/framework/angular/reference/functions/injectHeldKeys.md
new file mode 100644
index 0000000..cf812db
--- /dev/null
+++ b/docs/framework/angular/reference/functions/injectHeldKeys.md
@@ -0,0 +1,34 @@
+---
+id: injectHeldKeys
+title: injectHeldKeys
+---
+
+# Function: injectHeldKeys()
+
+```ts
+function injectHeldKeys(): Signal;
+```
+
+Defined in: [injectHeldKeys.ts:23](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHeldKeys.ts#L23)
+
+Angular inject-based API that returns a signal of currently held keyboard keys.
+
+Subscribes to the global KeyStateTracker and updates whenever keys are
+pressed or released.
+
+## Returns
+
+`Signal`\<`string`[]\>
+
+Signal of array of currently held key names
+
+## Example
+
+```ts
+@Component({
+ template: `Currently pressed: {{ heldKeys().join(' + ') || 'None' }}
`,
+})
+export class KeyDisplayComponent {
+ heldKeys = injectHeldKeys()
+}
+```
diff --git a/docs/framework/angular/reference/functions/injectHotkey.md b/docs/framework/angular/reference/functions/injectHotkey.md
new file mode 100644
index 0000000..4cfa687
--- /dev/null
+++ b/docs/framework/angular/reference/functions/injectHotkey.md
@@ -0,0 +1,89 @@
+---
+id: injectHotkey
+title: injectHotkey
+---
+
+# Function: injectHotkey()
+
+```ts
+function injectHotkey(
+ hotkey,
+ callback,
+ options): void;
+```
+
+Defined in: [injectHotkey.ts:84](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkey.ts#L84)
+
+Angular inject-based API for registering a keyboard hotkey.
+
+Uses the singleton HotkeyManager for efficient event handling.
+The callback receives both the keyboard event and a context object
+containing the hotkey string and parsed hotkey.
+
+Call in an injection context (e.g. constructor or field initializer).
+Uses effect() to track reactive dependencies and update registration
+when options or the callback change.
+
+## Parameters
+
+### hotkey
+
+The hotkey string (e.g. 'Mod+S', 'Escape') or getter function
+
+`RegisterableHotkey` | () => `RegisterableHotkey`
+
+### callback
+
+`HotkeyCallback`
+
+The function to call when the hotkey is pressed
+
+### options
+
+Options for the hotkey behavior, or getter for reactive options
+
+[`InjectHotkeyOptions`](../interfaces/InjectHotkeyOptions.md) | () => [`InjectHotkeyOptions`](../interfaces/InjectHotkeyOptions.md)
+
+## Returns
+
+`void`
+
+## Examples
+
+```ts
+@Component({ ... })
+export class SaveButtonComponent {
+ private readonly saveCount = signal(0)
+
+ constructor() {
+ injectHotkey('Mod+S', (event, { hotkey }) => {
+ event.preventDefault()
+ this.saveCount.update(c => c + 1)
+ })
+ }
+}
+```
+
+```ts
+@Component({ ... })
+export class ModalComponent {
+ isOpen = signal(true)
+
+ constructor() {
+ injectHotkey('Escape', () => this.close(), () => ({ enabled: this.isOpen() }))
+ }
+}
+```
+
+```ts
+@Component({ ... })
+export class EditorComponent {
+ private readonly editorRef = viewChild>('editorRef')
+
+ constructor() {
+ injectHotkey('Mod+B', () => this.toggleBold(), () => ({
+ target: this.editorRef()?.nativeElement ?? null,
+ }))
+ }
+}
+```
diff --git a/docs/framework/angular/reference/functions/injectHotkeyRecorder.md b/docs/framework/angular/reference/functions/injectHotkeyRecorder.md
new file mode 100644
index 0000000..a715fd2
--- /dev/null
+++ b/docs/framework/angular/reference/functions/injectHotkeyRecorder.md
@@ -0,0 +1,53 @@
+---
+id: injectHotkeyRecorder
+title: injectHotkeyRecorder
+---
+
+# Function: injectHotkeyRecorder()
+
+```ts
+function injectHotkeyRecorder(options): AngularHotkeyRecorder;
+```
+
+Defined in: [injectHotkeyRecorder.ts:50](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L50)
+
+Angular inject-based API for recording keyboard shortcuts.
+
+Thin wrapper around the framework-agnostic HotkeyRecorder class: captures
+keyboard events, converts them to hotkey strings, and handles Escape to
+cancel or Backspace/Delete to clear.
+
+## Parameters
+
+### options
+
+Configuration options for the recorder (or getter)
+
+`HotkeyRecorderOptions` | () => `HotkeyRecorderOptions`
+
+## Returns
+
+[`AngularHotkeyRecorder`](../interfaces/AngularHotkeyRecorder.md)
+
+Object with recording state signals and control functions
+
+## Example
+
+```ts
+@Component({ ... })
+export class ShortcutSettingsComponent {
+ shortcut = signal('Mod+S')
+ recorder = injectHotkeyRecorder({
+ onRecord: (hotkey) => this.shortcut.set(hotkey),
+ onCancel: () => console.log('Recording cancelled'),
+ })
+
+ constructor() {
+ injectHotkey(
+ () => this.shortcut(),
+ () => this.handleSave(),
+ () => ({ enabled: !this.recorder.isRecording() }),
+ )
+ }
+}
+```
diff --git a/docs/framework/angular/reference/functions/injectHotkeySequence.md b/docs/framework/angular/reference/functions/injectHotkeySequence.md
new file mode 100644
index 0000000..4423cb0
--- /dev/null
+++ b/docs/framework/angular/reference/functions/injectHotkeySequence.md
@@ -0,0 +1,59 @@
+---
+id: injectHotkeySequence
+title: injectHotkeySequence
+---
+
+# Function: injectHotkeySequence()
+
+```ts
+function injectHotkeySequence(
+ sequence,
+ callback,
+ options): void;
+```
+
+Defined in: [injectHotkeySequence.ts:44](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeySequence.ts#L44)
+
+Angular inject-based API for registering a keyboard shortcut sequence (Vim-style).
+
+Allows you to register multi-key sequences like 'g g' or 'd d' that trigger
+when the full sequence is pressed within a timeout.
+
+## Parameters
+
+### sequence
+
+Array of hotkey strings that form the sequence (or getter function)
+
+`HotkeySequence` | () => `HotkeySequence`
+
+### callback
+
+`HotkeyCallback`
+
+Function to call when the sequence is completed
+
+### options
+
+Options for the sequence behavior (or getter function)
+
+[`InjectHotkeySequenceOptions`](../interfaces/InjectHotkeySequenceOptions.md) | () => [`InjectHotkeySequenceOptions`](../interfaces/InjectHotkeySequenceOptions.md)
+
+## Returns
+
+`void`
+
+## Example
+
+```ts
+@Component({ ... })
+export class VimEditorComponent {
+ lastSequence = signal(null)
+
+ constructor() {
+ injectHotkeySequence(['G', 'G'], () => this.lastSequence.set('gg → Go to top'))
+ injectHotkeySequence(['D', 'D'], () => this.lastSequence.set('dd → Delete line'))
+ injectHotkeySequence(['C', 'I', 'W'], () => this.lastSequence.set('ciw'), { timeout: 500 })
+ }
+}
+```
diff --git a/docs/framework/angular/reference/functions/injectHotkeysContext.md b/docs/framework/angular/reference/functions/injectHotkeysContext.md
new file mode 100644
index 0000000..0bb444e
--- /dev/null
+++ b/docs/framework/angular/reference/functions/injectHotkeysContext.md
@@ -0,0 +1,16 @@
+---
+id: injectHotkeysContext
+title: injectHotkeysContext
+---
+
+# Function: injectHotkeysContext()
+
+```ts
+function injectHotkeysContext(): HotkeysContextValue | null;
+```
+
+Defined in: [hotkeys-provider.ts:30](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L30)
+
+## Returns
+
+[`HotkeysContextValue`](../interfaces/HotkeysContextValue.md) \| `null`
diff --git a/docs/framework/angular/reference/functions/injectKeyHold.md b/docs/framework/angular/reference/functions/injectKeyHold.md
new file mode 100644
index 0000000..93b8238
--- /dev/null
+++ b/docs/framework/angular/reference/functions/injectKeyHold.md
@@ -0,0 +1,55 @@
+---
+id: injectKeyHold
+title: injectKeyHold
+---
+
+# Function: injectKeyHold()
+
+```ts
+function injectKeyHold(key): Signal;
+```
+
+Defined in: [injectKeyHold.ts:40](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectKeyHold.ts#L40)
+
+Angular inject-based API that returns a signal that is true when the given key is held.
+
+Subscribes to the global KeyStateTracker and uses a computed to determine
+if the specified key is held.
+
+## Parameters
+
+### key
+
+The key to check (e.g. 'Shift', 'Control', 'Space') - can be a getter function
+
+`HeldKey` | () => `HeldKey`
+
+## Returns
+
+`Signal`\<`boolean`\>
+
+Signal that returns true if the key is currently held down
+
+## Examples
+
+```ts
+@Component({
+ template: `{{ isShiftHeld() ? 'Shift is pressed!' : 'Press Shift' }}`,
+})
+export class ShiftIndicatorComponent {
+ isShiftHeld = injectKeyHold('Shift')
+}
+```
+
+```ts
+@Component({
+ template: `
+ Ctrl
+ Shift
+ `,
+})
+export class ModifierIndicatorsComponent {
+ ctrl = injectKeyHold('Control')
+ shift = injectKeyHold('Shift')
+}
+```
diff --git a/docs/framework/angular/reference/functions/provideHotkeys.md b/docs/framework/angular/reference/functions/provideHotkeys.md
new file mode 100644
index 0000000..f07f3ad
--- /dev/null
+++ b/docs/framework/angular/reference/functions/provideHotkeys.md
@@ -0,0 +1,34 @@
+---
+id: provideHotkeys
+title: provideHotkeys
+---
+
+# Function: provideHotkeys()
+
+```ts
+function provideHotkeys(defaultOptions?): object;
+```
+
+Defined in: [hotkeys-provider.ts:20](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L20)
+
+## Parameters
+
+### defaultOptions?
+
+[`HotkeysProviderOptions`](../interfaces/HotkeysProviderOptions.md)
+
+## Returns
+
+`object`
+
+### provide
+
+```ts
+provide: InjectionToken;
+```
+
+### useValue
+
+```ts
+useValue: HotkeysContextValue;
+```
diff --git a/docs/framework/angular/reference/index.md b/docs/framework/angular/reference/index.md
new file mode 100644
index 0000000..d104632
--- /dev/null
+++ b/docs/framework/angular/reference/index.md
@@ -0,0 +1,30 @@
+---
+id: "@tanstack/angular-hotkeys"
+title: "@tanstack/angular-hotkeys"
+---
+
+# @tanstack/angular-hotkeys
+
+## Interfaces
+
+- [AngularHotkeyRecorder](interfaces/AngularHotkeyRecorder.md)
+- [HotkeysContextValue](interfaces/HotkeysContextValue.md)
+- [HotkeysProviderOptions](interfaces/HotkeysProviderOptions.md)
+- [InjectHotkeyOptions](interfaces/InjectHotkeyOptions.md)
+- [InjectHotkeySequenceOptions](interfaces/InjectHotkeySequenceOptions.md)
+
+## Variables
+
+- [HOTKEYS\_INJECTION\_TOKEN](variables/HOTKEYS_INJECTION_TOKEN.md)
+
+## Functions
+
+- [injectDefaultHotkeysOptions](functions/injectDefaultHotkeysOptions.md)
+- [injectHeldKeyCodes](functions/injectHeldKeyCodes.md)
+- [injectHeldKeys](functions/injectHeldKeys.md)
+- [injectHotkey](functions/injectHotkey.md)
+- [injectHotkeyRecorder](functions/injectHotkeyRecorder.md)
+- [injectHotkeysContext](functions/injectHotkeysContext.md)
+- [injectHotkeySequence](functions/injectHotkeySequence.md)
+- [injectKeyHold](functions/injectKeyHold.md)
+- [provideHotkeys](functions/provideHotkeys.md)
diff --git a/docs/framework/angular/reference/interfaces/AngularHotkeyRecorder.md b/docs/framework/angular/reference/interfaces/AngularHotkeyRecorder.md
new file mode 100644
index 0000000..0aaca78
--- /dev/null
+++ b/docs/framework/angular/reference/interfaces/AngularHotkeyRecorder.md
@@ -0,0 +1,88 @@
+---
+id: AngularHotkeyRecorder
+title: AngularHotkeyRecorder
+---
+
+# Interface: AngularHotkeyRecorder
+
+Defined in: [injectHotkeyRecorder.ts:7](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L7)
+
+## Properties
+
+### cancelRecording()
+
+```ts
+cancelRecording: () => void;
+```
+
+Defined in: [injectHotkeyRecorder.ts:17](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L17)
+
+Cancel recording without saving
+
+#### Returns
+
+`void`
+
+***
+
+### isRecording()
+
+```ts
+isRecording: () => boolean;
+```
+
+Defined in: [injectHotkeyRecorder.ts:9](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L9)
+
+Whether recording is currently active
+
+#### Returns
+
+`boolean`
+
+***
+
+### recordedHotkey()
+
+```ts
+recordedHotkey: () => Hotkey | null;
+```
+
+Defined in: [injectHotkeyRecorder.ts:11](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L11)
+
+The currently recorded hotkey (for live preview)
+
+#### Returns
+
+`Hotkey` \| `null`
+
+***
+
+### startRecording()
+
+```ts
+startRecording: () => void;
+```
+
+Defined in: [injectHotkeyRecorder.ts:13](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L13)
+
+Start recording a new hotkey
+
+#### Returns
+
+`void`
+
+***
+
+### stopRecording()
+
+```ts
+stopRecording: () => void;
+```
+
+Defined in: [injectHotkeyRecorder.ts:15](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L15)
+
+Stop recording (same as cancel)
+
+#### Returns
+
+`void`
diff --git a/docs/framework/angular/reference/interfaces/HotkeysContextValue.md b/docs/framework/angular/reference/interfaces/HotkeysContextValue.md
new file mode 100644
index 0000000..c46a7b9
--- /dev/null
+++ b/docs/framework/angular/reference/interfaces/HotkeysContextValue.md
@@ -0,0 +1,18 @@
+---
+id: HotkeysContextValue
+title: HotkeysContextValue
+---
+
+# Interface: HotkeysContextValue
+
+Defined in: [hotkeys-provider.ts:12](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L12)
+
+## Properties
+
+### defaultOptions
+
+```ts
+defaultOptions: HotkeysProviderOptions;
+```
+
+Defined in: [hotkeys-provider.ts:13](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L13)
diff --git a/docs/framework/angular/reference/interfaces/HotkeysProviderOptions.md b/docs/framework/angular/reference/interfaces/HotkeysProviderOptions.md
new file mode 100644
index 0000000..bcccc27
--- /dev/null
+++ b/docs/framework/angular/reference/interfaces/HotkeysProviderOptions.md
@@ -0,0 +1,38 @@
+---
+id: HotkeysProviderOptions
+title: HotkeysProviderOptions
+---
+
+# Interface: HotkeysProviderOptions
+
+Defined in: [hotkeys-provider.ts:6](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L6)
+
+## Properties
+
+### hotkey?
+
+```ts
+optional hotkey: Partial;
+```
+
+Defined in: [hotkeys-provider.ts:7](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L7)
+
+***
+
+### hotkeyRecorder?
+
+```ts
+optional hotkeyRecorder: Partial;
+```
+
+Defined in: [hotkeys-provider.ts:8](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L8)
+
+***
+
+### hotkeySequence?
+
+```ts
+optional hotkeySequence: Partial;
+```
+
+Defined in: [hotkeys-provider.ts:9](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L9)
diff --git a/docs/framework/angular/reference/interfaces/InjectHotkeyOptions.md b/docs/framework/angular/reference/interfaces/InjectHotkeyOptions.md
new file mode 100644
index 0000000..a840c0b
--- /dev/null
+++ b/docs/framework/angular/reference/interfaces/InjectHotkeyOptions.md
@@ -0,0 +1,28 @@
+---
+id: InjectHotkeyOptions
+title: InjectHotkeyOptions
+---
+
+# Interface: InjectHotkeyOptions
+
+Defined in: [injectHotkey.ts:17](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkey.ts#L17)
+
+## Extends
+
+- `Omit`\<`HotkeyOptions`, `"target"`\>
+
+## Properties
+
+### target?
+
+```ts
+optional target: HTMLElement | Document | Window | null;
+```
+
+Defined in: [injectHotkey.ts:25](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkey.ts#L25)
+
+The DOM element to attach the event listener to.
+Can be a direct DOM element, an accessor (for reactive targets that become
+available after mount), or null. Defaults to document.
+When using scoped targets, pass an accessor: () => ({ target: elementSignal() })
+so the hotkey waits for the element to be attached before registering.
diff --git a/docs/framework/angular/reference/interfaces/InjectHotkeySequenceOptions.md b/docs/framework/angular/reference/interfaces/InjectHotkeySequenceOptions.md
new file mode 100644
index 0000000..44ce349
--- /dev/null
+++ b/docs/framework/angular/reference/interfaces/InjectHotkeySequenceOptions.md
@@ -0,0 +1,24 @@
+---
+id: InjectHotkeySequenceOptions
+title: InjectHotkeySequenceOptions
+---
+
+# Interface: InjectHotkeySequenceOptions
+
+Defined in: [injectHotkeySequence.ts:11](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeySequence.ts#L11)
+
+## Extends
+
+- `Omit`\<`SequenceOptions`, `"enabled"`\>
+
+## Properties
+
+### enabled?
+
+```ts
+optional enabled: boolean;
+```
+
+Defined in: [injectHotkeySequence.ts:16](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeySequence.ts#L16)
+
+Whether the sequence is enabled. Defaults to true.
diff --git a/docs/framework/angular/reference/variables/HOTKEYS_INJECTION_TOKEN.md b/docs/framework/angular/reference/variables/HOTKEYS_INJECTION_TOKEN.md
new file mode 100644
index 0000000..ff66185
--- /dev/null
+++ b/docs/framework/angular/reference/variables/HOTKEYS_INJECTION_TOKEN.md
@@ -0,0 +1,12 @@
+---
+id: HOTKEYS_INJECTION_TOKEN
+title: HOTKEYS_INJECTION_TOKEN
+---
+
+# Variable: HOTKEYS\_INJECTION\_TOKEN
+
+```ts
+const HOTKEYS_INJECTION_TOKEN: InjectionToken;
+```
+
+Defined in: [hotkeys-provider.ts:16](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L16)
diff --git a/docs/installation.md b/docs/installation.md
index 0053f4c..e50e979 100644
--- a/docs/installation.md
+++ b/docs/installation.md
@@ -9,6 +9,8 @@ TanStack Hotkeys is compatible with various front-end frameworks. Install the co
react: @tanstack/react-hotkeys
preact: @tanstack/preact-hotkeys
+solid: @tanstack/solid-hotkeys
+angular: @tanstack/angular-hotkeys
diff --git a/docs/overview.md b/docs/overview.md
index 528756d..22bf14e 100644
--- a/docs/overview.md
+++ b/docs/overview.md
@@ -46,7 +46,7 @@ Surprisingly, in our experience, even AI often struggles to get hotkey managemen
- Platform-aware formatting (e.g., `⌘⇧S` on Mac vs `Ctrl+Shift+S` on Windows) for cheatsheet UIs
- **Framework Adapters**
- - React hooks: `useHotkey`, `useHotkeySequence`, `useHotkeyRecorder`, `useHeldKeys`, and more
+ - React hooks, Solid primitives, and Angular inject APIs
- **Awesome Devtools!**
- See all currently registered hotkeys, held keys, and more in real-time.
diff --git a/packages/angular-hotkeys/src/hotkeys-provider.ts b/packages/angular-hotkeys/src/hotkeys-provider.ts
index 77d6488..fc119a7 100644
--- a/packages/angular-hotkeys/src/hotkeys-provider.ts
+++ b/packages/angular-hotkeys/src/hotkeys-provider.ts
@@ -1,7 +1,7 @@
-import { inject, InjectionToken } from '@angular/core'
+import { InjectionToken, inject } from '@angular/core'
import type { HotkeyRecorderOptions } from '@tanstack/hotkeys'
-import { InjectHotkeyOptions } from './injectHotkey'
-import { InjectHotkeySequenceOptions } from './injectHotkeySequence'
+import type { InjectHotkeyOptions } from './injectHotkey'
+import type { InjectHotkeySequenceOptions } from './injectHotkeySequence'
export interface HotkeysProviderOptions {
hotkey?: Partial
diff --git a/packages/angular-hotkeys/src/injectHeldKeys.ts b/packages/angular-hotkeys/src/injectHeldKeys.ts
index 5d768a4..2370c27 100644
--- a/packages/angular-hotkeys/src/injectHeldKeys.ts
+++ b/packages/angular-hotkeys/src/injectHeldKeys.ts
@@ -20,7 +20,7 @@ import type { Signal } from '@angular/core'
* }
* ```
*/
-export function injectHeldKeys(): Signal {
+export function injectHeldKeys(): Signal> {
const tracker = getKeyStateTracker()
return injectStore(tracker.store, (state) => state.heldKeys)
}
diff --git a/packages/angular-hotkeys/src/injectHotkeyRecorder.ts b/packages/angular-hotkeys/src/injectHotkeyRecorder.ts
index e89cf5b..6ab13df 100644
--- a/packages/angular-hotkeys/src/injectHotkeyRecorder.ts
+++ b/packages/angular-hotkeys/src/injectHotkeyRecorder.ts
@@ -1,8 +1,8 @@
-import { DestroyRef, effect, inject, type Signal } from '@angular/core'
+import { injectStore } from '@tanstack/angular-store'
+import { DestroyRef, effect, inject } from '@angular/core'
import { HotkeyRecorder } from '@tanstack/hotkeys'
import { injectDefaultHotkeysOptions } from './hotkeys-provider'
import type { Hotkey, HotkeyRecorderOptions } from '@tanstack/hotkeys'
-import { injectStore } from '@tanstack/angular-store'
export interface AngularHotkeyRecorder {
/** Whether recording is currently active */
@@ -24,7 +24,7 @@ export interface AngularHotkeyRecorder {
* keyboard events, converts them to hotkey strings, and handles Escape to
* cancel or Backspace/Delete to clear.
*
- * @param options - Configuration options for the recorder (or signal/getter)
+ * @param options - Configuration options for the recorder (or getter)
* @returns Object with recording state signals and control functions
*
* @example
@@ -48,7 +48,7 @@ export interface AngularHotkeyRecorder {
* ```
*/
export function injectHotkeyRecorder(
- options: HotkeyRecorderOptions | Signal,
+ options: HotkeyRecorderOptions | (() => HotkeyRecorderOptions),
): AngularHotkeyRecorder {
const defaultOptions = injectDefaultHotkeysOptions()
const destroyRef = inject(DestroyRef)
@@ -66,7 +66,7 @@ export function injectHotkeyRecorder(
const isRecording = injectStore(recorder.store, (state) => state.isRecording)
const recordedHotkey = injectStore(
recorder.store,
- (state) => state.recordedHotkey
+ (state) => state.recordedHotkey,
)
// Sync options on every effect run (matches React's sync on render)
diff --git a/packages/angular-hotkeys/src/injectKeyHold.ts b/packages/angular-hotkeys/src/injectKeyHold.ts
index 5810eb3..965b71a 100644
--- a/packages/angular-hotkeys/src/injectKeyHold.ts
+++ b/packages/angular-hotkeys/src/injectKeyHold.ts
@@ -1,7 +1,8 @@
-import { computed, type Signal } from '@angular/core'
+import { computed } from '@angular/core'
import { injectStore } from '@tanstack/angular-store'
import { getKeyStateTracker } from '@tanstack/hotkeys'
import type { HeldKey } from '@tanstack/hotkeys'
+import type { Signal } from '@angular/core'
/**
* Angular inject-based API that returns a signal that is true when the given key is held.
From 8b0b7fbb3854006d360b4c77cbd6a438993ce6cb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?=
Date: Thu, 19 Feb 2026 23:59:33 -0300
Subject: [PATCH 03/11] tests: add angular inject hotkey tests
---
packages/angular-hotkeys/package.json | 1 +
.../tests/injectHotkey.test.ts | 247 ++++++++++++++++++
packages/angular-hotkeys/tests/setup.ts | 13 +
packages/angular-hotkeys/vitest.config.ts | 13 +
pnpm-lock.yaml | 3 +
vitest.workspace.ts | 1 +
6 files changed, 278 insertions(+)
create mode 100644 packages/angular-hotkeys/tests/injectHotkey.test.ts
create mode 100644 packages/angular-hotkeys/tests/setup.ts
create mode 100644 packages/angular-hotkeys/vitest.config.ts
diff --git a/packages/angular-hotkeys/package.json b/packages/angular-hotkeys/package.json
index f442978..52015ba 100644
--- a/packages/angular-hotkeys/package.json
+++ b/packages/angular-hotkeys/package.json
@@ -61,6 +61,7 @@
"devDependencies": {
"@angular/common": "^19.0.0",
"@angular/core": "^19.0.0",
+ "@angular/platform-browser-dynamic": "^19.0.0",
"typescript": "5.9.3"
}
}
diff --git a/packages/angular-hotkeys/tests/injectHotkey.test.ts b/packages/angular-hotkeys/tests/injectHotkey.test.ts
new file mode 100644
index 0000000..eba26a2
--- /dev/null
+++ b/packages/angular-hotkeys/tests/injectHotkey.test.ts
@@ -0,0 +1,247 @@
+// @vitest-environment happy-dom
+import { provideExperimentalZonelessChangeDetection, signal } from '@angular/core'
+import { TestBed } from '@angular/core/testing'
+import { HotkeyManager } from '@tanstack/hotkeys'
+import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
+import { injectHotkey } from '../src/injectHotkey'
+
+describe('injectHotkey', () => {
+ beforeEach(() => {
+ HotkeyManager.resetInstance()
+ TestBed.configureTestingModule({
+ providers: [provideExperimentalZonelessChangeDetection()],
+ })
+ })
+
+ afterEach(() => {
+ TestBed.resetTestingModule()
+ HotkeyManager.resetInstance()
+ })
+
+ it('should register a hotkey handler', () => {
+ const callback = vi.fn()
+ const addEventListenerSpy = vi.spyOn(document, 'addEventListener')
+
+ TestBed.runInInjectionContext(() => {
+ injectHotkey('Mod+S', callback, { platform: 'mac' })
+ })
+ TestBed.flushEffects()
+
+ expect(addEventListenerSpy).toHaveBeenCalledWith(
+ 'keydown',
+ expect.any(Function),
+ )
+
+ addEventListenerSpy.mockRestore()
+ })
+
+ it('should remove handler on unmount', () => {
+ const callback = vi.fn()
+ const removeEventListenerSpy = vi.spyOn(document, 'removeEventListener')
+
+ TestBed.runInInjectionContext(() => {
+ injectHotkey('Mod+S', callback, { platform: 'mac' })
+ })
+ TestBed.flushEffects()
+
+ TestBed.resetTestingModule()
+
+ expect(removeEventListenerSpy).toHaveBeenCalledWith(
+ 'keydown',
+ expect.any(Function),
+ )
+
+ removeEventListenerSpy.mockRestore()
+ })
+
+ it('should call callback when hotkey matches', () => {
+ const callback = vi.fn()
+
+ TestBed.runInInjectionContext(() => {
+ injectHotkey('Mod+S', callback, { platform: 'mac' })
+ })
+ TestBed.flushEffects()
+
+ const event = new KeyboardEvent('keydown', {
+ key: 's',
+ metaKey: true,
+ bubbles: true,
+ })
+ document.dispatchEvent(event)
+
+ expect(callback).toHaveBeenCalled()
+ })
+
+ it('should not call callback when hotkey does not match', () => {
+ const callback = vi.fn()
+
+ TestBed.runInInjectionContext(() => {
+ injectHotkey('Mod+S', callback, { platform: 'mac' })
+ })
+ TestBed.flushEffects()
+
+ const event = new KeyboardEvent('keydown', {
+ key: 'a',
+ metaKey: true,
+ bubbles: true,
+ })
+ document.dispatchEvent(event)
+
+ expect(callback).not.toHaveBeenCalled()
+ })
+
+ it('should use keyup event when specified', () => {
+ const callback = vi.fn()
+ const addEventListenerSpy = vi.spyOn(document, 'addEventListener')
+
+ TestBed.runInInjectionContext(() => {
+ injectHotkey('Escape', callback, { eventType: 'keyup' })
+ })
+ TestBed.flushEffects()
+
+ expect(addEventListenerSpy).toHaveBeenCalledWith(
+ 'keyup',
+ expect.any(Function),
+ )
+
+ addEventListenerSpy.mockRestore()
+ })
+
+ describe('stale closure prevention', () => {
+ it('should have access to latest state values in callback', () => {
+ const capturedValues: Array = []
+ const count = signal(0)
+
+ TestBed.runInInjectionContext(() => {
+ injectHotkey(
+ 'Mod+S',
+ () => {
+ capturedValues.push(count())
+ },
+ { platform: 'mac' },
+ )
+ })
+ TestBed.flushEffects()
+
+ document.dispatchEvent(
+ new KeyboardEvent('keydown', {
+ key: 's',
+ metaKey: true,
+ bubbles: true,
+ }),
+ )
+ expect(capturedValues).toEqual([0])
+
+ count.update((c) => c + 5)
+ TestBed.flushEffects()
+
+ document.dispatchEvent(
+ new KeyboardEvent('keydown', {
+ key: 's',
+ metaKey: true,
+ bubbles: true,
+ }),
+ )
+ expect(capturedValues).toEqual([0, 5])
+
+ count.update((c) => c + 5)
+ TestBed.flushEffects()
+
+ document.dispatchEvent(
+ new KeyboardEvent('keydown', {
+ key: 's',
+ metaKey: true,
+ bubbles: true,
+ }),
+ )
+ expect(capturedValues).toEqual([0, 5, 10])
+ })
+
+ it('should sync enabled option when accessor changes', () => {
+ const callback = vi.fn()
+ const enabled = signal(true)
+
+ TestBed.runInInjectionContext(() => {
+ injectHotkey('Mod+S', callback, () => ({
+ platform: 'mac',
+ enabled: enabled(),
+ }))
+ })
+ TestBed.flushEffects()
+
+ document.dispatchEvent(
+ new KeyboardEvent('keydown', {
+ key: 's',
+ metaKey: true,
+ bubbles: true,
+ }),
+ )
+ expect(callback).toHaveBeenCalledTimes(1)
+
+ enabled.set(false)
+ TestBed.flushEffects()
+
+ document.dispatchEvent(
+ new KeyboardEvent('keydown', {
+ key: 's',
+ metaKey: true,
+ bubbles: true,
+ }),
+ )
+ expect(callback).toHaveBeenCalledTimes(1)
+
+ enabled.set(true)
+ TestBed.flushEffects()
+
+ document.dispatchEvent(
+ new KeyboardEvent('keydown', {
+ key: 's',
+ metaKey: true,
+ bubbles: true,
+ }),
+ )
+ expect(callback).toHaveBeenCalledTimes(2)
+ })
+ })
+
+ describe('target handling', () => {
+ it('should wait for target signal to be attached', () => {
+ const callback = vi.fn()
+ const target = signal(null)
+
+ TestBed.runInInjectionContext(() => {
+ injectHotkey('Mod+S', callback, () => ({
+ target: target(),
+ platform: 'mac',
+ }))
+ })
+ TestBed.flushEffects()
+
+ document.dispatchEvent(
+ new KeyboardEvent('keydown', {
+ key: 's',
+ metaKey: true,
+ bubbles: true,
+ }),
+ )
+ expect(callback).not.toHaveBeenCalled()
+
+ const targetEl = document.createElement('div')
+ document.body.appendChild(targetEl)
+ target.set(targetEl)
+ TestBed.flushEffects()
+
+ targetEl.dispatchEvent(
+ new KeyboardEvent('keydown', {
+ key: 's',
+ metaKey: true,
+ bubbles: true,
+ }),
+ )
+
+ expect(callback).toHaveBeenCalled()
+
+ targetEl.remove()
+ })
+ })
+})
diff --git a/packages/angular-hotkeys/tests/setup.ts b/packages/angular-hotkeys/tests/setup.ts
new file mode 100644
index 0000000..836e20e
--- /dev/null
+++ b/packages/angular-hotkeys/tests/setup.ts
@@ -0,0 +1,13 @@
+import { TestBed } from '@angular/core/testing'
+import {
+ BrowserDynamicTestingModule,
+ platformBrowserDynamicTesting,
+} from '@angular/platform-browser-dynamic/testing'
+
+TestBed.initTestEnvironment(
+ BrowserDynamicTestingModule,
+ platformBrowserDynamicTesting(),
+ {
+ teardown: { destroyAfterEach: true },
+ },
+)
diff --git a/packages/angular-hotkeys/vitest.config.ts b/packages/angular-hotkeys/vitest.config.ts
new file mode 100644
index 0000000..c8a6118
--- /dev/null
+++ b/packages/angular-hotkeys/vitest.config.ts
@@ -0,0 +1,13 @@
+import { defineConfig } from 'vitest/config'
+import packageJson from './package.json' with { type: 'json' }
+
+export default defineConfig({
+ test: {
+ name: packageJson.name,
+ dir: './tests',
+ watch: false,
+ environment: 'happy-dom',
+ globals: true,
+ setupFiles: ['./tests/setup.ts'],
+ },
+})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7eb58c9..439b350 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -872,6 +872,9 @@ importers:
'@angular/core':
specifier: ^19.0.0
version: 19.2.18(rxjs@7.8.2)(zone.js@0.15.1)
+ '@angular/platform-browser-dynamic':
+ specifier: ^19.0.0
+ version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.18)(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))
typescript:
specifier: 5.9.3
version: 5.9.3
diff --git a/vitest.workspace.ts b/vitest.workspace.ts
index f6ddff8..5d00262 100644
--- a/vitest.workspace.ts
+++ b/vitest.workspace.ts
@@ -11,6 +11,7 @@ export default defineConfig({
'./packages/react-hotkeys/vitest.config.ts',
'./packages/solid-hotkeys-devtools/vitest.config.ts',
'./packages/solid-hotkeys/vitest.config.ts',
+ './packages/angular-hotkeys/vitest.config.ts',
],
},
})
From 172a7089a3a8e140c2fc40768c7c262527721f7a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?=
Date: Fri, 20 Feb 2026 00:10:46 -0300
Subject: [PATCH 04/11] chore: format angular code
---
examples/angular/injectHeldKeys/angular.json | 60 +++-
examples/angular/injectHeldKeys/package.json | 40 ++-
.../injectHeldKeys/src/app/app.component.html | 10 +-
.../injectHeldKeys/src/app/app.component.ts | 26 +-
.../injectHeldKeys/src/app/app.config.ts | 6 +-
examples/angular/injectHeldKeys/src/main.ts | 8 +-
examples/angular/injectHeldKeys/tsconfig.json | 30 +-
examples/angular/injectHotkey/angular.json | 17 +-
examples/angular/injectHotkey/package.json | 6 +-
.../injectHotkey/src/app/app.component.html | 230 ++++++++----
.../injectHotkey/src/app/app.component.ts | 336 +++++++++---------
.../injectHotkey/src/app/app.config.ts | 6 +-
examples/angular/injectHotkey/src/main.ts | 9 +-
.../angular/injectHotkeyRecorder/angular.json | 64 +++-
.../angular/injectHotkeyRecorder/package.json | 40 ++-
.../src/app/app.component.html | 12 +-
.../src/app/app.component.ts | 125 ++++---
.../src/app/app.config.ts | 6 +-
.../src/app/shortcut-list-item.component.ts | 20 +-
.../angular/injectHotkeyRecorder/src/main.ts | 8 +-
.../injectHotkeyRecorder/tsconfig.json | 30 +-
.../angular/injectHotkeySequence/angular.json | 64 +++-
.../angular/injectHotkeySequence/package.json | 40 ++-
.../src/app/app.component.html | 12 +-
.../src/app/app.component.ts | 49 ++-
.../src/app/app.config.ts | 6 +-
.../angular/injectHotkeySequence/src/main.ts | 8 +-
.../injectHotkeySequence/tsconfig.json | 30 +-
examples/angular/injectKeyHold/angular.json | 60 +++-
examples/angular/injectKeyHold/package.json | 40 ++-
.../injectKeyHold/src/app/app.component.html | 14 +-
.../injectKeyHold/src/app/app.component.ts | 14 +-
.../injectKeyHold/src/app/app.config.ts | 6 +-
examples/angular/injectKeyHold/src/main.ts | 8 +-
examples/angular/injectKeyHold/tsconfig.json | 30 +-
packages/angular-hotkeys/README.md | 106 +++---
packages/angular-hotkeys/package.json | 6 +-
packages/angular-hotkeys/src/injectHotkey.ts | 5 +-
.../src/injectHotkeySequence.ts | 2 -
packages/angular-hotkeys/src/injectKeyHold.ts | 4 +-
.../tests/injectHotkey.test.ts | 5 +-
pnpm-lock.yaml | 89 +++--
scripts/generate-docs.ts | 2 +-
43 files changed, 1159 insertions(+), 530 deletions(-)
diff --git a/examples/angular/injectHeldKeys/angular.json b/examples/angular/injectHeldKeys/angular.json
index 2c5ae93..3788cbb 100644
--- a/examples/angular/injectHeldKeys/angular.json
+++ b/examples/angular/injectHeldKeys/angular.json
@@ -1 +1,59 @@
-{"$schema":"./node_modules/@angular/cli/lib/config/schema.json","version":1,"newProjectRoot":"projects","projects":{"injectHeldKeys":{"projectType":"application","schematics":{"@schematics/angular:class":{"skipTests":true},"@schematics/angular:component":{"skipTests":true}},"root":"","sourceRoot":"src","prefix":"app","architect":{"build":{"builder":"@angular-devkit/build-angular:application","options":{"outputPath":"dist/inject-held-keys","index":"src/index.html","browser":"src/main.ts","polyfills":["zone.js"],"tsConfig":"tsconfig.json","assets":[],"styles":["src/styles.css"],"scripts":[]},"configurations":{"production":{"budgets":[{"type":"initial","maximumWarning":"500kB","maximumError":"1MB"}],"outputHashing":"all"},"development":{"optimization":false,"extractLicenses":false,"sourceMap":true}},"defaultConfiguration":"production"},"serve":{"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"injectHeldKeys:build:production"},"development":{"buildTarget":"injectHeldKeys:build:development"}},"defaultConfiguration":"development"}}}},"cli":{"analytics":false}}
+{
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+ "version": 1,
+ "newProjectRoot": "projects",
+ "projects": {
+ "injectHeldKeys": {
+ "projectType": "application",
+ "schematics": {
+ "@schematics/angular:class": { "skipTests": true },
+ "@schematics/angular:component": { "skipTests": true }
+ },
+ "root": "",
+ "sourceRoot": "src",
+ "prefix": "app",
+ "architect": {
+ "build": {
+ "builder": "@angular-devkit/build-angular:application",
+ "options": {
+ "outputPath": "dist/inject-held-keys",
+ "index": "src/index.html",
+ "browser": "src/main.ts",
+ "polyfills": ["zone.js"],
+ "tsConfig": "tsconfig.json",
+ "assets": [],
+ "styles": ["src/styles.css"],
+ "scripts": []
+ },
+ "configurations": {
+ "production": {
+ "budgets": [
+ {
+ "type": "initial",
+ "maximumWarning": "500kB",
+ "maximumError": "1MB"
+ }
+ ],
+ "outputHashing": "all"
+ },
+ "development": {
+ "optimization": false,
+ "extractLicenses": false,
+ "sourceMap": true
+ }
+ },
+ "defaultConfiguration": "production"
+ },
+ "serve": {
+ "builder": "@angular-devkit/build-angular:dev-server",
+ "configurations": {
+ "production": { "buildTarget": "injectHeldKeys:build:production" },
+ "development": { "buildTarget": "injectHeldKeys:build:development" }
+ },
+ "defaultConfiguration": "development"
+ }
+ }
+ }
+ },
+ "cli": { "analytics": false }
+}
diff --git a/examples/angular/injectHeldKeys/package.json b/examples/angular/injectHeldKeys/package.json
index fc4ab7d..d9e6cd0 100644
--- a/examples/angular/injectHeldKeys/package.json
+++ b/examples/angular/injectHeldKeys/package.json
@@ -1 +1,39 @@
-{"name":"inject-held-keys","version":"0.0.0","scripts":{"ng":"ng","start":"ng serve --port=3071","dev":"ng serve --port=3071","build":"ng build","watch":"ng build --watch --configuration development","test":"ng test"},"private":true,"dependencies":{"@tanstack/angular-hotkeys":"workspace:*","@angular/common":"^19.2.0","@angular/compiler":"^19.2.0","@angular/core":"^19.2.0","@angular/forms":"^19.2.0","@angular/platform-browser":"^19.2.0","@angular/platform-browser-dynamic":"^19.2.0","@angular/router":"^19.2.0","rxjs":"~7.8.0","tslib":"^2.3.0","zone.js":"~0.15.0"},"devDependencies":{"@angular-devkit/build-angular":"^19.2.20","@angular/cli":"^19.2.20","@angular/compiler-cli":"^19.2.0","@types/jasmine":"~5.1.0","jasmine-core":"~5.6.0","karma":"~6.4.0","karma-chrome-launcher":"~3.2.0","karma-coverage":"~2.2.0","karma-jasmine":"~5.1.0","karma-jasmine-html-reporter":"~2.1.0","typescript":"~5.7.2"}}
+{
+ "name": "inject-held-keys",
+ "version": "0.0.0",
+ "scripts": {
+ "ng": "ng",
+ "start": "ng serve --port=3071",
+ "dev": "ng serve --port=3071",
+ "build": "ng build",
+ "watch": "ng build --watch --configuration development",
+ "test": "ng test"
+ },
+ "private": true,
+ "dependencies": {
+ "@angular/common": "^19.2.0",
+ "@angular/compiler": "^19.2.0",
+ "@angular/core": "^19.2.0",
+ "@angular/forms": "^19.2.0",
+ "@angular/platform-browser": "^19.2.0",
+ "@angular/platform-browser-dynamic": "^19.2.0",
+ "@angular/router": "^19.2.0",
+ "@tanstack/angular-hotkeys": "workspace:*",
+ "rxjs": "~7.8.0",
+ "tslib": "^2.3.0",
+ "zone.js": "~0.15.0"
+ },
+ "devDependencies": {
+ "@angular-devkit/build-angular": "^19.2.20",
+ "@angular/cli": "^19.2.20",
+ "@angular/compiler-cli": "^19.2.0",
+ "@types/jasmine": "~5.1.0",
+ "jasmine-core": "~5.6.0",
+ "karma": "~6.4.0",
+ "karma-chrome-launcher": "~3.2.0",
+ "karma-coverage": "~2.2.0",
+ "karma-jasmine": "~5.1.0",
+ "karma-jasmine-html-reporter": "~2.1.0",
+ "typescript": "5.9.3"
+ }
+}
diff --git a/examples/angular/injectHeldKeys/src/app/app.component.html b/examples/angular/injectHeldKeys/src/app/app.component.html
index 9c4c7ea..24351e6 100644
--- a/examples/angular/injectHeldKeys/src/app/app.component.html
+++ b/examples/angular/injectHeldKeys/src/app/app.component.html
@@ -36,14 +36,18 @@ Currently Held Keys
Usage
- import {{ '{' }} injectHeldKeys {{ '}' }} from '@tanstack/angular-hotkeys'
+
+import {{ '{' }} injectHeldKeys {{ '}' }} from '@tanstack/angular-hotkeys'
@Component({{ '{' }} ... {{ '}' }})
export class KeyDisplayComponent {{ '{' }}
heldKeys = injectHeldKeys()
- // Template: Currently pressed: {{ '{{' }} heldKeys().join(' + ') || 'None' {{ '}}' }}
-{{ '}' }}
+ // Template: Currently pressed: {{
+ '{{'
+ }} heldKeys().join(' + ') || 'None' {{ '}}' }}
+{{ '}' }}
diff --git a/examples/angular/injectHeldKeys/src/app/app.component.ts b/examples/angular/injectHeldKeys/src/app/app.component.ts
index b1180c0..4c67aff 100644
--- a/examples/angular/injectHeldKeys/src/app/app.component.ts
+++ b/examples/angular/injectHeldKeys/src/app/app.component.ts
@@ -1,9 +1,9 @@
-import { Component, effect, signal } from '@angular/core';
+import { Component, effect, signal } from '@angular/core'
import {
formatKeyForDebuggingDisplay,
injectHeldKeys,
injectHeldKeyCodes,
-} from '@tanstack/angular-hotkeys';
+} from '@tanstack/angular-hotkeys'
@Component({
selector: 'app-root',
@@ -12,29 +12,29 @@ import {
styleUrl: './app.component.css',
})
export class AppComponent {
- heldKeys = injectHeldKeys();
- heldCodes = injectHeldKeyCodes();
- history = signal([]);
- formatKey = formatKeyForDebuggingDisplay;
+ heldKeys = injectHeldKeys()
+ heldCodes = injectHeldKeyCodes()
+ history = signal([])
+ formatKey = formatKeyForDebuggingDisplay
constructor() {
effect(() => {
- const keys = this.heldKeys();
+ const keys = this.heldKeys()
if (keys.length > 0) {
const combo = keys
.map((k) => formatKeyForDebuggingDisplay(k))
- .join(' + ');
+ .join(' + ')
this.history.update((h) => {
if (h[h.length - 1] !== combo) {
- return [...h.slice(-9), combo];
+ return [...h.slice(-9), combo]
}
- return h;
- });
+ return h
+ })
}
- });
+ })
}
clearHistory(): void {
- this.history.set([]);
+ this.history.set([])
}
}
diff --git a/examples/angular/injectHeldKeys/src/app/app.config.ts b/examples/angular/injectHeldKeys/src/app/app.config.ts
index b3ea09d..a226399 100644
--- a/examples/angular/injectHeldKeys/src/app/app.config.ts
+++ b/examples/angular/injectHeldKeys/src/app/app.config.ts
@@ -1,9 +1,9 @@
-import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
-import { provideHotkeys } from '@tanstack/angular-hotkeys';
+import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'
+import { provideHotkeys } from '@tanstack/angular-hotkeys'
export const appConfig: ApplicationConfig = {
providers: [
provideZoneChangeDetection({ eventCoalescing: true }),
provideHotkeys(),
],
-};
+}
diff --git a/examples/angular/injectHeldKeys/src/main.ts b/examples/angular/injectHeldKeys/src/main.ts
index 17447a5..c3d8f9a 100644
--- a/examples/angular/injectHeldKeys/src/main.ts
+++ b/examples/angular/injectHeldKeys/src/main.ts
@@ -1,5 +1,5 @@
-import { bootstrapApplication } from '@angular/platform-browser';
-import { appConfig } from './app/app.config';
-import { AppComponent } from './app/app.component';
+import { bootstrapApplication } from '@angular/platform-browser'
+import { appConfig } from './app/app.config'
+import { AppComponent } from './app/app.component'
-bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));
+bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err))
diff --git a/examples/angular/injectHeldKeys/tsconfig.json b/examples/angular/injectHeldKeys/tsconfig.json
index 6a37648..f12677c 100644
--- a/examples/angular/injectHeldKeys/tsconfig.json
+++ b/examples/angular/injectHeldKeys/tsconfig.json
@@ -1 +1,29 @@
-{"compileOnSave":false,"compilerOptions":{"outDir":"./out-tsc/app","lib":["ES2022","dom"],"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"skipLibCheck":true,"isolatedModules":true,"esModuleInterop":true,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","types":[]},"angularCompilerOptions":{"enableI18nLegacyMessageIdFormat":false,"strictInjectionParameters":true,"strictInputAccessModifiers":true,"strictTemplates":true},"files":["src/main.ts"],"include":["src/**/*.d.ts"]}
+{
+ "compileOnSave": false,
+ "compilerOptions": {
+ "outDir": "./out-tsc/app",
+ "lib": ["ES2022", "dom"],
+ "strict": true,
+ "noImplicitOverride": true,
+ "noPropertyAccessFromIndexSignature": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true,
+ "skipLibCheck": true,
+ "isolatedModules": true,
+ "esModuleInterop": true,
+ "experimentalDecorators": true,
+ "moduleResolution": "bundler",
+ "importHelpers": true,
+ "target": "ES2022",
+ "module": "ES2022",
+ "types": []
+ },
+ "angularCompilerOptions": {
+ "enableI18nLegacyMessageIdFormat": false,
+ "strictInjectionParameters": true,
+ "strictInputAccessModifiers": true,
+ "strictTemplates": true
+ },
+ "files": ["src/main.ts"],
+ "include": ["src/**/*.d.ts"]
+}
diff --git a/examples/angular/injectHotkey/angular.json b/examples/angular/injectHotkey/angular.json
index 1b769d3..2f18dce 100644
--- a/examples/angular/injectHotkey/angular.json
+++ b/examples/angular/injectHotkey/angular.json
@@ -41,9 +41,7 @@
"outputPath": "dist/inject-hotkey",
"index": "src/index.html",
"browser": "src/main.ts",
- "polyfills": [
- "zone.js"
- ],
+ "polyfills": ["zone.js"],
"tsConfig": "tsconfig.json",
"assets": [
{
@@ -51,9 +49,7 @@
"input": "public"
}
],
- "styles": [
- "src/styles.css"
- ],
+ "styles": ["src/styles.css"],
"scripts": []
},
"configurations": {
@@ -98,10 +94,7 @@
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
- "polyfills": [
- "zone.js",
- "zone.js/testing"
- ],
+ "polyfills": ["zone.js", "zone.js/testing"],
"tsConfig": "tsconfig.spec.json",
"assets": [
{
@@ -109,9 +102,7 @@
"input": "public"
}
],
- "styles": [
- "src/styles.css"
- ],
+ "styles": ["src/styles.css"],
"scripts": []
}
}
diff --git a/examples/angular/injectHotkey/package.json b/examples/angular/injectHotkey/package.json
index be1d28a..5be7316 100644
--- a/examples/angular/injectHotkey/package.json
+++ b/examples/angular/injectHotkey/package.json
@@ -11,7 +11,6 @@
},
"private": true,
"dependencies": {
- "@tanstack/angular-hotkeys": "workspace:*",
"@angular/common": "^19.2.0",
"@angular/compiler": "^19.2.0",
"@angular/core": "^19.2.0",
@@ -19,6 +18,7 @@
"@angular/platform-browser": "^19.2.0",
"@angular/platform-browser-dynamic": "^19.2.0",
"@angular/router": "^19.2.0",
+ "@tanstack/angular-hotkeys": "workspace:*",
"rxjs": "~7.8.0",
"tslib": "^2.3.0",
"zone.js": "~0.15.0"
@@ -34,6 +34,6 @@
"karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
- "typescript": "~5.7.2"
+ "typescript": "5.9.3"
}
-}
\ No newline at end of file
+}
diff --git a/examples/angular/injectHotkey/src/app/app.component.html b/examples/angular/injectHotkey/src/app/app.component.html
index 9c55689..cccc732 100644
--- a/examples/angular/injectHotkey/src/app/app.component.html
+++ b/examples/angular/injectHotkey/src/app/app.component.html
@@ -10,12 +10,16 @@ injectHotkey
Basic Hotkey
- Press {{ formatForDisplay('Mod+S') }} to trigger
+
+ Press {{ formatForDisplay('Mod+S') }} to trigger
+
Save triggered: {{ saveCount() }}x
- injectHotkey('Mod+S', (_event, { hotkey, parsedHotkey }) => {
+
+injectHotkey('Mod+S', (_event, { hotkey, parsedHotkey }) => {
console.log('Hotkey:', hotkey)
console.log('Parsed:', parsedHotkey)
-})
+})
@@ -29,13 +33,15 @@ With requireReset
This prevents repeated triggering while holding the keys down. Release
all keys to allow re-triggering.
- injectHotkey(
+
+injectHotkey(
'Mod+K',
(event, { hotkey }) => {
this.incrementCount.update(c => c + 1)
},
{ requireReset: true }
-)
+)
@@ -47,104 +53,185 @@ Conditional Hotkey
{{ enabled() ? 'Disable' : 'Enable' }} Hotkey
- protected readonly enabled = signal(true)
+
+protected readonly enabled = signal(true)
protected readonly modEOptions = computed(() => ({ enabled: this.enabled() }))
injectHotkey(
'Mod+E',
(event, { hotkey }) => { alert('Triggered!') },
this.modEOptions
-)
+)
Number Key Combinations
Common for tab/section switching:
-
{{ formatForDisplay('Mod+1') }} → Tab 1
-
{{ formatForDisplay('Mod+2') }} → Tab 2
-
{{ formatForDisplay('Mod+3') }} → Tab 3
-
{{ formatForDisplay('Mod+4') }} → Tab 4
-
{{ formatForDisplay('Mod+5') }} → Tab 5
+
+ {{ formatForDisplay('Mod+1') }} → Tab 1
+
+
+ {{ formatForDisplay('Mod+2') }} → Tab 2
+
+
+ {{ formatForDisplay('Mod+3') }} → Tab 3
+
+
+ {{ formatForDisplay('Mod+4') }} → Tab 4
+
+
+ {{ formatForDisplay('Mod+5') }} → Tab 5
+
Active Tab: {{ activeTab() }}
- injectHotkey('Mod+1', () => this.activeTab.set(1))
-injectHotkey('Mod+2', () => this.activeTab.set(2))
+
+injectHotkey('Mod+1', () => this.activeTab.set(1))
+injectHotkey('Mod+2', () => this.activeTab.set(2))
Navigation Key Combinations
Selection and navigation shortcuts:
-
{{ formatForDisplay('Shift+ArrowUp') }} — Select up
-
{{ formatForDisplay('Shift+ArrowDown') }} — Select down
-
{{ formatForDisplay('Alt+ArrowLeft') }} — Navigate back
-
{{ formatForDisplay('Alt+ArrowRight') }} — Navigate forward
-
{{ formatForDisplay('Mod+Home') }} — Go to start
-
{{ formatForDisplay('Mod+End') }} — Go to end
-
{{ formatForDisplay('Control+PageUp') }} — Previous page
-
{{ formatForDisplay('Control+PageDown') }} — Next page
+
+ {{ formatForDisplay('Shift+ArrowUp') }} — Select up
+
+
+ {{ formatForDisplay('Shift+ArrowDown') }} — Select down
+
+
+ {{ formatForDisplay('Alt+ArrowLeft') }} — Navigate back
+
+
+ {{ formatForDisplay('Alt+ArrowRight') }} — Navigate forward
+
+
+ {{ formatForDisplay('Mod+Home') }} — Go to start
+
+
+ {{ formatForDisplay('Mod+End') }} — Go to end
+
+
+ {{ formatForDisplay('Control+PageUp') }} — Previous page
+
+
+ {{ formatForDisplay('Control+PageDown') }} — Next page
+
Navigation triggered: {{ navigationCount() }}x
- injectHotkey('Shift+ArrowUp', () => selectUp())
+
+injectHotkey('Shift+ArrowUp', () => selectUp())
injectHotkey('Alt+ArrowLeft', () => navigateBack())
injectHotkey('Mod+Home', () => goToStart())
-injectHotkey('Control+PageUp', () => previousPage())
+injectHotkey('Control+PageUp', () => previousPage())
Function Key Combinations
System and application shortcuts:
-
{{ formatForDisplay('Alt+F4') }} — Close window
-
{{ formatForDisplay('Control+F5') }} — Hard refresh
-
{{ formatForDisplay('Mod+F1') }} — Help
-
{{ formatForDisplay('Shift+F10') }} — Context menu
-
{{ formatForDisplay('F12') }} — DevTools
+
+ {{ formatForDisplay('Alt+F4') }} — Close window
+
+
+ {{ formatForDisplay('Control+F5') }} — Hard refresh
+
+
+ {{ formatForDisplay('Mod+F1') }} — Help
+
+
+ {{ formatForDisplay('Shift+F10') }} — Context menu
+
+
+ {{ formatForDisplay('F12') }} — DevTools
+
+
+
+ Function keys triggered: {{ functionKeyCount() }}x
- Function keys triggered: {{ functionKeyCount() }}x
- injectHotkey('Alt+F4', () => closeWindow())
+
+injectHotkey('Alt+F4', () => closeWindow())
injectHotkey('Control+F5', () => hardRefresh())
injectHotkey('Mod+F1', () => showHelp())
-injectHotkey('F12', () => openDevTools())
+injectHotkey('F12', () => openDevTools())
Multi-Modifier Combinations
Complex shortcuts with multiple modifiers:
-
{{ formatForDisplay('Mod+Shift+S') }} — Save As
-
{{ formatForDisplay('Mod+Shift+Z') }} — Redo
-
{{ formatForDisplay('Control+Alt+A') }} — Special action
-
{{ formatForDisplay('Control+Shift+N') }} — New incognito
-
{{ formatForDisplay('Mod+Alt+T') }} — Toggle theme
-
{{ formatForDisplay('Control+Alt+Shift+X') }} — Triple modifier
+
+ {{ formatForDisplay('Mod+Shift+S') }} — Save As
+
+
+ {{ formatForDisplay('Mod+Shift+Z') }} — Redo
+
+
+ {{ formatForDisplay('Control+Alt+A') }} — Special action
+
+
+ {{ formatForDisplay('Control+Shift+N') }} — New incognito
+
+
+ {{ formatForDisplay('Mod+Alt+T') }} — Toggle theme
+
+
+ {{ formatForDisplay('Control+Alt+Shift+X') }} — Triple
+ modifier
+
- Multi-modifier triggered: {{ multiModifierCount() }}x
- injectHotkey('Mod+Shift+S', () => saveAs())
+
+ Multi-modifier triggered: {{ multiModifierCount() }}x
+
+
+injectHotkey('Mod+Shift+S', () => saveAs())
injectHotkey('Mod+Shift+Z', () => redo())
injectHotkey('Control+Alt+A', () => specialAction())
-injectHotkey('Control+Alt+Shift+X', () => complexAction())
+injectHotkey('Control+Alt+Shift+X', () => complexAction())
Editing Key Combinations
Text editing and form shortcuts:
-
{{ formatForDisplay('Mod+Enter') }} — Submit form
-
{{ formatForDisplay('Shift+Enter') }} — New line
-
{{ formatForDisplay('Mod+Backspace') }} — Delete word
-
{{ formatForDisplay('Mod+Delete') }} — Delete forward
-
{{ formatForDisplay('Control+Tab') }} — Next tab
-
{{ formatForDisplay('Shift+Tab') }} — Previous field
-
{{ formatForDisplay('Mod+Space') }} — Toggle
+
+ {{ formatForDisplay('Mod+Enter') }} — Submit form
+
+
+ {{ formatForDisplay('Shift+Enter') }} — New line
+
+
+ {{ formatForDisplay('Mod+Backspace') }} — Delete word
+
+
+ {{ formatForDisplay('Mod+Delete') }} — Delete forward
+
+
+ {{ formatForDisplay('Control+Tab') }} — Next tab
+
+
+ {{ formatForDisplay('Shift+Tab') }} — Previous field
+
+
+ {{ formatForDisplay('Mod+Space') }} — Toggle
+
+
+
+ Editing keys triggered: {{ editingKeyCount() }}x
- Editing keys triggered: {{ editingKeyCount() }}x
- injectHotkey('Mod+Enter', () => submitForm())
+
+injectHotkey('Mod+Enter', () => submitForm())
injectHotkey('Shift+Enter', () => insertNewline())
injectHotkey('Mod+Backspace', () => deleteWord())
injectHotkey('Control+Tab', () => nextTab())
-injectHotkey('Mod+Space', () => toggle())
+injectHotkey('Mod+Space', () => toggle())
@if (lastHotkey()) {
@@ -159,8 +246,12 @@ Editing Key Combinations
Scoped Keyboard Shortcuts
Shortcuts can be scoped to specific DOM elements using the
- target option. Use a getter for reactive targets (like Solid):
- () => ({ target: this.sidebarRef()?.nativeElement ?? null })
+ target option. Use a getter for reactive targets (like
+ Solid):
+ () => ({ target: this.sidebarRef()?.nativeElement ?? null
+ })
@@ -169,15 +260,19 @@
Sidebar (Scoped Area)
Click here to focus, then try:
- {{ formatForDisplay('Mod+B') }} — Trigger sidebar action
+ {{ formatForDisplay('Mod+B') }} — Trigger sidebar
+ action
{{ formatForDisplay('Mod+N') }} — New item
-
Sidebar shortcuts: {{ sidebarShortcutCount() }}x
+
+ Sidebar shortcuts: {{ sidebarShortcutCount() }}x
+
- These shortcuts only work when this sidebar area is focused or contains focus.
+ These shortcuts only work when this sidebar area is focused or
+ contains focus.
@@ -202,10 +297,13 @@ Modal Dialog (Scoped)
{{ formatForDisplay('Mod+Enter') }} — Submit
- Modal shortcuts: {{ modalShortcutCount() }}x
+
+ Modal shortcuts: {{ modalShortcutCount() }}x
+
- These shortcuts only work when the modal is open and focused. The
- Escape key here won't conflict with the global Escape handler.
+ These shortcuts only work when the modal is open and focused.
+ The Escape key here won't conflict with the global Escape
+ handler.
Close
@@ -235,16 +333,19 @@ Text Editor (Scoped)
placeholder="Focus here and try the shortcuts above..."
rows="8"
>
- Editor shortcuts: {{ editorShortcutCount() }}x
+
+ Editor shortcuts: {{ editorShortcutCount() }}x
+
These shortcuts only work when the editor is focused. Notice that
- {{ formatForDisplay('Mod+S') }} here doesn't conflict with
- the global {{ formatForDisplay('Mod+S') }} shortcut.
+ {{ formatForDisplay('Mod+S') }} here doesn't conflict
+ with the global {{ formatForDisplay('Mod+S') }} shortcut.
- // Scoped to viewChild (Solid-style getter, like Solid's () => ({ target: ref() }))
+
+// Scoped to viewChild (Solid-style getter, like Solid's () => ({ target: ref() }))
private readonly sidebarRef = viewChild<ElementRef<HTMLDivElement>>('sidebarRef')
injectHotkey(
@@ -265,7 +366,8 @@ Text Editor (Scoped)
'Mod+S',
() => saveEditorContent(),
() => ({ target: this.editorRef()?.nativeElement ?? null })
-)
+)
diff --git a/examples/angular/injectHotkey/src/app/app.component.ts b/examples/angular/injectHotkey/src/app/app.component.ts
index e4c06fc..4735735 100644
--- a/examples/angular/injectHotkey/src/app/app.component.ts
+++ b/examples/angular/injectHotkey/src/app/app.component.ts
@@ -1,9 +1,9 @@
-import { Component, ElementRef, signal, viewChild } from '@angular/core';
+import { Component, ElementRef, signal, viewChild } from '@angular/core'
import {
formatForDisplay,
injectHotkey,
type Hotkey,
-} from '@tanstack/angular-hotkeys';
+} from '@tanstack/angular-hotkeys'
@Component({
selector: 'app-root',
@@ -12,291 +12,295 @@ import {
templateUrl: './app.component.html',
})
export class AppComponent {
- protected readonly lastHotkey = signal(null);
- protected readonly saveCount = signal(0);
- protected readonly incrementCount = signal(0);
- protected readonly enabled = signal(true);
- protected readonly activeTab = signal(1);
- protected readonly navigationCount = signal(0);
- protected readonly functionKeyCount = signal(0);
- protected readonly multiModifierCount = signal(0);
- protected readonly editingKeyCount = signal(0);
+ protected readonly lastHotkey = signal(null)
+ protected readonly saveCount = signal(0)
+ protected readonly incrementCount = signal(0)
+ protected readonly enabled = signal(true)
+ protected readonly activeTab = signal(1)
+ protected readonly navigationCount = signal(0)
+ protected readonly functionKeyCount = signal(0)
+ protected readonly multiModifierCount = signal(0)
+ protected readonly editingKeyCount = signal(0)
- protected readonly modalOpen = signal(false);
- protected readonly editorContent = signal('');
- protected readonly sidebarShortcutCount = signal(0);
- protected readonly modalShortcutCount = signal(0);
- protected readonly editorShortcutCount = signal(0);
+ protected readonly modalOpen = signal(false)
+ protected readonly editorContent = signal('')
+ protected readonly sidebarShortcutCount = signal(0)
+ protected readonly modalShortcutCount = signal(0)
+ protected readonly editorShortcutCount = signal(0)
- private readonly sidebarRef = viewChild>('sidebarRef');
- private readonly modalRef = viewChild>('modalRef');
- private readonly editorRef = viewChild>('editorRef');
+ private readonly sidebarRef =
+ viewChild>('sidebarRef')
+ private readonly modalRef = viewChild>('modalRef')
+ private readonly editorRef =
+ viewChild>('editorRef')
constructor() {
injectHotkey('Mod+S', (_event, { hotkey }) => {
- this.lastHotkey.set(hotkey);
- this.saveCount.update((c) => c + 1);
- });
+ this.lastHotkey.set(hotkey)
+ this.saveCount.update((c) => c + 1)
+ })
injectHotkey(
'Mod+K',
(_event, { hotkey }) => {
- this.lastHotkey.set(hotkey);
- this.incrementCount.update((c) => c + 1);
+ this.lastHotkey.set(hotkey)
+ this.incrementCount.update((c) => c + 1)
},
{ requireReset: true },
- );
+ )
injectHotkey(
'Mod+E',
(_event, { hotkey }) => {
- this.lastHotkey.set(hotkey);
- alert('This hotkey can be toggled!');
+ this.lastHotkey.set(hotkey)
+ alert('This hotkey can be toggled!')
},
() => ({ enabled: this.enabled() }),
- );
+ )
injectHotkey('Mod+1', () => {
- this.lastHotkey.set('Mod+1');
- this.activeTab.set(1);
- });
+ this.lastHotkey.set('Mod+1')
+ this.activeTab.set(1)
+ })
injectHotkey('Mod+2', () => {
- this.lastHotkey.set('Mod+2');
- this.activeTab.set(2);
- });
+ this.lastHotkey.set('Mod+2')
+ this.activeTab.set(2)
+ })
injectHotkey('Mod+3', () => {
- this.lastHotkey.set('Mod+3');
- this.activeTab.set(3);
- });
+ this.lastHotkey.set('Mod+3')
+ this.activeTab.set(3)
+ })
injectHotkey('Mod+4', () => {
- this.lastHotkey.set('Mod+4');
- this.activeTab.set(4);
- });
+ this.lastHotkey.set('Mod+4')
+ this.activeTab.set(4)
+ })
injectHotkey('Mod+5', () => {
- this.lastHotkey.set('Mod+5');
- this.activeTab.set(5);
- });
+ this.lastHotkey.set('Mod+5')
+ this.activeTab.set(5)
+ })
injectHotkey('Shift+ArrowUp', () => {
- this.lastHotkey.set('Shift+ArrowUp');
- this.navigationCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Shift+ArrowUp')
+ this.navigationCount.update((c) => c + 1)
+ })
injectHotkey('Shift+ArrowDown', () => {
- this.lastHotkey.set('Shift+ArrowDown');
- this.navigationCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Shift+ArrowDown')
+ this.navigationCount.update((c) => c + 1)
+ })
injectHotkey('Alt+ArrowLeft', () => {
- this.lastHotkey.set('Alt+ArrowLeft');
- this.navigationCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Alt+ArrowLeft')
+ this.navigationCount.update((c) => c + 1)
+ })
injectHotkey('Alt+ArrowRight', () => {
- this.lastHotkey.set('Alt+ArrowRight');
- this.navigationCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Alt+ArrowRight')
+ this.navigationCount.update((c) => c + 1)
+ })
injectHotkey('Mod+Home', () => {
- this.lastHotkey.set('Mod+Home');
- this.navigationCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Mod+Home')
+ this.navigationCount.update((c) => c + 1)
+ })
injectHotkey('Mod+End', () => {
- this.lastHotkey.set('Mod+End');
- this.navigationCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Mod+End')
+ this.navigationCount.update((c) => c + 1)
+ })
injectHotkey('Control+PageUp', () => {
- this.lastHotkey.set('Control+PageUp');
- this.navigationCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Control+PageUp')
+ this.navigationCount.update((c) => c + 1)
+ })
injectHotkey('Control+PageDown', () => {
- this.lastHotkey.set('Control+PageDown');
- this.navigationCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Control+PageDown')
+ this.navigationCount.update((c) => c + 1)
+ })
injectHotkey('Meta+F4', () => {
- this.lastHotkey.set('Alt+F4');
- this.functionKeyCount.update((c) => c + 1);
- alert('Alt+F4 pressed (normally closes window)');
- });
+ this.lastHotkey.set('Alt+F4')
+ this.functionKeyCount.update((c) => c + 1)
+ alert('Alt+F4 pressed (normally closes window)')
+ })
injectHotkey('Control+F5', () => {
- this.lastHotkey.set('Control+F5');
- this.functionKeyCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Control+F5')
+ this.functionKeyCount.update((c) => c + 1)
+ })
injectHotkey('Mod+F1', () => {
- this.lastHotkey.set('Mod+F1');
- this.functionKeyCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Mod+F1')
+ this.functionKeyCount.update((c) => c + 1)
+ })
injectHotkey('Shift+F10', () => {
- this.lastHotkey.set('Shift+F10');
- this.functionKeyCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Shift+F10')
+ this.functionKeyCount.update((c) => c + 1)
+ })
injectHotkey('Mod+Shift+S', () => {
- this.lastHotkey.set('Mod+Shift+S');
- this.multiModifierCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Mod+Shift+S')
+ this.multiModifierCount.update((c) => c + 1)
+ })
injectHotkey('Mod+Shift+Z', () => {
- this.lastHotkey.set('Mod+Shift+Z');
- this.multiModifierCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Mod+Shift+Z')
+ this.multiModifierCount.update((c) => c + 1)
+ })
injectHotkey({ key: 'A', ctrl: true, alt: true }, () => {
- this.lastHotkey.set('Control+Alt+A');
- this.multiModifierCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Control+Alt+A')
+ this.multiModifierCount.update((c) => c + 1)
+ })
injectHotkey('Control+Shift+N', () => {
- this.lastHotkey.set('Control+Shift+N');
- this.multiModifierCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Control+Shift+N')
+ this.multiModifierCount.update((c) => c + 1)
+ })
injectHotkey('Mod+Alt+T', () => {
- this.lastHotkey.set('Mod+Alt+T');
- this.multiModifierCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Mod+Alt+T')
+ this.multiModifierCount.update((c) => c + 1)
+ })
injectHotkey('Control+Alt+Shift+X', () => {
- this.lastHotkey.set('Control+Alt+Shift+X');
- this.multiModifierCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Control+Alt+Shift+X')
+ this.multiModifierCount.update((c) => c + 1)
+ })
injectHotkey('Mod+Enter', () => {
- this.lastHotkey.set('Mod+Enter');
- this.editingKeyCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Mod+Enter')
+ this.editingKeyCount.update((c) => c + 1)
+ })
injectHotkey('Shift+Enter', () => {
- this.lastHotkey.set('Shift+Enter');
- this.editingKeyCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Shift+Enter')
+ this.editingKeyCount.update((c) => c + 1)
+ })
injectHotkey('Mod+Backspace', () => {
- this.lastHotkey.set('Mod+Backspace');
- this.editingKeyCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Mod+Backspace')
+ this.editingKeyCount.update((c) => c + 1)
+ })
injectHotkey('Mod+Delete', () => {
- this.lastHotkey.set('Mod+Delete');
- this.editingKeyCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Mod+Delete')
+ this.editingKeyCount.update((c) => c + 1)
+ })
injectHotkey('Control+Tab', () => {
- this.lastHotkey.set('Control+Tab');
- this.editingKeyCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Control+Tab')
+ this.editingKeyCount.update((c) => c + 1)
+ })
injectHotkey('Shift+Tab', () => {
- this.lastHotkey.set('Shift+Tab');
- this.editingKeyCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Shift+Tab')
+ this.editingKeyCount.update((c) => c + 1)
+ })
injectHotkey('Mod+Space', () => {
- this.lastHotkey.set('Mod+Space');
- this.editingKeyCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('Mod+Space')
+ this.editingKeyCount.update((c) => c + 1)
+ })
injectHotkey({ key: 'Escape' }, () => {
- this.lastHotkey.set(null);
- this.saveCount.set(0);
- this.incrementCount.set(0);
- this.navigationCount.set(0);
- this.functionKeyCount.set(0);
- this.multiModifierCount.set(0);
- this.editingKeyCount.set(0);
- this.activeTab.set(1);
- });
+ this.lastHotkey.set(null)
+ this.saveCount.set(0)
+ this.incrementCount.set(0)
+ this.navigationCount.set(0)
+ this.functionKeyCount.set(0)
+ this.multiModifierCount.set(0)
+ this.editingKeyCount.set(0)
+ this.activeTab.set(1)
+ })
injectHotkey('F12', () => {
- this.lastHotkey.set('F12');
- this.functionKeyCount.update((c) => c + 1);
- });
+ this.lastHotkey.set('F12')
+ this.functionKeyCount.update((c) => c + 1)
+ })
// Scoped: sidebar (Solid-style getter)
injectHotkey(
'Mod+B',
() => {
- this.lastHotkey.set('Mod+B');
- this.sidebarShortcutCount.update((c) => c + 1);
+ this.lastHotkey.set('Mod+B')
+ this.sidebarShortcutCount.update((c) => c + 1)
alert(
'Sidebar shortcut triggered! This only works when the sidebar area is focused.',
- );
+ )
},
() => ({ target: this.sidebarRef()?.nativeElement ?? null }),
- );
+ )
injectHotkey(
'Mod+N',
() => {
- this.lastHotkey.set('Mod+N');
- this.sidebarShortcutCount.update((c) => c + 1);
+ this.lastHotkey.set('Mod+N')
+ this.sidebarShortcutCount.update((c) => c + 1)
},
() => ({ target: this.sidebarRef()?.nativeElement ?? null }),
- );
+ )
// Scoped: modal (Solid-style getter)
injectHotkey(
'Escape',
() => {
- this.lastHotkey.set('Escape');
- this.modalShortcutCount.update((c) => c + 1);
- this.modalOpen.set(false);
+ this.lastHotkey.set('Escape')
+ this.modalShortcutCount.update((c) => c + 1)
+ this.modalOpen.set(false)
},
() => ({
target: this.modalRef()?.nativeElement ?? null,
enabled: this.modalOpen(),
}),
- );
+ )
injectHotkey(
'Mod+Enter',
() => {
- this.lastHotkey.set('Mod+Enter');
- this.modalShortcutCount.update((c) => c + 1);
- alert('Modal submit shortcut!');
+ this.lastHotkey.set('Mod+Enter')
+ this.modalShortcutCount.update((c) => c + 1)
+ alert('Modal submit shortcut!')
},
() => ({
target: this.modalRef()?.nativeElement ?? null,
enabled: this.modalOpen(),
}),
- );
+ )
// Scoped: editor (Solid-style getter)
injectHotkey(
'Mod+S',
() => {
- this.lastHotkey.set('Mod+S');
- this.editorShortcutCount.update((c) => c + 1);
- const content = this.editorContent();
+ this.lastHotkey.set('Mod+S')
+ this.editorShortcutCount.update((c) => c + 1)
+ const content = this.editorContent()
alert(
`Editor content saved: "${content.substring(0, 50)}${content.length > 50 ? '...' : ''}"`,
- );
+ )
},
() => ({ target: this.editorRef()?.nativeElement ?? null }),
- );
+ )
injectHotkey(
'Mod+/',
() => {
- this.lastHotkey.set('Mod+/');
- this.editorShortcutCount.update((c) => c + 1);
- this.editorContent.update((prev) => prev + '\n// Comment added via shortcut');
+ this.lastHotkey.set('Mod+/')
+ this.editorShortcutCount.update((c) => c + 1)
+ this.editorContent.update(
+ (prev) => prev + '\n// Comment added via shortcut',
+ )
},
() => ({ target: this.editorRef()?.nativeElement ?? null }),
- );
+ )
injectHotkey(
'Mod+K',
() => {
- this.lastHotkey.set('Mod+K');
- this.editorShortcutCount.update((c) => c + 1);
- this.editorContent.set('');
+ this.lastHotkey.set('Mod+K')
+ this.editorShortcutCount.update((c) => c + 1)
+ this.editorContent.set('')
},
() => ({ target: this.editorRef()?.nativeElement ?? null }),
- );
+ )
}
- protected formatForDisplay = formatForDisplay;
+ protected formatForDisplay = formatForDisplay
protected openModal(): void {
- this.modalOpen.set(true);
+ this.modalOpen.set(true)
}
protected closeModal(): void {
- this.modalOpen.set(false);
+ this.modalOpen.set(false)
}
protected closeModalOverlay(): void {
- this.modalOpen.set(false);
+ this.modalOpen.set(false)
}
protected onModalContentClick(event: Event): void {
- event.stopPropagation();
+ event.stopPropagation()
}
protected onEditorInput(event: Event): void {
- const el = event.target as HTMLTextAreaElement;
- this.editorContent.set(el.value);
+ const el = event.target as HTMLTextAreaElement
+ this.editorContent.set(el.value)
}
}
diff --git a/examples/angular/injectHotkey/src/app/app.config.ts b/examples/angular/injectHotkey/src/app/app.config.ts
index b3ea09d..a226399 100644
--- a/examples/angular/injectHotkey/src/app/app.config.ts
+++ b/examples/angular/injectHotkey/src/app/app.config.ts
@@ -1,9 +1,9 @@
-import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
-import { provideHotkeys } from '@tanstack/angular-hotkeys';
+import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'
+import { provideHotkeys } from '@tanstack/angular-hotkeys'
export const appConfig: ApplicationConfig = {
providers: [
provideZoneChangeDetection({ eventCoalescing: true }),
provideHotkeys(),
],
-};
+}
diff --git a/examples/angular/injectHotkey/src/main.ts b/examples/angular/injectHotkey/src/main.ts
index 35b00f3..c3d8f9a 100644
--- a/examples/angular/injectHotkey/src/main.ts
+++ b/examples/angular/injectHotkey/src/main.ts
@@ -1,6 +1,5 @@
-import { bootstrapApplication } from '@angular/platform-browser';
-import { appConfig } from './app/app.config';
-import { AppComponent } from './app/app.component';
+import { bootstrapApplication } from '@angular/platform-browser'
+import { appConfig } from './app/app.config'
+import { AppComponent } from './app/app.component'
-bootstrapApplication(AppComponent, appConfig)
- .catch((err) => console.error(err));
+bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err))
diff --git a/examples/angular/injectHotkeyRecorder/angular.json b/examples/angular/injectHotkeyRecorder/angular.json
index c3a7b12..39b4816 100644
--- a/examples/angular/injectHotkeyRecorder/angular.json
+++ b/examples/angular/injectHotkeyRecorder/angular.json
@@ -1 +1,63 @@
-{"$schema":"./node_modules/@angular/cli/lib/config/schema.json","version":1,"newProjectRoot":"projects","projects":{"injectHotkeyRecorder":{"projectType":"application","schematics":{"@schematics/angular:class":{"skipTests":true},"@schematics/angular:component":{"skipTests":true}},"root":"","sourceRoot":"src","prefix":"app","architect":{"build":{"builder":"@angular-devkit/build-angular:application","options":{"outputPath":"dist/inject-hotkey-recorder","index":"src/index.html","browser":"src/main.ts","polyfills":["zone.js"],"tsConfig":"tsconfig.json","assets":[],"styles":["src/styles.css"],"scripts":[]},"configurations":{"production":{"budgets":[{"type":"initial","maximumWarning":"500kB","maximumError":"1MB"}],"outputHashing":"all"},"development":{"optimization":false,"extractLicenses":false,"sourceMap":true}},"defaultConfiguration":"production"},"serve":{"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"injectHotkeyRecorder:build:production"},"development":{"buildTarget":"injectHotkeyRecorder:build:development"}},"defaultConfiguration":"development"}}}},"cli":{"analytics":false}}
+{
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+ "version": 1,
+ "newProjectRoot": "projects",
+ "projects": {
+ "injectHotkeyRecorder": {
+ "projectType": "application",
+ "schematics": {
+ "@schematics/angular:class": { "skipTests": true },
+ "@schematics/angular:component": { "skipTests": true }
+ },
+ "root": "",
+ "sourceRoot": "src",
+ "prefix": "app",
+ "architect": {
+ "build": {
+ "builder": "@angular-devkit/build-angular:application",
+ "options": {
+ "outputPath": "dist/inject-hotkey-recorder",
+ "index": "src/index.html",
+ "browser": "src/main.ts",
+ "polyfills": ["zone.js"],
+ "tsConfig": "tsconfig.json",
+ "assets": [],
+ "styles": ["src/styles.css"],
+ "scripts": []
+ },
+ "configurations": {
+ "production": {
+ "budgets": [
+ {
+ "type": "initial",
+ "maximumWarning": "500kB",
+ "maximumError": "1MB"
+ }
+ ],
+ "outputHashing": "all"
+ },
+ "development": {
+ "optimization": false,
+ "extractLicenses": false,
+ "sourceMap": true
+ }
+ },
+ "defaultConfiguration": "production"
+ },
+ "serve": {
+ "builder": "@angular-devkit/build-angular:dev-server",
+ "configurations": {
+ "production": {
+ "buildTarget": "injectHotkeyRecorder:build:production"
+ },
+ "development": {
+ "buildTarget": "injectHotkeyRecorder:build:development"
+ }
+ },
+ "defaultConfiguration": "development"
+ }
+ }
+ }
+ },
+ "cli": { "analytics": false }
+}
diff --git a/examples/angular/injectHotkeyRecorder/package.json b/examples/angular/injectHotkeyRecorder/package.json
index 575a2d9..ee914c2 100644
--- a/examples/angular/injectHotkeyRecorder/package.json
+++ b/examples/angular/injectHotkeyRecorder/package.json
@@ -1 +1,39 @@
-{"name":"inject-hotkey-recorder","version":"0.0.0","scripts":{"ng":"ng","start":"ng serve --port=3073","dev":"ng serve --port=3073","build":"ng build","watch":"ng build --watch --configuration development","test":"ng test"},"private":true,"dependencies":{"@tanstack/angular-hotkeys":"workspace:*","@angular/common":"^19.2.0","@angular/compiler":"^19.2.0","@angular/core":"^19.2.0","@angular/forms":"^19.2.0","@angular/platform-browser":"^19.2.0","@angular/platform-browser-dynamic":"^19.2.0","@angular/router":"^19.2.0","rxjs":"~7.8.0","tslib":"^2.3.0","zone.js":"~0.15.0"},"devDependencies":{"@angular-devkit/build-angular":"^19.2.20","@angular/cli":"^19.2.20","@angular/compiler-cli":"^19.2.0","@types/jasmine":"~5.1.0","jasmine-core":"~5.6.0","karma":"~6.4.0","karma-chrome-launcher":"~3.2.0","karma-coverage":"~2.2.0","karma-jasmine":"~5.1.0","karma-jasmine-html-reporter":"~2.1.0","typescript":"~5.7.2"}}
+{
+ "name": "inject-hotkey-recorder",
+ "version": "0.0.0",
+ "scripts": {
+ "ng": "ng",
+ "start": "ng serve --port=3073",
+ "dev": "ng serve --port=3073",
+ "build": "ng build",
+ "watch": "ng build --watch --configuration development",
+ "test": "ng test"
+ },
+ "private": true,
+ "dependencies": {
+ "@angular/common": "^19.2.0",
+ "@angular/compiler": "^19.2.0",
+ "@angular/core": "^19.2.0",
+ "@angular/forms": "^19.2.0",
+ "@angular/platform-browser": "^19.2.0",
+ "@angular/platform-browser-dynamic": "^19.2.0",
+ "@angular/router": "^19.2.0",
+ "@tanstack/angular-hotkeys": "workspace:*",
+ "rxjs": "~7.8.0",
+ "tslib": "^2.3.0",
+ "zone.js": "~0.15.0"
+ },
+ "devDependencies": {
+ "@angular-devkit/build-angular": "^19.2.20",
+ "@angular/cli": "^19.2.20",
+ "@angular/compiler-cli": "^19.2.0",
+ "@types/jasmine": "~5.1.0",
+ "jasmine-core": "~5.6.0",
+ "karma": "~6.4.0",
+ "karma-chrome-launcher": "~3.2.0",
+ "karma-coverage": "~2.2.0",
+ "karma-jasmine": "~5.1.0",
+ "karma-jasmine-html-reporter": "~2.1.0",
+ "typescript": "5.9.3"
+ }
+}
diff --git a/examples/angular/injectHotkeyRecorder/src/app/app.component.html b/examples/angular/injectHotkeyRecorder/src/app/app.component.html
index d380375..fcb7f5b 100644
--- a/examples/angular/injectHotkeyRecorder/src/app/app.component.html
+++ b/examples/angular/injectHotkeyRecorder/src/app/app.component.html
@@ -46,19 +46,25 @@ Demo Actions
Usage
- import {{ '{' }} injectHotkey, injectHotkeyRecorder {{ '}' }} from '@tanstack/angular-hotkeys'
+
+import {{ '{' }} injectHotkey, injectHotkeyRecorder {{
+ '}'
+ }} from '@tanstack/angular-hotkeys'
// In your component:
shortcuts = signal({{ '{' }} save: 'Mod+K', open: 'Mod+E' {{ '}' }})
recorder = injectHotkeyRecorder({{ '{' }}
- onRecord: (hotkey) => this.shortcuts.update(prev => ({{ '{' }} ...prev, save: hotkey {{ '}' }}))
+ onRecord: (hotkey) => this.shortcuts.update(prev => ({{
+ '{'
+ }} ...prev, save: hotkey {{ '}' }}))
{{ '}' }})
injectHotkey(
() => this.shortcuts().save,
() => this.handleSave(),
() => ({{ '{' }} enabled: !this.recorder.isRecording() {{ '}' }})
-)
+)
diff --git a/examples/angular/injectHotkeyRecorder/src/app/app.component.ts b/examples/angular/injectHotkeyRecorder/src/app/app.component.ts
index c17c532..b3aa0fc 100644
--- a/examples/angular/injectHotkeyRecorder/src/app/app.component.ts
+++ b/examples/angular/injectHotkeyRecorder/src/app/app.component.ts
@@ -1,11 +1,11 @@
-import { Component, signal } from '@angular/core';
+import { Component, signal } from '@angular/core'
import {
formatForDisplay,
injectHotkey,
injectHotkeyRecorder,
-} from '@tanstack/angular-hotkeys';
-import type { Hotkey } from '@tanstack/angular-hotkeys';
-import { ShortcutListItemComponent } from './shortcut-list-item.component';
+} from '@tanstack/angular-hotkeys'
+import type { Hotkey } from '@tanstack/angular-hotkeys'
+import { ShortcutListItemComponent } from './shortcut-list-item.component'
const DEFAULT_SHORTCUT_ACTIONS: Record<
string,
@@ -17,9 +17,9 @@ const DEFAULT_SHORTCUT_ACTIONS: Record<
close: { name: 'Close', defaultHotkey: 'Mod+Shift+K' },
undo: { name: 'Undo', defaultHotkey: 'Mod+Shift+E' },
redo: { name: 'Redo', defaultHotkey: 'Mod+Shift+G' },
-};
+}
-const ACTION_ENTRIES = Object.entries(DEFAULT_SHORTCUT_ACTIONS);
+const ACTION_ENTRIES = Object.entries(DEFAULT_SHORTCUT_ACTIONS)
@Component({
selector: 'app-root',
@@ -31,112 +31,125 @@ const ACTION_ENTRIES = Object.entries(DEFAULT_SHORTCUT_ACTIONS);
export class AppComponent {
private readonly recorder = injectHotkeyRecorder({
onRecord: (hotkey: Hotkey) => {
- const id = this.recordingActionId();
+ const id = this.recordingActionId()
if (id) {
this.shortcuts.update((prev) => ({
...prev,
[id]: hotkey || ('' as Hotkey | ''),
- }));
- this.recordingActionId.set(null);
+ }))
+ this.recordingActionId.set(null)
}
},
onCancel: () => this.recordingActionId.set(null),
onClear: () => {
- const id = this.recordingActionId();
+ const id = this.recordingActionId()
if (id) {
- this.shortcuts.update((prev) => ({ ...prev, [id]: '' as Hotkey | '' }));
- this.recordingActionId.set(null);
+ this.shortcuts.update((prev) => ({ ...prev, [id]: '' as Hotkey | '' }))
+ this.recordingActionId.set(null)
}
},
- });
+ })
- shortcuts = signal>((() => {
- const defaults: Record = {};
- for (const [id, action] of Object.entries(DEFAULT_SHORTCUT_ACTIONS)) {
- defaults[id] = action.defaultHotkey;
- }
- return defaults;
- })());
+ shortcuts = signal>(
+ (() => {
+ const defaults: Record = {}
+ for (const [id, action] of Object.entries(DEFAULT_SHORTCUT_ACTIONS)) {
+ defaults[id] = action.defaultHotkey
+ }
+ return defaults
+ })(),
+ )
- saveCount = signal(0);
- openCount = signal(0);
- newCount = signal(0);
- closeCount = signal(0);
- undoCount = signal(0);
- redoCount = signal(0);
- recordingActionId = signal(null);
+ saveCount = signal(0)
+ openCount = signal(0)
+ newCount = signal(0)
+ closeCount = signal(0)
+ undoCount = signal(0)
+ redoCount = signal(0)
+ recordingActionId = signal(null)
- readonly actionEntries = ACTION_ENTRIES;
- readonly defaultActions = DEFAULT_SHORTCUT_ACTIONS;
- formatForDisplay = formatForDisplay;
+ readonly actionEntries = ACTION_ENTRIES
+ readonly defaultActions = DEFAULT_SHORTCUT_ACTIONS
+ formatForDisplay = formatForDisplay
constructor() {
injectHotkey(
() =>
- this.shortcuts()['save'] || DEFAULT_SHORTCUT_ACTIONS['save'].defaultHotkey,
+ this.shortcuts()['save'] ||
+ DEFAULT_SHORTCUT_ACTIONS['save'].defaultHotkey,
() => this.saveCount.update((c) => c + 1),
() => ({
- enabled: !this.recorder.isRecording() && this.shortcuts()['save'] !== '',
+ enabled:
+ !this.recorder.isRecording() && this.shortcuts()['save'] !== '',
}),
- );
+ )
injectHotkey(
() =>
- this.shortcuts()['open'] || DEFAULT_SHORTCUT_ACTIONS['open'].defaultHotkey,
+ this.shortcuts()['open'] ||
+ DEFAULT_SHORTCUT_ACTIONS['open'].defaultHotkey,
() => this.openCount.update((c) => c + 1),
() => ({
- enabled: !this.recorder.isRecording() && this.shortcuts()['open'] !== '',
+ enabled:
+ !this.recorder.isRecording() && this.shortcuts()['open'] !== '',
}),
- );
+ )
injectHotkey(
() =>
- this.shortcuts()['new'] || DEFAULT_SHORTCUT_ACTIONS['new'].defaultHotkey,
+ this.shortcuts()['new'] ||
+ DEFAULT_SHORTCUT_ACTIONS['new'].defaultHotkey,
() => this.newCount.update((c) => c + 1),
() => ({
enabled: !this.recorder.isRecording() && this.shortcuts()['new'] !== '',
}),
- );
+ )
injectHotkey(
() =>
- this.shortcuts()['close'] || DEFAULT_SHORTCUT_ACTIONS['close'].defaultHotkey,
+ this.shortcuts()['close'] ||
+ DEFAULT_SHORTCUT_ACTIONS['close'].defaultHotkey,
() => this.closeCount.update((c) => c + 1),
() => ({
- enabled: !this.recorder.isRecording() && this.shortcuts()['close'] !== '',
+ enabled:
+ !this.recorder.isRecording() && this.shortcuts()['close'] !== '',
}),
- );
+ )
injectHotkey(
() =>
- this.shortcuts()['undo'] || DEFAULT_SHORTCUT_ACTIONS['undo'].defaultHotkey,
+ this.shortcuts()['undo'] ||
+ DEFAULT_SHORTCUT_ACTIONS['undo'].defaultHotkey,
() => this.undoCount.update((c) => c + 1),
() => ({
- enabled: !this.recorder.isRecording() && this.shortcuts()['undo'] !== '',
+ enabled:
+ !this.recorder.isRecording() && this.shortcuts()['undo'] !== '',
}),
- );
+ )
injectHotkey(
() =>
- this.shortcuts()['redo'] || DEFAULT_SHORTCUT_ACTIONS['redo'].defaultHotkey,
+ this.shortcuts()['redo'] ||
+ DEFAULT_SHORTCUT_ACTIONS['redo'].defaultHotkey,
() => this.redoCount.update((c) => c + 1),
() => ({
- enabled: !this.recorder.isRecording() && this.shortcuts()['redo'] !== '',
+ enabled:
+ !this.recorder.isRecording() && this.shortcuts()['redo'] !== '',
}),
- );
+ )
}
/** Expose recorder's isRecording signal for template */
- readonly isRecording = this.recorder.isRecording;
+ readonly isRecording = this.recorder.isRecording
handleEdit(actionId: string): void {
- this.recordingActionId.set(actionId);
- this.recorder.startRecording();
+ this.recordingActionId.set(actionId)
+ this.recorder.startRecording()
}
handleCancel(): void {
- this.recorder.cancelRecording();
- this.recordingActionId.set(null);
+ this.recorder.cancelRecording()
+ this.recordingActionId.set(null)
}
shortcutDisplay(id: string): Hotkey {
- const hotkey = this.shortcuts()[id];
- return (hotkey || this.defaultActions[id].defaultHotkey) as Hotkey;
+ const hotkey = this.shortcuts()[id]
+ return (hotkey || this.defaultActions[id].defaultHotkey) as Hotkey
}
countFor(id: string): number {
@@ -147,7 +160,7 @@ export class AppComponent {
close: () => this.closeCount(),
undo: () => this.undoCount(),
redo: () => this.redoCount(),
- };
- return counts[id]?.() ?? 0;
+ }
+ return counts[id]?.() ?? 0
}
}
diff --git a/examples/angular/injectHotkeyRecorder/src/app/app.config.ts b/examples/angular/injectHotkeyRecorder/src/app/app.config.ts
index b3ea09d..a226399 100644
--- a/examples/angular/injectHotkeyRecorder/src/app/app.config.ts
+++ b/examples/angular/injectHotkeyRecorder/src/app/app.config.ts
@@ -1,9 +1,9 @@
-import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
-import { provideHotkeys } from '@tanstack/angular-hotkeys';
+import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'
+import { provideHotkeys } from '@tanstack/angular-hotkeys'
export const appConfig: ApplicationConfig = {
providers: [
provideZoneChangeDetection({ eventCoalescing: true }),
provideHotkeys(),
],
-};
+}
diff --git a/examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.ts b/examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.ts
index 20551af..322c1e1 100644
--- a/examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.ts
+++ b/examples/angular/injectHotkeyRecorder/src/app/shortcut-list-item.component.ts
@@ -1,9 +1,9 @@
-import { Component, input, output } from '@angular/core';
+import { Component, input, output } from '@angular/core'
import {
formatForDisplay,
formatKeyForDebuggingDisplay,
injectHeldKeys,
-} from '@tanstack/angular-hotkeys';
+} from '@tanstack/angular-hotkeys'
@Component({
selector: 'app-shortcut-list-item',
@@ -12,13 +12,13 @@ import {
styleUrl: './shortcut-list-item.component.css',
})
export class ShortcutListItemComponent {
- actionName = input.required();
- hotkey = input.required();
- isRecording = input.required();
- edit = output();
- cancel = output();
+ actionName = input.required()
+ hotkey = input.required()
+ isRecording = input.required()
+ edit = output()
+ cancel = output()
- heldKeys = injectHeldKeys();
- formatForDisplay = formatForDisplay;
- formatKey = formatKeyForDebuggingDisplay;
+ heldKeys = injectHeldKeys()
+ formatForDisplay = formatForDisplay
+ formatKey = formatKeyForDebuggingDisplay
}
diff --git a/examples/angular/injectHotkeyRecorder/src/main.ts b/examples/angular/injectHotkeyRecorder/src/main.ts
index 17447a5..c3d8f9a 100644
--- a/examples/angular/injectHotkeyRecorder/src/main.ts
+++ b/examples/angular/injectHotkeyRecorder/src/main.ts
@@ -1,5 +1,5 @@
-import { bootstrapApplication } from '@angular/platform-browser';
-import { appConfig } from './app/app.config';
-import { AppComponent } from './app/app.component';
+import { bootstrapApplication } from '@angular/platform-browser'
+import { appConfig } from './app/app.config'
+import { AppComponent } from './app/app.component'
-bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));
+bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err))
diff --git a/examples/angular/injectHotkeyRecorder/tsconfig.json b/examples/angular/injectHotkeyRecorder/tsconfig.json
index 6a37648..f12677c 100644
--- a/examples/angular/injectHotkeyRecorder/tsconfig.json
+++ b/examples/angular/injectHotkeyRecorder/tsconfig.json
@@ -1 +1,29 @@
-{"compileOnSave":false,"compilerOptions":{"outDir":"./out-tsc/app","lib":["ES2022","dom"],"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"skipLibCheck":true,"isolatedModules":true,"esModuleInterop":true,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","types":[]},"angularCompilerOptions":{"enableI18nLegacyMessageIdFormat":false,"strictInjectionParameters":true,"strictInputAccessModifiers":true,"strictTemplates":true},"files":["src/main.ts"],"include":["src/**/*.d.ts"]}
+{
+ "compileOnSave": false,
+ "compilerOptions": {
+ "outDir": "./out-tsc/app",
+ "lib": ["ES2022", "dom"],
+ "strict": true,
+ "noImplicitOverride": true,
+ "noPropertyAccessFromIndexSignature": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true,
+ "skipLibCheck": true,
+ "isolatedModules": true,
+ "esModuleInterop": true,
+ "experimentalDecorators": true,
+ "moduleResolution": "bundler",
+ "importHelpers": true,
+ "target": "ES2022",
+ "module": "ES2022",
+ "types": []
+ },
+ "angularCompilerOptions": {
+ "enableI18nLegacyMessageIdFormat": false,
+ "strictInjectionParameters": true,
+ "strictInputAccessModifiers": true,
+ "strictTemplates": true
+ },
+ "files": ["src/main.ts"],
+ "include": ["src/**/*.d.ts"]
+}
diff --git a/examples/angular/injectHotkeySequence/angular.json b/examples/angular/injectHotkeySequence/angular.json
index d9d1c7a..118299a 100644
--- a/examples/angular/injectHotkeySequence/angular.json
+++ b/examples/angular/injectHotkeySequence/angular.json
@@ -1 +1,63 @@
-{"$schema":"./node_modules/@angular/cli/lib/config/schema.json","version":1,"newProjectRoot":"projects","projects":{"injectHotkeySequence":{"projectType":"application","schematics":{"@schematics/angular:class":{"skipTests":true},"@schematics/angular:component":{"skipTests":true}},"root":"","sourceRoot":"src","prefix":"app","architect":{"build":{"builder":"@angular-devkit/build-angular:application","options":{"outputPath":"dist/inject-hotkey-sequence","index":"src/index.html","browser":"src/main.ts","polyfills":["zone.js"],"tsConfig":"tsconfig.json","assets":[],"styles":["src/styles.css"],"scripts":[]},"configurations":{"production":{"budgets":[{"type":"initial","maximumWarning":"500kB","maximumError":"1MB"}],"outputHashing":"all"},"development":{"optimization":false,"extractLicenses":false,"sourceMap":true}},"defaultConfiguration":"production"},"serve":{"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"injectHotkeySequence:build:production"},"development":{"buildTarget":"injectHotkeySequence:build:development"}},"defaultConfiguration":"development"}}}},"cli":{"analytics":false}}
+{
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+ "version": 1,
+ "newProjectRoot": "projects",
+ "projects": {
+ "injectHotkeySequence": {
+ "projectType": "application",
+ "schematics": {
+ "@schematics/angular:class": { "skipTests": true },
+ "@schematics/angular:component": { "skipTests": true }
+ },
+ "root": "",
+ "sourceRoot": "src",
+ "prefix": "app",
+ "architect": {
+ "build": {
+ "builder": "@angular-devkit/build-angular:application",
+ "options": {
+ "outputPath": "dist/inject-hotkey-sequence",
+ "index": "src/index.html",
+ "browser": "src/main.ts",
+ "polyfills": ["zone.js"],
+ "tsConfig": "tsconfig.json",
+ "assets": [],
+ "styles": ["src/styles.css"],
+ "scripts": []
+ },
+ "configurations": {
+ "production": {
+ "budgets": [
+ {
+ "type": "initial",
+ "maximumWarning": "500kB",
+ "maximumError": "1MB"
+ }
+ ],
+ "outputHashing": "all"
+ },
+ "development": {
+ "optimization": false,
+ "extractLicenses": false,
+ "sourceMap": true
+ }
+ },
+ "defaultConfiguration": "production"
+ },
+ "serve": {
+ "builder": "@angular-devkit/build-angular:dev-server",
+ "configurations": {
+ "production": {
+ "buildTarget": "injectHotkeySequence:build:production"
+ },
+ "development": {
+ "buildTarget": "injectHotkeySequence:build:development"
+ }
+ },
+ "defaultConfiguration": "development"
+ }
+ }
+ }
+ },
+ "cli": { "analytics": false }
+}
diff --git a/examples/angular/injectHotkeySequence/package.json b/examples/angular/injectHotkeySequence/package.json
index 9165210..dfdeac2 100644
--- a/examples/angular/injectHotkeySequence/package.json
+++ b/examples/angular/injectHotkeySequence/package.json
@@ -1 +1,39 @@
-{"name":"inject-hotkey-sequence","version":"0.0.0","scripts":{"ng":"ng","start":"ng serve --port=3074","dev":"ng serve --port=3074","build":"ng build","watch":"ng build --watch --configuration development","test":"ng test"},"private":true,"dependencies":{"@tanstack/angular-hotkeys":"workspace:*","@angular/common":"^19.2.0","@angular/compiler":"^19.2.0","@angular/core":"^19.2.0","@angular/forms":"^19.2.0","@angular/platform-browser":"^19.2.0","@angular/platform-browser-dynamic":"^19.2.0","@angular/router":"^19.2.0","rxjs":"~7.8.0","tslib":"^2.3.0","zone.js":"~0.15.0"},"devDependencies":{"@angular-devkit/build-angular":"^19.2.20","@angular/cli":"^19.2.20","@angular/compiler-cli":"^19.2.0","@types/jasmine":"~5.1.0","jasmine-core":"~5.6.0","karma":"~6.4.0","karma-chrome-launcher":"~3.2.0","karma-coverage":"~2.2.0","karma-jasmine":"~5.1.0","karma-jasmine-html-reporter":"~2.1.0","typescript":"~5.7.2"}}
+{
+ "name": "inject-hotkey-sequence",
+ "version": "0.0.0",
+ "scripts": {
+ "ng": "ng",
+ "start": "ng serve --port=3074",
+ "dev": "ng serve --port=3074",
+ "build": "ng build",
+ "watch": "ng build --watch --configuration development",
+ "test": "ng test"
+ },
+ "private": true,
+ "dependencies": {
+ "@angular/common": "^19.2.0",
+ "@angular/compiler": "^19.2.0",
+ "@angular/core": "^19.2.0",
+ "@angular/forms": "^19.2.0",
+ "@angular/platform-browser": "^19.2.0",
+ "@angular/platform-browser-dynamic": "^19.2.0",
+ "@angular/router": "^19.2.0",
+ "@tanstack/angular-hotkeys": "workspace:*",
+ "rxjs": "~7.8.0",
+ "tslib": "^2.3.0",
+ "zone.js": "~0.15.0"
+ },
+ "devDependencies": {
+ "@angular-devkit/build-angular": "^19.2.20",
+ "@angular/cli": "^19.2.20",
+ "@angular/compiler-cli": "^19.2.0",
+ "@types/jasmine": "~5.1.0",
+ "jasmine-core": "~5.6.0",
+ "karma": "~6.4.0",
+ "karma-chrome-launcher": "~3.2.0",
+ "karma-coverage": "~2.2.0",
+ "karma-jasmine": "~5.1.0",
+ "karma-jasmine-html-reporter": "~2.1.0",
+ "typescript": "5.9.3"
+ }
+}
diff --git a/examples/angular/injectHotkeySequence/src/app/app.component.html b/examples/angular/injectHotkeySequence/src/app/app.component.html
index 7e24765..47c6412 100644
--- a/examples/angular/injectHotkeySequence/src/app/app.component.html
+++ b/examples/angular/injectHotkeySequence/src/app/app.component.html
@@ -70,14 +70,15 @@ Spell It Out
@if (lastSequence(); as seq) {
-
- Triggered: {{ seq }}
-
+ Triggered: {{ seq }}
}
Usage
- import {{ '{' }} injectHotkeySequence {{ '}' }} from '@tanstack/angular-hotkeys'
+
+import {{ '{' }} injectHotkeySequence {{
+ '}'
+ }} from '@tanstack/angular-hotkeys'
// In constructor or injection context:
injectHotkeySequence(['G', 'G'], () => scrollToTop())
@@ -88,7 +89,8 @@ Usage
{{ '{' }} timeout: 1500 {{ '}' }}
)
-injectHotkeySequence(['C', 'I', 'W'], () => changeInnerWord())
+injectHotkeySequence(['C', 'I', 'W'], () => changeInnerWord())
@if (history().length > 0) {
diff --git a/examples/angular/injectHotkeySequence/src/app/app.component.ts b/examples/angular/injectHotkeySequence/src/app/app.component.ts
index 834a1dd..6838dad 100644
--- a/examples/angular/injectHotkeySequence/src/app/app.component.ts
+++ b/examples/angular/injectHotkeySequence/src/app/app.component.ts
@@ -1,8 +1,5 @@
-import { Component, signal } from '@angular/core';
-import {
- injectHotkey,
- injectHotkeySequence,
-} from '@tanstack/angular-hotkeys';
+import { Component, signal } from '@angular/core'
+import { injectHotkey, injectHotkeySequence } from '@tanstack/angular-hotkeys'
@Component({
selector: 'app-root',
@@ -11,53 +8,49 @@ import {
styleUrl: './app.component.css',
})
export class AppComponent {
- lastSequence = signal(null);
- history = signal([]);
+ lastSequence = signal(null)
+ history = signal([])
constructor() {
const addToHistory = (action: string) => {
- this.lastSequence.set(action);
- this.history.update((h) => [...h.slice(-9), action]);
- };
-
- injectHotkeySequence(['G', 'G'], () => addToHistory('gg → Go to top'));
- injectHotkeySequence(['Shift+G'], () =>
- addToHistory('G → Go to bottom'),
- );
- injectHotkeySequence(['D', 'D'], () =>
- addToHistory('dd → Delete line'),
- );
+ this.lastSequence.set(action)
+ this.history.update((h) => [...h.slice(-9), action])
+ }
+
+ injectHotkeySequence(['G', 'G'], () => addToHistory('gg → Go to top'))
+ injectHotkeySequence(['Shift+G'], () => addToHistory('G → Go to bottom'))
+ injectHotkeySequence(['D', 'D'], () => addToHistory('dd → Delete line'))
injectHotkeySequence(['Y', 'Y'], () =>
addToHistory('yy → Yank (copy) line'),
- );
- injectHotkeySequence(['D', 'W'], () => addToHistory('dw → Delete word'));
+ )
+ injectHotkeySequence(['D', 'W'], () => addToHistory('dw → Delete word'))
injectHotkeySequence(['C', 'I', 'W'], () =>
addToHistory('ciw → Change inner word'),
- );
+ )
injectHotkeySequence(
['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown'],
() => addToHistory('↑↑↓↓ → Konami code (partial)'),
{ timeout: 1500 },
- );
+ )
injectHotkeySequence(
['ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight'],
() => addToHistory('←→←→ → Side to side!'),
{ timeout: 1500 },
- );
+ )
injectHotkeySequence(['H', 'E', 'L', 'L', 'O'], () =>
addToHistory('hello → Hello World!'),
- );
+ )
injectHotkey('Escape', () => {
- this.lastSequence.set(null);
- this.history.set([]);
- });
+ this.lastSequence.set(null)
+ this.history.set([])
+ })
}
clearHistory(): void {
- this.history.set([]);
+ this.history.set([])
}
}
diff --git a/examples/angular/injectHotkeySequence/src/app/app.config.ts b/examples/angular/injectHotkeySequence/src/app/app.config.ts
index b3ea09d..a226399 100644
--- a/examples/angular/injectHotkeySequence/src/app/app.config.ts
+++ b/examples/angular/injectHotkeySequence/src/app/app.config.ts
@@ -1,9 +1,9 @@
-import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
-import { provideHotkeys } from '@tanstack/angular-hotkeys';
+import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'
+import { provideHotkeys } from '@tanstack/angular-hotkeys'
export const appConfig: ApplicationConfig = {
providers: [
provideZoneChangeDetection({ eventCoalescing: true }),
provideHotkeys(),
],
-};
+}
diff --git a/examples/angular/injectHotkeySequence/src/main.ts b/examples/angular/injectHotkeySequence/src/main.ts
index 17447a5..c3d8f9a 100644
--- a/examples/angular/injectHotkeySequence/src/main.ts
+++ b/examples/angular/injectHotkeySequence/src/main.ts
@@ -1,5 +1,5 @@
-import { bootstrapApplication } from '@angular/platform-browser';
-import { appConfig } from './app/app.config';
-import { AppComponent } from './app/app.component';
+import { bootstrapApplication } from '@angular/platform-browser'
+import { appConfig } from './app/app.config'
+import { AppComponent } from './app/app.component'
-bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));
+bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err))
diff --git a/examples/angular/injectHotkeySequence/tsconfig.json b/examples/angular/injectHotkeySequence/tsconfig.json
index 6a37648..f12677c 100644
--- a/examples/angular/injectHotkeySequence/tsconfig.json
+++ b/examples/angular/injectHotkeySequence/tsconfig.json
@@ -1 +1,29 @@
-{"compileOnSave":false,"compilerOptions":{"outDir":"./out-tsc/app","lib":["ES2022","dom"],"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"skipLibCheck":true,"isolatedModules":true,"esModuleInterop":true,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","types":[]},"angularCompilerOptions":{"enableI18nLegacyMessageIdFormat":false,"strictInjectionParameters":true,"strictInputAccessModifiers":true,"strictTemplates":true},"files":["src/main.ts"],"include":["src/**/*.d.ts"]}
+{
+ "compileOnSave": false,
+ "compilerOptions": {
+ "outDir": "./out-tsc/app",
+ "lib": ["ES2022", "dom"],
+ "strict": true,
+ "noImplicitOverride": true,
+ "noPropertyAccessFromIndexSignature": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true,
+ "skipLibCheck": true,
+ "isolatedModules": true,
+ "esModuleInterop": true,
+ "experimentalDecorators": true,
+ "moduleResolution": "bundler",
+ "importHelpers": true,
+ "target": "ES2022",
+ "module": "ES2022",
+ "types": []
+ },
+ "angularCompilerOptions": {
+ "enableI18nLegacyMessageIdFormat": false,
+ "strictInjectionParameters": true,
+ "strictInputAccessModifiers": true,
+ "strictTemplates": true
+ },
+ "files": ["src/main.ts"],
+ "include": ["src/**/*.d.ts"]
+}
diff --git a/examples/angular/injectKeyHold/angular.json b/examples/angular/injectKeyHold/angular.json
index 7d88260..8d1f215 100644
--- a/examples/angular/injectKeyHold/angular.json
+++ b/examples/angular/injectKeyHold/angular.json
@@ -1 +1,59 @@
-{"$schema":"./node_modules/@angular/cli/lib/config/schema.json","version":1,"newProjectRoot":"projects","projects":{"injectKeyHold":{"projectType":"application","schematics":{"@schematics/angular:class":{"skipTests":true},"@schematics/angular:component":{"skipTests":true}},"root":"","sourceRoot":"src","prefix":"app","architect":{"build":{"builder":"@angular-devkit/build-angular:application","options":{"outputPath":"dist/inject-key-hold","index":"src/index.html","browser":"src/main.ts","polyfills":["zone.js"],"tsConfig":"tsconfig.json","assets":[],"styles":["src/styles.css"],"scripts":[]},"configurations":{"production":{"budgets":[{"type":"initial","maximumWarning":"500kB","maximumError":"1MB"}],"outputHashing":"all"},"development":{"optimization":false,"extractLicenses":false,"sourceMap":true}},"defaultConfiguration":"production"},"serve":{"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"injectKeyHold:build:production"},"development":{"buildTarget":"injectKeyHold:build:development"}},"defaultConfiguration":"development"}}}},"cli":{"analytics":false}}
+{
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+ "version": 1,
+ "newProjectRoot": "projects",
+ "projects": {
+ "injectKeyHold": {
+ "projectType": "application",
+ "schematics": {
+ "@schematics/angular:class": { "skipTests": true },
+ "@schematics/angular:component": { "skipTests": true }
+ },
+ "root": "",
+ "sourceRoot": "src",
+ "prefix": "app",
+ "architect": {
+ "build": {
+ "builder": "@angular-devkit/build-angular:application",
+ "options": {
+ "outputPath": "dist/inject-key-hold",
+ "index": "src/index.html",
+ "browser": "src/main.ts",
+ "polyfills": ["zone.js"],
+ "tsConfig": "tsconfig.json",
+ "assets": [],
+ "styles": ["src/styles.css"],
+ "scripts": []
+ },
+ "configurations": {
+ "production": {
+ "budgets": [
+ {
+ "type": "initial",
+ "maximumWarning": "500kB",
+ "maximumError": "1MB"
+ }
+ ],
+ "outputHashing": "all"
+ },
+ "development": {
+ "optimization": false,
+ "extractLicenses": false,
+ "sourceMap": true
+ }
+ },
+ "defaultConfiguration": "production"
+ },
+ "serve": {
+ "builder": "@angular-devkit/build-angular:dev-server",
+ "configurations": {
+ "production": { "buildTarget": "injectKeyHold:build:production" },
+ "development": { "buildTarget": "injectKeyHold:build:development" }
+ },
+ "defaultConfiguration": "development"
+ }
+ }
+ }
+ },
+ "cli": { "analytics": false }
+}
diff --git a/examples/angular/injectKeyHold/package.json b/examples/angular/injectKeyHold/package.json
index 29cb1c7..edd300a 100644
--- a/examples/angular/injectKeyHold/package.json
+++ b/examples/angular/injectKeyHold/package.json
@@ -1 +1,39 @@
-{"name":"inject-key-hold","version":"0.0.0","scripts":{"ng":"ng","start":"ng serve --port=3072","dev":"ng serve --port=3072","build":"ng build","watch":"ng build --watch --configuration development","test":"ng test"},"private":true,"dependencies":{"@tanstack/angular-hotkeys":"workspace:*","@angular/common":"^19.2.0","@angular/compiler":"^19.2.0","@angular/core":"^19.2.0","@angular/forms":"^19.2.0","@angular/platform-browser":"^19.2.0","@angular/platform-browser-dynamic":"^19.2.0","@angular/router":"^19.2.0","rxjs":"~7.8.0","tslib":"^2.3.0","zone.js":"~0.15.0"},"devDependencies":{"@angular-devkit/build-angular":"^19.2.20","@angular/cli":"^19.2.20","@angular/compiler-cli":"^19.2.0","@types/jasmine":"~5.1.0","jasmine-core":"~5.6.0","karma":"~6.4.0","karma-chrome-launcher":"~3.2.0","karma-coverage":"~2.2.0","karma-jasmine":"~5.1.0","karma-jasmine-html-reporter":"~2.1.0","typescript":"~5.7.2"}}
+{
+ "name": "inject-key-hold",
+ "version": "0.0.0",
+ "scripts": {
+ "ng": "ng",
+ "start": "ng serve --port=3072",
+ "dev": "ng serve --port=3072",
+ "build": "ng build",
+ "watch": "ng build --watch --configuration development",
+ "test": "ng test"
+ },
+ "private": true,
+ "dependencies": {
+ "@angular/common": "^19.2.0",
+ "@angular/compiler": "^19.2.0",
+ "@angular/core": "^19.2.0",
+ "@angular/forms": "^19.2.0",
+ "@angular/platform-browser": "^19.2.0",
+ "@angular/platform-browser-dynamic": "^19.2.0",
+ "@angular/router": "^19.2.0",
+ "@tanstack/angular-hotkeys": "workspace:*",
+ "rxjs": "~7.8.0",
+ "tslib": "^2.3.0",
+ "zone.js": "~0.15.0"
+ },
+ "devDependencies": {
+ "@angular-devkit/build-angular": "^19.2.20",
+ "@angular/cli": "^19.2.20",
+ "@angular/compiler-cli": "^19.2.0",
+ "@types/jasmine": "~5.1.0",
+ "jasmine-core": "~5.6.0",
+ "karma": "~6.4.0",
+ "karma-chrome-launcher": "~3.2.0",
+ "karma-coverage": "~2.2.0",
+ "karma-jasmine": "~5.1.0",
+ "karma-jasmine-html-reporter": "~2.1.0",
+ "typescript": "5.9.3"
+ }
+}
diff --git a/examples/angular/injectKeyHold/src/app/app.component.html b/examples/angular/injectKeyHold/src/app/app.component.html
index 34717da..23fee06 100644
--- a/examples/angular/injectKeyHold/src/app/app.component.html
+++ b/examples/angular/injectKeyHold/src/app/app.component.html
@@ -17,7 +17,9 @@ Modifier Key States
Control
- {{ isControlHeld() ? 'HELD' : 'Released' }}
+ {{
+ isControlHeld() ? 'HELD' : 'Released'
+ }}
Alt / Option
@@ -39,13 +41,17 @@
Space Bar Demo
Usage
- import {{ '{' }} injectKeyHold {{ '}' }} from '@tanstack/angular-hotkeys'
+
+import {{ '{' }} injectKeyHold {{ '}' }} from '@tanstack/angular-hotkeys'
@Component({{ '{' }} ... {{ '}' }})
export class ShiftIndicatorComponent {{ '{' }}
isShiftHeld = injectKeyHold('Shift')
- // Template: {{ '{{' }} isShiftHeld() ? 'Shift is pressed!' : 'Press Shift' {{ '}}' }}
-{{ '}' }}
+ // Template: {{
+ '{{'
+ }} isShiftHeld() ? 'Shift is pressed!' : 'Press Shift' {{ '}}' }}
+{{ '}' }}
diff --git a/examples/angular/injectKeyHold/src/app/app.component.ts b/examples/angular/injectKeyHold/src/app/app.component.ts
index db686f2..f90291f 100644
--- a/examples/angular/injectKeyHold/src/app/app.component.ts
+++ b/examples/angular/injectKeyHold/src/app/app.component.ts
@@ -1,5 +1,5 @@
-import { Component } from '@angular/core';
-import { injectKeyHold } from '@tanstack/angular-hotkeys';
+import { Component } from '@angular/core'
+import { injectKeyHold } from '@tanstack/angular-hotkeys'
@Component({
selector: 'app-root',
@@ -8,9 +8,9 @@ import { injectKeyHold } from '@tanstack/angular-hotkeys';
styleUrl: './app.component.css',
})
export class AppComponent {
- isShiftHeld = injectKeyHold('Shift');
- isControlHeld = injectKeyHold('Control');
- isAltHeld = injectKeyHold('Alt');
- isMetaHeld = injectKeyHold('Meta');
- isSpaceHeld = injectKeyHold('Space');
+ isShiftHeld = injectKeyHold('Shift')
+ isControlHeld = injectKeyHold('Control')
+ isAltHeld = injectKeyHold('Alt')
+ isMetaHeld = injectKeyHold('Meta')
+ isSpaceHeld = injectKeyHold('Space')
}
diff --git a/examples/angular/injectKeyHold/src/app/app.config.ts b/examples/angular/injectKeyHold/src/app/app.config.ts
index b3ea09d..a226399 100644
--- a/examples/angular/injectKeyHold/src/app/app.config.ts
+++ b/examples/angular/injectKeyHold/src/app/app.config.ts
@@ -1,9 +1,9 @@
-import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
-import { provideHotkeys } from '@tanstack/angular-hotkeys';
+import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'
+import { provideHotkeys } from '@tanstack/angular-hotkeys'
export const appConfig: ApplicationConfig = {
providers: [
provideZoneChangeDetection({ eventCoalescing: true }),
provideHotkeys(),
],
-};
+}
diff --git a/examples/angular/injectKeyHold/src/main.ts b/examples/angular/injectKeyHold/src/main.ts
index 17447a5..c3d8f9a 100644
--- a/examples/angular/injectKeyHold/src/main.ts
+++ b/examples/angular/injectKeyHold/src/main.ts
@@ -1,5 +1,5 @@
-import { bootstrapApplication } from '@angular/platform-browser';
-import { appConfig } from './app/app.config';
-import { AppComponent } from './app/app.component';
+import { bootstrapApplication } from '@angular/platform-browser'
+import { appConfig } from './app/app.config'
+import { AppComponent } from './app/app.component'
-bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));
+bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err))
diff --git a/examples/angular/injectKeyHold/tsconfig.json b/examples/angular/injectKeyHold/tsconfig.json
index 6a37648..f12677c 100644
--- a/examples/angular/injectKeyHold/tsconfig.json
+++ b/examples/angular/injectKeyHold/tsconfig.json
@@ -1 +1,29 @@
-{"compileOnSave":false,"compilerOptions":{"outDir":"./out-tsc/app","lib":["ES2022","dom"],"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"skipLibCheck":true,"isolatedModules":true,"esModuleInterop":true,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","types":[]},"angularCompilerOptions":{"enableI18nLegacyMessageIdFormat":false,"strictInjectionParameters":true,"strictInputAccessModifiers":true,"strictTemplates":true},"files":["src/main.ts"],"include":["src/**/*.d.ts"]}
+{
+ "compileOnSave": false,
+ "compilerOptions": {
+ "outDir": "./out-tsc/app",
+ "lib": ["ES2022", "dom"],
+ "strict": true,
+ "noImplicitOverride": true,
+ "noPropertyAccessFromIndexSignature": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true,
+ "skipLibCheck": true,
+ "isolatedModules": true,
+ "esModuleInterop": true,
+ "experimentalDecorators": true,
+ "moduleResolution": "bundler",
+ "importHelpers": true,
+ "target": "ES2022",
+ "module": "ES2022",
+ "types": []
+ },
+ "angularCompilerOptions": {
+ "enableI18nLegacyMessageIdFormat": false,
+ "strictInjectionParameters": true,
+ "strictInputAccessModifiers": true,
+ "strictTemplates": true
+ },
+ "files": ["src/main.ts"],
+ "include": ["src/**/*.d.ts"]
+}
diff --git a/packages/angular-hotkeys/README.md b/packages/angular-hotkeys/README.md
index 25f2a1e..4e4f84c 100644
--- a/packages/angular-hotkeys/README.md
+++ b/packages/angular-hotkeys/README.md
@@ -30,22 +30,22 @@ pnpm add @tanstack/angular-hotkeys @tanstack/hotkeys
```ts
// app.config.ts
-import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
-import { provideHotkeys } from '@tanstack/angular-hotkeys';
+import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'
+import { provideHotkeys } from '@tanstack/angular-hotkeys'
export const appConfig: ApplicationConfig = {
providers: [
provideZoneChangeDetection({ eventCoalescing: true }),
provideHotkeys(),
],
-};
+}
```
**2. Register a hotkey in a component (injection context):**
```ts
-import { Component } from '@angular/core';
-import { injectHotkey } from '@tanstack/angular-hotkeys';
+import { Component } from '@angular/core'
+import { injectHotkey } from '@tanstack/angular-hotkeys'
@Component({
selector: 'app-root',
@@ -55,9 +55,9 @@ import { injectHotkey } from '@tanstack/angular-hotkeys';
export class AppComponent {
constructor() {
injectHotkey('Mod+S', (event) => {
- event.preventDefault();
- console.log('Save!');
- });
+ event.preventDefault()
+ console.log('Save!')
+ })
}
}
```
@@ -67,8 +67,8 @@ export class AppComponent {
### Basic Hotkey
```ts
-import { Component, signal } from '@angular/core';
-import { injectHotkey } from '@tanstack/angular-hotkeys';
+import { Component, signal } from '@angular/core'
+import { injectHotkey } from '@tanstack/angular-hotkeys'
@Component({
selector: 'app-save-button',
@@ -76,13 +76,13 @@ import { injectHotkey } from '@tanstack/angular-hotkeys';
template: `Save (Cmd/Ctrl+S) `,
})
export class SaveButtonComponent {
- private readonly saveCount = signal(0);
+ private readonly saveCount = signal(0)
constructor() {
injectHotkey('Mod+S', (event, { hotkey }) => {
- event.preventDefault();
- this.saveCount.update((c) => c + 1);
- });
+ event.preventDefault()
+ this.saveCount.update((c) => c + 1)
+ })
}
}
```
@@ -90,8 +90,8 @@ export class SaveButtonComponent {
### Conditional Hotkeys
```ts
-import { Component, signal } from '@angular/core';
-import { injectHotkey } from '@tanstack/angular-hotkeys';
+import { Component, signal } from '@angular/core'
+import { injectHotkey } from '@tanstack/angular-hotkeys'
@Component({
selector: 'app-modal',
@@ -103,14 +103,18 @@ import { injectHotkey } from '@tanstack/angular-hotkeys';
`,
})
export class ModalComponent {
- isOpen = signal(true);
+ isOpen = signal(true)
constructor() {
- injectHotkey('Escape', () => this.close(), () => ({ enabled: this.isOpen() }));
+ injectHotkey(
+ 'Escape',
+ () => this.close(),
+ () => ({ enabled: this.isOpen() }),
+ )
}
close() {
- this.isOpen.set(false);
+ this.isOpen.set(false)
}
}
```
@@ -120,8 +124,8 @@ export class ModalComponent {
Use a getter for `target` so the hotkey waits for the element (e.g. from `viewChild`):
```ts
-import { Component, viewChild, ElementRef } from '@angular/core';
-import { injectHotkey } from '@tanstack/angular-hotkeys';
+import { Component, viewChild, ElementRef } from '@angular/core'
+import { injectHotkey } from '@tanstack/angular-hotkeys'
@Component({
selector: 'app-editor',
@@ -129,18 +133,19 @@ import { injectHotkey } from '@tanstack/angular-hotkeys';
template: `
`,
})
export class EditorComponent {
- private readonly editorRef = viewChild>('editorRef');
+ private readonly editorRef =
+ viewChild>('editorRef')
constructor() {
injectHotkey(
'Mod+B',
() => this.toggleBold(),
() => ({ target: this.editorRef()?.nativeElement ?? null }),
- );
+ )
}
toggleBold() {
- document.execCommand('bold');
+ document.execCommand('bold')
}
}
```
@@ -148,8 +153,8 @@ export class EditorComponent {
### Hotkey Sequences (Vim-style)
```ts
-import { Component, signal } from '@angular/core';
-import { injectHotkeySequence, injectHotkey } from '@tanstack/angular-hotkeys';
+import { Component, signal } from '@angular/core'
+import { injectHotkeySequence, injectHotkey } from '@tanstack/angular-hotkeys'
@Component({
selector: 'app-vim-editor',
@@ -157,17 +162,21 @@ import { injectHotkeySequence, injectHotkey } from '@tanstack/angular-hotkeys';
template: `Try Vim shortcuts! Last: {{ lastSequence() }}
`,
})
export class VimEditorComponent {
- lastSequence = signal(null);
+ lastSequence = signal(null)
constructor() {
- injectHotkeySequence(['G', 'G'], () => this.lastSequence.set('gg → Go to top'));
- injectHotkeySequence(['D', 'D'], () => this.lastSequence.set('dd → Delete line'));
+ injectHotkeySequence(['G', 'G'], () =>
+ this.lastSequence.set('gg → Go to top'),
+ )
+ injectHotkeySequence(['D', 'D'], () =>
+ this.lastSequence.set('dd → Delete line'),
+ )
injectHotkeySequence(
['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown'],
() => this.lastSequence.set('Konami!'),
{ timeout: 1500 },
- );
- injectHotkey('Escape', () => this.lastSequence.set(null));
+ )
+ injectHotkey('Escape', () => this.lastSequence.set(null))
}
}
```
@@ -175,28 +184,33 @@ export class VimEditorComponent {
### Track Held Keys
```ts
-import { Component } from '@angular/core';
-import { injectHeldKeys, injectKeyHold } from '@tanstack/angular-hotkeys';
+import { Component } from '@angular/core'
+import { injectHeldKeys, injectKeyHold } from '@tanstack/angular-hotkeys'
@Component({
selector: 'app-key-tracker',
standalone: true,
template: `
Shift: {{ isShiftHeld() ? 'Pressed' : 'Not pressed' }}
- All held: @for (key of heldKeys(); track key) { {{ key }} }
+
+ All held:
+ @for (key of heldKeys(); track key) {
+ {{ key }}
+ }
+
`,
})
export class KeyTrackerComponent {
- heldKeys = injectHeldKeys();
- isShiftHeld = injectKeyHold('Shift');
+ heldKeys = injectHeldKeys()
+ isShiftHeld = injectKeyHold('Shift')
}
```
### Hotkey Recorder
```ts
-import { Component, signal } from '@angular/core';
-import { injectHotkey, injectHotkeyRecorder } from '@tanstack/angular-hotkeys';
+import { Component, signal } from '@angular/core'
+import { injectHotkey, injectHotkeyRecorder } from '@tanstack/angular-hotkeys'
@Component({
selector: 'app-shortcut-settings',
@@ -209,18 +223,18 @@ import { injectHotkey, injectHotkeyRecorder } from '@tanstack/angular-hotkeys';
`,
})
export class ShortcutSettingsComponent {
- shortcut = signal('Mod+S');
+ shortcut = signal('Mod+S')
recorder = injectHotkeyRecorder({
onRecord: (hotkey) => this.shortcut.set(hotkey),
onCancel: () => console.log('Recording cancelled'),
- });
+ })
constructor() {
injectHotkey(
() => this.shortcut(),
() => this.handleSave(),
() => ({ enabled: !this.recorder.isRecording() }),
- );
+ )
}
handleSave() {
@@ -233,7 +247,7 @@ export class ShortcutSettingsComponent {
```ts
// app.config.ts
-import { provideHotkeys } from '@tanstack/angular-hotkeys';
+import { provideHotkeys } from '@tanstack/angular-hotkeys'
export const appConfig: ApplicationConfig = {
providers: [
@@ -247,7 +261,7 @@ export const appConfig: ApplicationConfig = {
},
}),
],
-};
+}
```
## API
@@ -277,7 +291,7 @@ Register a multi-key sequence (Vim-style).
Returns a signal of currently held key names.
```ts
-const heldKeys = injectHeldKeys();
+const heldKeys = injectHeldKeys()
// heldKeys() => ['Shift', 'A']
```
@@ -286,7 +300,7 @@ const heldKeys = injectHeldKeys();
Returns a signal of a map from held key names to their physical `event.code` values.
```ts
-const heldCodes = injectHeldKeyCodes();
+const heldCodes = injectHeldKeyCodes()
// heldCodes() => { Shift: 'ShiftLeft', A: 'KeyA' }
```
@@ -295,7 +309,7 @@ const heldCodes = injectHeldKeyCodes();
Returns a signal that is true when the given key is held.
```ts
-const isShiftHeld = injectKeyHold('Shift');
+const isShiftHeld = injectKeyHold('Shift')
// isShiftHeld() => true | false
```
diff --git a/packages/angular-hotkeys/package.json b/packages/angular-hotkeys/package.json
index 52015ba..38bc328 100644
--- a/packages/angular-hotkeys/package.json
+++ b/packages/angular-hotkeys/package.json
@@ -59,9 +59,9 @@
"@angular/core": ">=19.0.0"
},
"devDependencies": {
- "@angular/common": "^19.0.0",
- "@angular/core": "^19.0.0",
- "@angular/platform-browser-dynamic": "^19.0.0",
+ "@angular/common": "^19.2.0",
+ "@angular/core": "^19.2.0",
+ "@angular/platform-browser-dynamic": "^19.2.0",
"typescript": "5.9.3"
}
}
diff --git a/packages/angular-hotkeys/src/injectHotkey.ts b/packages/angular-hotkeys/src/injectHotkey.ts
index 7c7207b..83f70aa 100644
--- a/packages/angular-hotkeys/src/injectHotkey.ts
+++ b/packages/angular-hotkeys/src/injectHotkey.ts
@@ -107,8 +107,8 @@ export function injectHotkey(
typeof resolvedHotkey === 'string'
? resolvedHotkey
: (formatHotkey(
- rawHotkeyToParsedHotkey(resolvedHotkey, platform),
- ) as Hotkey)
+ rawHotkeyToParsedHotkey(resolvedHotkey, platform),
+ ) as Hotkey)
// Resolve target: when explicitly provided (even as null), use it and skip if null.
// When not provided, default to document. Matches React's ref handling.
@@ -152,5 +152,4 @@ export function injectHotkey(
}
})
})
-
}
diff --git a/packages/angular-hotkeys/src/injectHotkeySequence.ts b/packages/angular-hotkeys/src/injectHotkeySequence.ts
index dff6210..8f50af1 100644
--- a/packages/angular-hotkeys/src/injectHotkeySequence.ts
+++ b/packages/angular-hotkeys/src/injectHotkeySequence.ts
@@ -7,7 +7,6 @@ import type {
SequenceOptions,
} from '@tanstack/hotkeys'
-
export interface InjectHotkeySequenceOptions extends Omit<
SequenceOptions,
'enabled'
@@ -16,7 +15,6 @@ export interface InjectHotkeySequenceOptions extends Omit<
enabled?: boolean
}
-
/**
* Angular inject-based API for registering a keyboard shortcut sequence (Vim-style).
*
diff --git a/packages/angular-hotkeys/src/injectKeyHold.ts b/packages/angular-hotkeys/src/injectKeyHold.ts
index 965b71a..1ef12d4 100644
--- a/packages/angular-hotkeys/src/injectKeyHold.ts
+++ b/packages/angular-hotkeys/src/injectKeyHold.ts
@@ -37,9 +37,7 @@ import type { Signal } from '@angular/core'
* }
* ```
*/
-export function injectKeyHold(
- key: HeldKey | (() => HeldKey),
-): Signal {
+export function injectKeyHold(key: HeldKey | (() => HeldKey)): Signal {
const tracker = getKeyStateTracker()
const heldKeysSelector = injectStore(tracker.store, (state) => state.heldKeys)
diff --git a/packages/angular-hotkeys/tests/injectHotkey.test.ts b/packages/angular-hotkeys/tests/injectHotkey.test.ts
index eba26a2..b86df12 100644
--- a/packages/angular-hotkeys/tests/injectHotkey.test.ts
+++ b/packages/angular-hotkeys/tests/injectHotkey.test.ts
@@ -1,5 +1,8 @@
// @vitest-environment happy-dom
-import { provideExperimentalZonelessChangeDetection, signal } from '@angular/core'
+import {
+ provideExperimentalZonelessChangeDetection,
+ signal,
+} from '@angular/core'
import { TestBed } from '@angular/core/testing'
import { HotkeyManager } from '@tanstack/hotkeys'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 439b350..3a54eb8 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -119,13 +119,13 @@ importers:
devDependencies:
'@angular-devkit/build-angular':
specifier: ^19.2.20
- version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.7.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
+ version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
'@angular/cli':
specifier: ^19.2.20
version: 19.2.20(@types/node@25.3.0)(chokidar@4.0.3)
'@angular/compiler-cli':
specifier: ^19.2.0
- version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
+ version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
'@types/jasmine':
specifier: ~5.1.0
version: 5.1.15
@@ -148,8 +148,8 @@ importers:
specifier: ~2.1.0
version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4)
typescript:
- specifier: ~5.7.2
- version: 5.7.3
+ specifier: 5.9.3
+ version: 5.9.3
examples/angular/injectHotkey:
dependencies:
@@ -189,13 +189,13 @@ importers:
devDependencies:
'@angular-devkit/build-angular':
specifier: ^19.2.20
- version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.7.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
+ version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
'@angular/cli':
specifier: ^19.2.20
version: 19.2.20(@types/node@25.3.0)(chokidar@4.0.3)
'@angular/compiler-cli':
specifier: ^19.2.0
- version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
+ version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
'@types/jasmine':
specifier: ~5.1.0
version: 5.1.15
@@ -218,8 +218,8 @@ importers:
specifier: ~2.1.0
version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4)
typescript:
- specifier: ~5.7.2
- version: 5.7.3
+ specifier: 5.9.3
+ version: 5.9.3
examples/angular/injectHotkeyRecorder:
dependencies:
@@ -259,13 +259,13 @@ importers:
devDependencies:
'@angular-devkit/build-angular':
specifier: ^19.2.20
- version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.7.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
+ version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
'@angular/cli':
specifier: ^19.2.20
version: 19.2.20(@types/node@25.3.0)(chokidar@4.0.3)
'@angular/compiler-cli':
specifier: ^19.2.0
- version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
+ version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
'@types/jasmine':
specifier: ~5.1.0
version: 5.1.15
@@ -288,8 +288,8 @@ importers:
specifier: ~2.1.0
version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4)
typescript:
- specifier: ~5.7.2
- version: 5.7.3
+ specifier: 5.9.3
+ version: 5.9.3
examples/angular/injectHotkeySequence:
dependencies:
@@ -329,13 +329,13 @@ importers:
devDependencies:
'@angular-devkit/build-angular':
specifier: ^19.2.20
- version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.7.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
+ version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
'@angular/cli':
specifier: ^19.2.20
version: 19.2.20(@types/node@25.3.0)(chokidar@4.0.3)
'@angular/compiler-cli':
specifier: ^19.2.0
- version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
+ version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
'@types/jasmine':
specifier: ~5.1.0
version: 5.1.15
@@ -358,8 +358,8 @@ importers:
specifier: ~2.1.0
version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4)
typescript:
- specifier: ~5.7.2
- version: 5.7.3
+ specifier: 5.9.3
+ version: 5.9.3
examples/angular/injectKeyHold:
dependencies:
@@ -399,13 +399,13 @@ importers:
devDependencies:
'@angular-devkit/build-angular':
specifier: ^19.2.20
- version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.7.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
+ version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
'@angular/cli':
specifier: ^19.2.20
version: 19.2.20(@types/node@25.3.0)(chokidar@4.0.3)
'@angular/compiler-cli':
specifier: ^19.2.0
- version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
+ version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
'@types/jasmine':
specifier: ~5.1.0
version: 5.1.15
@@ -428,8 +428,8 @@ importers:
specifier: ~2.1.0
version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4)
typescript:
- specifier: ~5.7.2
- version: 5.7.3
+ specifier: 5.9.3
+ version: 5.9.3
examples/preact/useHeldKeys:
dependencies:
@@ -867,13 +867,13 @@ importers:
version: link:../hotkeys
devDependencies:
'@angular/common':
- specifier: ^19.0.0
+ specifier: ^19.2.0
version: 19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
'@angular/core':
- specifier: ^19.0.0
+ specifier: ^19.2.0
version: 19.2.18(rxjs@7.8.2)(zone.js@0.15.1)
'@angular/platform-browser-dynamic':
- specifier: ^19.0.0
+ specifier: ^19.2.0
version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.18)(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))
typescript:
specifier: 5.9.3
@@ -7660,11 +7660,6 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- typescript@5.7.3:
- resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==}
- engines: {node: '>=14.17'}
- hasBin: true
-
typescript@5.9.3:
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=14.17'}
@@ -8185,14 +8180,14 @@ snapshots:
transitivePeerDependencies:
- chokidar
- '@angular-devkit/build-angular@19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.7.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)':
+ '@angular-devkit/build-angular@19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)':
dependencies:
'@ampproject/remapping': 2.3.0
'@angular-devkit/architect': 0.1902.20(chokidar@4.0.3)
'@angular-devkit/build-webpack': 0.1902.20(chokidar@4.0.3)(webpack-dev-server@5.2.2(tslib@2.8.1)(webpack@5.105.0))(webpack@5.105.0(esbuild@0.25.4))
'@angular-devkit/core': 19.2.20(chokidar@4.0.3)
- '@angular/build': 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(typescript@5.7.3)(yaml@2.8.2)
- '@angular/compiler-cli': 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
+ '@angular/build': 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(typescript@5.9.3)(yaml@2.8.2)
+ '@angular/compiler-cli': 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
'@babel/core': 7.26.10
'@babel/generator': 7.26.10
'@babel/helper-annotate-as-pure': 7.25.9
@@ -8203,7 +8198,7 @@ snapshots:
'@babel/preset-env': 7.26.9(@babel/core@7.26.10)
'@babel/runtime': 7.26.10
'@discoveryjs/json-ext': 0.6.3
- '@ngtools/webpack': 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(typescript@5.7.3)(webpack@5.105.0(esbuild@0.25.4))
+ '@ngtools/webpack': 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.105.0(esbuild@0.25.4))
'@vitejs/plugin-basic-ssl': 1.2.0(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
ansi-colors: 4.1.3
autoprefixer: 10.4.20(postcss@8.5.2)
@@ -8227,7 +8222,7 @@ snapshots:
picomatch: 4.0.2
piscina: 4.8.0
postcss: 8.5.2
- postcss-loader: 8.1.1(postcss@8.5.2)(typescript@5.7.3)(webpack@5.105.0(esbuild@0.25.4))
+ postcss-loader: 8.1.1(postcss@8.5.2)(typescript@5.9.3)(webpack@5.105.0(esbuild@0.25.4))
resolve-url-loader: 5.0.0
rxjs: 7.8.1
sass: 1.85.0
@@ -8238,7 +8233,7 @@ snapshots:
terser: 5.39.0
tree-kill: 1.2.2
tslib: 2.8.1
- typescript: 5.7.3
+ typescript: 5.9.3
webpack: 5.105.0(esbuild@0.25.4)
webpack-dev-middleware: 7.4.2(tslib@2.8.1)(webpack@5.105.0)
webpack-dev-server: 5.2.2(tslib@2.8.1)(webpack@5.105.0)
@@ -8300,12 +8295,12 @@ snapshots:
transitivePeerDependencies:
- chokidar
- '@angular/build@19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(typescript@5.7.3)(yaml@2.8.2)':
+ '@angular/build@19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(typescript@5.9.3)(yaml@2.8.2)':
dependencies:
'@ampproject/remapping': 2.3.0
'@angular-devkit/architect': 0.1902.20(chokidar@4.0.3)
'@angular/compiler': 19.2.18
- '@angular/compiler-cli': 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
+ '@angular/compiler-cli': 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
'@babel/core': 7.26.10
'@babel/helper-annotate-as-pure': 7.25.9
'@babel/helper-split-export-declaration': 7.24.7
@@ -8328,7 +8323,7 @@ snapshots:
sass: 1.85.0
semver: 7.7.1
source-map-support: 0.5.21
- typescript: 5.7.3
+ typescript: 5.9.3
vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
watchpack: 2.4.2
optionalDependencies:
@@ -8379,7 +8374,7 @@ snapshots:
rxjs: 7.8.2
tslib: 2.8.1
- '@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)':
+ '@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)':
dependencies:
'@angular/compiler': 19.2.18
'@babel/core': 7.26.9
@@ -8389,7 +8384,7 @@ snapshots:
reflect-metadata: 0.2.2
semver: 7.7.4
tslib: 2.8.1
- typescript: 5.7.3
+ typescript: 5.9.3
yargs: 17.7.2
transitivePeerDependencies:
- supports-color
@@ -10198,10 +10193,10 @@ snapshots:
'@tybys/wasm-util': 0.10.1
optional: true
- '@ngtools/webpack@19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3))(typescript@5.7.3)(webpack@5.105.0(esbuild@0.25.4))':
+ '@ngtools/webpack@19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.105.0(esbuild@0.25.4))':
dependencies:
- '@angular/compiler-cli': 19.2.18(@angular/compiler@19.2.18)(typescript@5.7.3)
- typescript: 5.7.3
+ '@angular/compiler-cli': 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
+ typescript: 5.9.3
webpack: 5.105.0(esbuild@0.25.4)
'@nodelib/fs.scandir@2.1.5':
@@ -12003,14 +11998,14 @@ snapshots:
object-assign: 4.1.1
vary: 1.1.2
- cosmiconfig@9.0.0(typescript@5.7.3):
+ cosmiconfig@9.0.0(typescript@5.9.3):
dependencies:
env-paths: 2.2.1
import-fresh: 3.3.1
js-yaml: 4.1.1
parse-json: 5.2.0
optionalDependencies:
- typescript: 5.7.3
+ typescript: 5.9.3
cross-spawn@7.0.6:
dependencies:
@@ -14332,9 +14327,9 @@ snapshots:
possible-typed-array-names@1.1.0: {}
- postcss-loader@8.1.1(postcss@8.5.2)(typescript@5.7.3)(webpack@5.105.0(esbuild@0.25.4)):
+ postcss-loader@8.1.1(postcss@8.5.2)(typescript@5.9.3)(webpack@5.105.0(esbuild@0.25.4)):
dependencies:
- cosmiconfig: 9.0.0(typescript@5.7.3)
+ cosmiconfig: 9.0.0(typescript@5.9.3)
jiti: 1.21.7
postcss: 8.5.2
semver: 7.7.4
@@ -15367,8 +15362,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- typescript@5.7.3: {}
-
typescript@5.9.3: {}
ua-parser-js@0.7.41: {}
diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts
index 6e465ea..20a1a28 100644
--- a/scripts/generate-docs.ts
+++ b/scripts/generate-docs.ts
@@ -59,7 +59,7 @@ await generateReferenceDocs({
),
outputDir: resolve(__dirname, '../docs/framework/angular/reference'),
exclude: ['packages/hotkeys/**/*'],
- }
+ },
],
})
From 982230f17c4eaaffd104d0d3ddcbeebee51ab0d0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?=
Date: Fri, 20 Feb 2026 00:17:28 -0300
Subject: [PATCH 05/11] fix: downgrade ts for angular compatibility
---
examples/angular/injectHeldKeys/package.json | 2 +-
examples/angular/injectHotkey/package.json | 2 +-
.../angular/injectHotkeyRecorder/package.json | 2 +-
.../angular/injectHotkeySequence/package.json | 2 +-
examples/angular/injectKeyHold/package.json | 2 +-
examples/react/useHeldKeys/package.json | 2 +-
examples/react/useHotkey/package.json | 2 +-
examples/react/useHotkeyRecorder/package.json | 2 +-
examples/react/useHotkeySequence/package.json | 2 +-
examples/react/useKeyhold/package.json | 2 +-
examples/solid/createHotkey/package.json | 4 +-
package.json | 2 +-
packages/angular-hotkeys/package.json | 2 +-
pnpm-lock.yaml | 325 ++++++++++++------
14 files changed, 234 insertions(+), 119 deletions(-)
diff --git a/examples/angular/injectHeldKeys/package.json b/examples/angular/injectHeldKeys/package.json
index d9e6cd0..3591c64 100644
--- a/examples/angular/injectHeldKeys/package.json
+++ b/examples/angular/injectHeldKeys/package.json
@@ -34,6 +34,6 @@
"karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
- "typescript": "5.9.3"
+ "typescript": "5.8.3"
}
}
diff --git a/examples/angular/injectHotkey/package.json b/examples/angular/injectHotkey/package.json
index 5be7316..ef7386b 100644
--- a/examples/angular/injectHotkey/package.json
+++ b/examples/angular/injectHotkey/package.json
@@ -34,6 +34,6 @@
"karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
- "typescript": "5.9.3"
+ "typescript": "5.8.3"
}
}
diff --git a/examples/angular/injectHotkeyRecorder/package.json b/examples/angular/injectHotkeyRecorder/package.json
index ee914c2..108664d 100644
--- a/examples/angular/injectHotkeyRecorder/package.json
+++ b/examples/angular/injectHotkeyRecorder/package.json
@@ -34,6 +34,6 @@
"karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
- "typescript": "5.9.3"
+ "typescript": "5.8.3"
}
}
diff --git a/examples/angular/injectHotkeySequence/package.json b/examples/angular/injectHotkeySequence/package.json
index dfdeac2..b982d6e 100644
--- a/examples/angular/injectHotkeySequence/package.json
+++ b/examples/angular/injectHotkeySequence/package.json
@@ -34,6 +34,6 @@
"karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
- "typescript": "5.9.3"
+ "typescript": "5.8.3"
}
}
diff --git a/examples/angular/injectKeyHold/package.json b/examples/angular/injectKeyHold/package.json
index edd300a..6c0b471 100644
--- a/examples/angular/injectKeyHold/package.json
+++ b/examples/angular/injectKeyHold/package.json
@@ -34,6 +34,6 @@
"karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
- "typescript": "5.9.3"
+ "typescript": "5.8.3"
}
}
diff --git a/examples/react/useHeldKeys/package.json b/examples/react/useHeldKeys/package.json
index 0c6359e..8d58fa8 100644
--- a/examples/react/useHeldKeys/package.json
+++ b/examples/react/useHeldKeys/package.json
@@ -21,7 +21,7 @@
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.1.4",
- "typescript": "5.9.3",
+ "typescript": "5.8.3",
"vite": "^7.3.1"
}
}
diff --git a/examples/react/useHotkey/package.json b/examples/react/useHotkey/package.json
index 601f95e..5997494 100644
--- a/examples/react/useHotkey/package.json
+++ b/examples/react/useHotkey/package.json
@@ -21,7 +21,7 @@
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.1.4",
- "typescript": "5.9.3",
+ "typescript": "5.8.3",
"vite": "^7.3.1"
}
}
diff --git a/examples/react/useHotkeyRecorder/package.json b/examples/react/useHotkeyRecorder/package.json
index 865cc88..165bf49 100644
--- a/examples/react/useHotkeyRecorder/package.json
+++ b/examples/react/useHotkeyRecorder/package.json
@@ -21,7 +21,7 @@
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.1.4",
- "typescript": "5.9.3",
+ "typescript": "5.8.3",
"vite": "^7.3.1"
}
}
diff --git a/examples/react/useHotkeySequence/package.json b/examples/react/useHotkeySequence/package.json
index 6a47fc7..2650895 100644
--- a/examples/react/useHotkeySequence/package.json
+++ b/examples/react/useHotkeySequence/package.json
@@ -21,7 +21,7 @@
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.1.4",
- "typescript": "5.9.3",
+ "typescript": "5.8.3",
"vite": "^7.3.1"
}
}
diff --git a/examples/react/useKeyhold/package.json b/examples/react/useKeyhold/package.json
index f6d2ae3..abee22c 100644
--- a/examples/react/useKeyhold/package.json
+++ b/examples/react/useKeyhold/package.json
@@ -21,7 +21,7 @@
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.1.4",
- "typescript": "5.9.3",
+ "typescript": "5.8.3",
"vite": "^7.3.1"
}
}
diff --git a/examples/solid/createHotkey/package.json b/examples/solid/createHotkey/package.json
index 8ec486f..7aec5d6 100644
--- a/examples/solid/createHotkey/package.json
+++ b/examples/solid/createHotkey/package.json
@@ -18,8 +18,8 @@
"solid-js": "^1.9.11"
},
"devDependencies": {
- "@types/node": "^25.3.0",
- "typescript": "5.9.3",
+ "@types/node": "^25.2.3",
+ "typescript": "5.8.3",
"vite": "^7.3.1",
"vite-plugin-solid": "^2.11.10"
}
diff --git a/package.json b/package.json
index 45e24ea..807d083 100644
--- a/package.json
+++ b/package.json
@@ -72,7 +72,7 @@
"size-limit": "^12.0.0",
"tinyglobby": "^0.2.15",
"tsdown": "^0.20.3",
- "typescript": "5.9.3",
+ "typescript": "5.8.3",
"vitest": "^4.0.18"
},
"overrides": {
diff --git a/packages/angular-hotkeys/package.json b/packages/angular-hotkeys/package.json
index 38bc328..146fc0c 100644
--- a/packages/angular-hotkeys/package.json
+++ b/packages/angular-hotkeys/package.json
@@ -62,6 +62,6 @@
"@angular/common": "^19.2.0",
"@angular/core": "^19.2.0",
"@angular/platform-browser-dynamic": "^19.2.0",
- "typescript": "5.9.3"
+ "typescript": "5.8.3"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 3a54eb8..80b1d0d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -22,10 +22,10 @@ importers:
version: 1.2.0(encoding@0.1.13)
'@tanstack/eslint-config':
specifier: 0.4.0
- version: 0.4.0(@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ version: 0.4.0(@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
'@tanstack/typedoc-config':
specifier: 0.3.3
- version: 0.3.3(typescript@5.9.3)
+ version: 0.3.3(typescript@5.8.3)
'@testing-library/jest-dom':
specifier: ^6.9.1
version: 6.9.1
@@ -37,13 +37,13 @@ importers:
version: 9.39.2(jiti@2.6.1)
eslint-plugin-unused-imports:
specifier: ^4.4.1
- version: 4.4.1(@typescript-eslint/eslint-plugin@8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))
+ version: 4.4.1(@typescript-eslint/eslint-plugin@8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1))
happy-dom:
specifier: ^20.7.0
version: 20.7.0
knip:
specifier: ^5.84.1
- version: 5.85.0(@types/node@25.3.0)(typescript@5.9.3)
+ version: 5.85.0(@types/node@25.3.0)(typescript@5.8.3)
markdown-link-extractor:
specifier: ^4.0.3
version: 4.0.3
@@ -73,10 +73,10 @@ importers:
version: 0.2.15
tsdown:
specifier: ^0.20.3
- version: 0.20.3(oxc-resolver@11.17.1)(publint@0.3.17)(typescript@5.9.3)
+ version: 0.20.3(oxc-resolver@11.17.1)(publint@0.3.17)(typescript@5.8.3)
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
vitest:
specifier: ^4.0.18
version: 4.0.18(@types/node@25.3.0)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
@@ -119,13 +119,13 @@ importers:
devDependencies:
'@angular-devkit/build-angular':
specifier: ^19.2.20
- version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
+ version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.8.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
'@angular/cli':
specifier: ^19.2.20
version: 19.2.20(@types/node@25.3.0)(chokidar@4.0.3)
'@angular/compiler-cli':
specifier: ^19.2.0
- version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
+ version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3)
'@types/jasmine':
specifier: ~5.1.0
version: 5.1.15
@@ -148,8 +148,8 @@ importers:
specifier: ~2.1.0
version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4)
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
examples/angular/injectHotkey:
dependencies:
@@ -189,13 +189,13 @@ importers:
devDependencies:
'@angular-devkit/build-angular':
specifier: ^19.2.20
- version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
+ version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.8.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
'@angular/cli':
specifier: ^19.2.20
version: 19.2.20(@types/node@25.3.0)(chokidar@4.0.3)
'@angular/compiler-cli':
specifier: ^19.2.0
- version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
+ version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3)
'@types/jasmine':
specifier: ~5.1.0
version: 5.1.15
@@ -218,8 +218,8 @@ importers:
specifier: ~2.1.0
version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4)
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
examples/angular/injectHotkeyRecorder:
dependencies:
@@ -259,13 +259,13 @@ importers:
devDependencies:
'@angular-devkit/build-angular':
specifier: ^19.2.20
- version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
+ version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.8.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
'@angular/cli':
specifier: ^19.2.20
version: 19.2.20(@types/node@25.3.0)(chokidar@4.0.3)
'@angular/compiler-cli':
specifier: ^19.2.0
- version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
+ version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3)
'@types/jasmine':
specifier: ~5.1.0
version: 5.1.15
@@ -288,8 +288,8 @@ importers:
specifier: ~2.1.0
version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4)
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
examples/angular/injectHotkeySequence:
dependencies:
@@ -329,13 +329,13 @@ importers:
devDependencies:
'@angular-devkit/build-angular':
specifier: ^19.2.20
- version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
+ version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.8.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
'@angular/cli':
specifier: ^19.2.20
version: 19.2.20(@types/node@25.3.0)(chokidar@4.0.3)
'@angular/compiler-cli':
specifier: ^19.2.0
- version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
+ version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3)
'@types/jasmine':
specifier: ~5.1.0
version: 5.1.15
@@ -358,8 +358,8 @@ importers:
specifier: ~2.1.0
version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4)
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
examples/angular/injectKeyHold:
dependencies:
@@ -399,13 +399,13 @@ importers:
devDependencies:
'@angular-devkit/build-angular':
specifier: ^19.2.20
- version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
+ version: 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.8.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)
'@angular/cli':
specifier: ^19.2.20
version: 19.2.20(@types/node@25.3.0)(chokidar@4.0.3)
'@angular/compiler-cli':
specifier: ^19.2.0
- version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
+ version: 19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3)
'@types/jasmine':
specifier: ~5.1.0
version: 5.1.15
@@ -428,8 +428,8 @@ importers:
specifier: ~2.1.0
version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4)
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
examples/preact/useHeldKeys:
dependencies:
@@ -584,8 +584,8 @@ importers:
specifier: ^5.1.4
version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
vite:
specifier: ^7.3.1
version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
@@ -618,8 +618,8 @@ importers:
specifier: ^5.1.4
version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
vite:
specifier: ^7.3.1
version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
@@ -652,8 +652,8 @@ importers:
specifier: ^5.1.4
version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
vite:
specifier: ^7.3.1
version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
@@ -686,8 +686,8 @@ importers:
specifier: ^5.1.4
version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
vite:
specifier: ^7.3.1
version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
@@ -720,8 +720,8 @@ importers:
specifier: ^5.1.4
version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
vite:
specifier: ^7.3.1
version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
@@ -770,17 +770,17 @@ importers:
version: 1.9.11
devDependencies:
'@types/node':
- specifier: ^25.3.0
- version: 25.3.0
+ specifier: ^25.2.3
+ version: 25.2.3
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
vite-plugin-solid:
specifier: ^2.11.10
- version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
+ version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
examples/solid/createHotkeyRecorder:
dependencies:
@@ -876,8 +876,8 @@ importers:
specifier: ^19.2.0
version: 19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.18)(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.18(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1)))
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
packages/hotkeys:
dependencies:
@@ -3883,6 +3883,9 @@ packages:
'@types/node@12.20.55':
resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+ '@types/node@25.2.3':
+ resolution: {integrity: sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==}
+
'@types/node@25.3.0':
resolution: {integrity: sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==}
@@ -7660,6 +7663,11 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
+ typescript@5.8.3:
+ resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
typescript@5.9.3:
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=14.17'}
@@ -7675,6 +7683,9 @@ packages:
unconfig-core@7.4.2:
resolution: {integrity: sha512-VgPCvLWugINbXvMQDf8Jh0mlbvNjNC6eSUziHsBCMpxR05OPrNrvDnyatdMjRgcHaaNsCqz+wjNXxNw1kRLHUg==}
+ undici-types@7.16.0:
+ resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
+
undici-types@7.18.2:
resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
@@ -8180,14 +8191,14 @@ snapshots:
transitivePeerDependencies:
- chokidar
- '@angular-devkit/build-angular@19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)':
+ '@angular-devkit/build-angular@19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(typescript@5.8.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)':
dependencies:
'@ampproject/remapping': 2.3.0
'@angular-devkit/architect': 0.1902.20(chokidar@4.0.3)
'@angular-devkit/build-webpack': 0.1902.20(chokidar@4.0.3)(webpack-dev-server@5.2.2(tslib@2.8.1)(webpack@5.105.0))(webpack@5.105.0(esbuild@0.25.4))
'@angular-devkit/core': 19.2.20(chokidar@4.0.3)
- '@angular/build': 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(typescript@5.9.3)(yaml@2.8.2)
- '@angular/compiler-cli': 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
+ '@angular/build': 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.2)
+ '@angular/compiler-cli': 19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3)
'@babel/core': 7.26.10
'@babel/generator': 7.26.10
'@babel/helper-annotate-as-pure': 7.25.9
@@ -8198,7 +8209,7 @@ snapshots:
'@babel/preset-env': 7.26.9(@babel/core@7.26.10)
'@babel/runtime': 7.26.10
'@discoveryjs/json-ext': 0.6.3
- '@ngtools/webpack': 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.105.0(esbuild@0.25.4))
+ '@ngtools/webpack': 19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3))(typescript@5.8.3)(webpack@5.105.0(esbuild@0.25.4))
'@vitejs/plugin-basic-ssl': 1.2.0(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
ansi-colors: 4.1.3
autoprefixer: 10.4.20(postcss@8.5.2)
@@ -8222,7 +8233,7 @@ snapshots:
picomatch: 4.0.2
piscina: 4.8.0
postcss: 8.5.2
- postcss-loader: 8.1.1(postcss@8.5.2)(typescript@5.9.3)(webpack@5.105.0(esbuild@0.25.4))
+ postcss-loader: 8.1.1(postcss@8.5.2)(typescript@5.8.3)(webpack@5.105.0(esbuild@0.25.4))
resolve-url-loader: 5.0.0
rxjs: 7.8.1
sass: 1.85.0
@@ -8233,7 +8244,7 @@ snapshots:
terser: 5.39.0
tree-kill: 1.2.2
tslib: 2.8.1
- typescript: 5.9.3
+ typescript: 5.8.3
webpack: 5.105.0(esbuild@0.25.4)
webpack-dev-middleware: 7.4.2(tslib@2.8.1)(webpack@5.105.0)
webpack-dev-server: 5.2.2(tslib@2.8.1)(webpack@5.105.0)
@@ -8295,12 +8306,12 @@ snapshots:
transitivePeerDependencies:
- chokidar
- '@angular/build@19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(typescript@5.9.3)(yaml@2.8.2)':
+ '@angular/build@19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3))(@angular/compiler@19.2.18)(@types/node@25.3.0)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.2)':
dependencies:
'@ampproject/remapping': 2.3.0
'@angular-devkit/architect': 0.1902.20(chokidar@4.0.3)
'@angular/compiler': 19.2.18
- '@angular/compiler-cli': 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
+ '@angular/compiler-cli': 19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3)
'@babel/core': 7.26.10
'@babel/helper-annotate-as-pure': 7.25.9
'@babel/helper-split-export-declaration': 7.24.7
@@ -8323,7 +8334,7 @@ snapshots:
sass: 1.85.0
semver: 7.7.1
source-map-support: 0.5.21
- typescript: 5.9.3
+ typescript: 5.8.3
vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
watchpack: 2.4.2
optionalDependencies:
@@ -8374,7 +8385,7 @@ snapshots:
rxjs: 7.8.2
tslib: 2.8.1
- '@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)':
+ '@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3)':
dependencies:
'@angular/compiler': 19.2.18
'@babel/core': 7.26.9
@@ -8384,7 +8395,7 @@ snapshots:
reflect-metadata: 0.2.2
semver: 7.7.4
tslib: 2.8.1
- typescript: 5.9.3
+ typescript: 5.8.3
yargs: 17.7.2
transitivePeerDependencies:
- supports-color
@@ -10193,10 +10204,10 @@ snapshots:
'@tybys/wasm-util': 0.10.1
optional: true
- '@ngtools/webpack@19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.105.0(esbuild@0.25.4))':
+ '@ngtools/webpack@19.2.20(@angular/compiler-cli@19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3))(typescript@5.8.3)(webpack@5.105.0(esbuild@0.25.4))':
dependencies:
- '@angular/compiler-cli': 19.2.18(@angular/compiler@19.2.18)(typescript@5.9.3)
- typescript: 5.9.3
+ '@angular/compiler-cli': 19.2.18(@angular/compiler@19.2.18)(typescript@5.8.3)
+ typescript: 5.8.3
webpack: 5.105.0(esbuild@0.25.4)
'@nodelib/fs.scandir@2.1.5':
@@ -10881,15 +10892,15 @@ snapshots:
- csstype
- utf-8-validate
- '@tanstack/eslint-config@0.4.0(@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
+ '@tanstack/eslint-config@0.4.0(@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)':
dependencies:
'@eslint/js': 10.0.1(eslint@9.39.2(jiti@2.6.1))
'@stylistic/eslint-plugin': 5.8.0(eslint@9.39.2(jiti@2.6.1))
eslint: 9.39.2(jiti@2.6.1)
- eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))
- eslint-plugin-n: 17.24.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1))
+ eslint-plugin-n: 17.24.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
globals: 17.3.0
- typescript-eslint: 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ typescript-eslint: 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
vue-eslint-parser: 10.4.0(eslint@9.39.2(jiti@2.6.1))
transitivePeerDependencies:
- '@typescript-eslint/utils'
@@ -10950,11 +10961,11 @@ snapshots:
'@tanstack/store@0.9.1': {}
- '@tanstack/typedoc-config@0.3.3(typescript@5.9.3)':
+ '@tanstack/typedoc-config@0.3.3(typescript@5.8.3)':
dependencies:
- typedoc: 0.28.14(typescript@5.9.3)
- typedoc-plugin-frontmatter: 1.3.0(typedoc-plugin-markdown@4.9.0(typedoc@0.28.14(typescript@5.9.3)))
- typedoc-plugin-markdown: 4.9.0(typedoc@0.28.14(typescript@5.9.3))
+ typedoc: 0.28.14(typescript@5.8.3)
+ typedoc-plugin-frontmatter: 1.3.0(typedoc-plugin-markdown@4.9.0(typedoc@0.28.14(typescript@5.8.3)))
+ typedoc-plugin-markdown: 4.9.0(typedoc@0.28.14(typescript@5.8.3))
transitivePeerDependencies:
- typescript
@@ -11124,6 +11135,10 @@ snapshots:
'@types/node@12.20.55': {}
+ '@types/node@25.2.3':
+ dependencies:
+ undici-types: 7.16.0
+
'@types/node@25.3.0':
dependencies:
undici-types: 7.18.2
@@ -11173,31 +11188,40 @@ snapshots:
dependencies:
'@types/node': 25.3.0
- '@typescript-eslint/eslint-plugin@8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.55.0
- '@typescript-eslint/type-utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/type-utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.55.0
eslint: 9.39.2(jiti@2.6.1)
ignore: 7.0.5
natural-compare: 1.4.0
- ts-api-utils: 2.4.0(typescript@5.9.3)
- typescript: 5.9.3
+ ts-api-utils: 2.4.0(typescript@5.8.3)
+ typescript: 5.8.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)':
dependencies:
'@typescript-eslint/scope-manager': 8.55.0
'@typescript-eslint/types': 8.55.0
- '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3)
+ '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.55.0
debug: 4.4.3
eslint: 9.39.2(jiti@2.6.1)
- typescript: 5.9.3
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/project-service@8.55.0(typescript@5.8.3)':
+ dependencies:
+ '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.8.3)
+ '@typescript-eslint/types': 8.55.0
+ debug: 4.4.3
+ typescript: 5.8.3
transitivePeerDependencies:
- supports-color
@@ -11215,10 +11239,26 @@ snapshots:
'@typescript-eslint/types': 8.55.0
'@typescript-eslint/visitor-keys': 8.55.0
+ '@typescript-eslint/tsconfig-utils@8.55.0(typescript@5.8.3)':
+ dependencies:
+ typescript: 5.8.3
+
'@typescript-eslint/tsconfig-utils@8.55.0(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
+ '@typescript-eslint/type-utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)':
+ dependencies:
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
+ debug: 4.4.3
+ eslint: 9.39.2(jiti@2.6.1)
+ ts-api-utils: 2.4.0(typescript@5.8.3)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/type-utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@typescript-eslint/types': 8.55.0
@@ -11233,6 +11273,21 @@ snapshots:
'@typescript-eslint/types@8.55.0': {}
+ '@typescript-eslint/typescript-estree@8.55.0(typescript@5.8.3)':
+ dependencies:
+ '@typescript-eslint/project-service': 8.55.0(typescript@5.8.3)
+ '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.8.3)
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/visitor-keys': 8.55.0
+ debug: 4.4.3
+ minimatch: 9.0.5
+ semver: 7.7.4
+ tinyglobby: 0.2.15
+ ts-api-utils: 2.4.0(typescript@5.8.3)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/typescript-estree@8.55.0(typescript@5.9.3)':
dependencies:
'@typescript-eslint/project-service': 8.55.0(typescript@5.9.3)
@@ -11248,6 +11303,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
+ '@typescript-eslint/scope-manager': 8.55.0
+ '@typescript-eslint/types': 8.55.0
+ '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.8.3)
+ eslint: 9.39.2(jiti@2.6.1)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
@@ -11998,14 +12064,14 @@ snapshots:
object-assign: 4.1.1
vary: 1.1.2
- cosmiconfig@9.0.0(typescript@5.9.3):
+ cosmiconfig@9.0.0(typescript@5.8.3):
dependencies:
env-paths: 2.2.1
import-fresh: 3.3.1
js-yaml: 4.1.1
parse-json: 5.2.0
optionalDependencies:
- typescript: 5.9.3
+ typescript: 5.8.3
cross-spawn@7.0.6:
dependencies:
@@ -12399,7 +12465,7 @@ snapshots:
eslint: 9.39.2(jiti@2.6.1)
eslint-compat-utils: 0.5.1(eslint@9.39.2(jiti@2.6.1))
- eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)):
+ eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1)):
dependencies:
'@typescript-eslint/types': 8.55.0
comment-parser: 1.4.5
@@ -12412,11 +12478,11 @@ snapshots:
stable-hash-x: 0.2.0
unrs-resolver: 1.11.1
optionalDependencies:
- '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
transitivePeerDependencies:
- supports-color
- eslint-plugin-n@17.24.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3):
+ eslint-plugin-n@17.24.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3):
dependencies:
'@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
enhanced-resolve: 5.19.0
@@ -12427,7 +12493,7 @@ snapshots:
globrex: 0.1.2
ignore: 5.3.2
semver: 7.7.4
- ts-declaration-location: 1.0.7(typescript@5.9.3)
+ ts-declaration-location: 1.0.7(typescript@5.8.3)
transitivePeerDependencies:
- typescript
@@ -12557,11 +12623,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)):
+ eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1)):
dependencies:
eslint: 9.39.2(jiti@2.6.1)
optionalDependencies:
- '@typescript-eslint/eslint-plugin': 8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/eslint-plugin': 8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
eslint-scope@5.1.1:
dependencies:
@@ -13507,7 +13573,7 @@ snapshots:
kind-of@6.0.3: {}
- knip@5.85.0(@types/node@25.3.0)(typescript@5.9.3):
+ knip@5.85.0(@types/node@25.3.0)(typescript@5.8.3):
dependencies:
'@nodelib/fs.walk': 1.2.8
'@types/node': 25.3.0
@@ -13521,7 +13587,7 @@ snapshots:
picomatch: 4.0.3
smol-toml: 1.6.0
strip-json-comments: 5.0.3
- typescript: 5.9.3
+ typescript: 5.8.3
zod: 4.3.6
kolorist@1.8.0: {}
@@ -14327,9 +14393,9 @@ snapshots:
possible-typed-array-names@1.1.0: {}
- postcss-loader@8.1.1(postcss@8.5.2)(typescript@5.9.3)(webpack@5.105.0(esbuild@0.25.4)):
+ postcss-loader@8.1.1(postcss@8.5.2)(typescript@5.8.3)(webpack@5.105.0(esbuild@0.25.4)):
dependencies:
- cosmiconfig: 9.0.0(typescript@5.9.3)
+ cosmiconfig: 9.0.0(typescript@5.8.3)
jiti: 1.21.7
postcss: 8.5.2
semver: 7.7.4
@@ -14603,7 +14669,7 @@ snapshots:
dependencies:
glob: 7.2.3
- rolldown-plugin-dts@0.22.1(oxc-resolver@11.17.1)(rolldown@1.0.0-rc.3)(typescript@5.9.3):
+ rolldown-plugin-dts@0.22.1(oxc-resolver@11.17.1)(rolldown@1.0.0-rc.3)(typescript@5.8.3):
dependencies:
'@babel/generator': 8.0.0-rc.1
'@babel/helper-validator-identifier': 8.0.0-rc.1
@@ -14616,7 +14682,7 @@ snapshots:
obug: 2.1.1
rolldown: 1.0.0-rc.3
optionalDependencies:
- typescript: 5.9.3
+ typescript: 5.8.3
transitivePeerDependencies:
- oxc-resolver
@@ -15267,10 +15333,19 @@ snapshots:
tree-kill@1.2.2: {}
+ ts-api-utils@2.4.0(typescript@5.8.3):
+ dependencies:
+ typescript: 5.8.3
+
ts-api-utils@2.4.0(typescript@5.9.3):
dependencies:
typescript: 5.9.3
+ ts-declaration-location@1.0.7(typescript@5.8.3):
+ dependencies:
+ picomatch: 4.0.3
+ typescript: 5.8.3
+
ts-declaration-location@1.0.7(typescript@5.9.3):
dependencies:
picomatch: 4.0.3
@@ -15284,7 +15359,7 @@ snapshots:
minimist: 1.2.8
strip-bom: 3.0.0
- tsdown@0.20.3(oxc-resolver@11.17.1)(publint@0.3.17)(typescript@5.9.3):
+ tsdown@0.20.3(oxc-resolver@11.17.1)(publint@0.3.17)(typescript@5.8.3):
dependencies:
ansis: 4.2.0
cac: 6.7.14
@@ -15295,7 +15370,7 @@ snapshots:
obug: 2.1.1
picomatch: 4.0.3
rolldown: 1.0.0-rc.3
- rolldown-plugin-dts: 0.22.1(oxc-resolver@11.17.1)(rolldown@1.0.0-rc.3)(typescript@5.9.3)
+ rolldown-plugin-dts: 0.22.1(oxc-resolver@11.17.1)(rolldown@1.0.0-rc.3)(typescript@5.8.3)
semver: 7.7.4
tinyexec: 1.0.2
tinyglobby: 0.2.15
@@ -15304,7 +15379,7 @@ snapshots:
unrun: 0.2.27
optionalDependencies:
publint: 0.3.17
- typescript: 5.9.3
+ typescript: 5.8.3
transitivePeerDependencies:
- '@ts-macro/tsc'
- '@typescript/native-preview'
@@ -15333,35 +15408,37 @@ snapshots:
typed-assert@1.0.9: {}
- typedoc-plugin-frontmatter@1.3.0(typedoc-plugin-markdown@4.9.0(typedoc@0.28.14(typescript@5.9.3))):
+ typedoc-plugin-frontmatter@1.3.0(typedoc-plugin-markdown@4.9.0(typedoc@0.28.14(typescript@5.8.3))):
dependencies:
- typedoc-plugin-markdown: 4.9.0(typedoc@0.28.14(typescript@5.9.3))
+ typedoc-plugin-markdown: 4.9.0(typedoc@0.28.14(typescript@5.8.3))
yaml: 2.8.2
- typedoc-plugin-markdown@4.9.0(typedoc@0.28.14(typescript@5.9.3)):
+ typedoc-plugin-markdown@4.9.0(typedoc@0.28.14(typescript@5.8.3)):
dependencies:
- typedoc: 0.28.14(typescript@5.9.3)
+ typedoc: 0.28.14(typescript@5.8.3)
- typedoc@0.28.14(typescript@5.9.3):
+ typedoc@0.28.14(typescript@5.8.3):
dependencies:
'@gerrit0/mini-shiki': 3.22.0
lunr: 2.3.9
markdown-it: 14.1.1
minimatch: 9.0.5
- typescript: 5.9.3
+ typescript: 5.8.3
yaml: 2.8.2
- typescript-eslint@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3):
+ typescript-eslint@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/eslint-plugin': 8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
+ '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
+ '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
eslint: 9.39.2(jiti@2.6.1)
- typescript: 5.9.3
+ typescript: 5.8.3
transitivePeerDependencies:
- supports-color
+ typescript@5.8.3: {}
+
typescript@5.9.3: {}
ua-parser-js@0.7.41: {}
@@ -15373,6 +15450,8 @@ snapshots:
'@quansync/fs': 1.0.0
quansync: 1.0.0
+ undici-types@7.16.0: {}
+
undici-types@7.18.2: {}
undici@7.21.0: {}
@@ -15459,6 +15538,21 @@ snapshots:
vary@1.1.2: {}
+ vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)):
+ dependencies:
+ '@babel/core': 7.29.0
+ '@types/babel__core': 7.20.5
+ babel-preset-solid: 1.9.10(@babel/core@7.29.0)(solid-js@1.9.11)
+ merge-anything: 5.1.7
+ solid-js: 1.9.11
+ solid-refresh: 0.6.3(solid-js@1.9.11)
+ vite: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
+ vitefu: 1.1.1(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
+ optionalDependencies:
+ '@testing-library/jest-dom': 6.9.1
+ transitivePeerDependencies:
+ - supports-color
+
vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)):
dependencies:
'@babel/core': 7.29.0
@@ -15501,6 +15595,23 @@ snapshots:
terser: 5.39.0
yaml: 2.8.2
+ vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2):
+ dependencies:
+ esbuild: 0.27.3
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.57.1
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 25.2.3
+ fsevents: 2.3.3
+ jiti: 2.6.1
+ less: 4.2.2
+ sass: 1.85.0
+ terser: 5.39.0
+ yaml: 2.8.2
+
vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2):
dependencies:
esbuild: 0.27.3
@@ -15518,6 +15629,10 @@ snapshots:
terser: 5.39.0
yaml: 2.8.2
+ vitefu@1.1.1(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)):
+ optionalDependencies:
+ vite: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
+
vitefu@1.1.1(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)):
optionalDependencies:
vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
From 15e075cdd83811e9bb2b459b2bdcd712b489f929 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?=
Date: Sat, 21 Feb 2026 18:12:04 -0300
Subject: [PATCH 06/11] fix: github comments
- unregister factory in injector token
- cleanup at the end instead of injectHotkeys
- readonly hotkey recorder
---
.../functions/injectDefaultHotkeysOptions.md | 2 +-
.../reference/functions/injectHotkey.md | 2 +-
.../functions/injectHotkeySequence.md | 2 +-
.../functions/injectHotkeysContext.md | 6 ++---
.../reference/functions/provideHotkeys.md | 20 ++++------------
.../interfaces/AngularHotkeyRecorder.md | 10 ++++----
.../interfaces/HotkeysContextValue.md | 4 ++--
.../interfaces/HotkeysProviderOptions.md | 8 +++----
.../interfaces/InjectHotkeyOptions.md | 4 ++--
.../interfaces/InjectHotkeySequenceOptions.md | 4 ++--
.../variables/HOTKEYS_INJECTION_TOKEN.md | 2 +-
packages/angular-hotkeys/README.md | 24 ++++---------------
.../angular-hotkeys/src/hotkeys-provider.ts | 22 ++++++++++-------
packages/angular-hotkeys/src/injectHotkey.ts | 16 +++----------
.../src/injectHotkeyRecorder.ts | 10 ++++----
packages/angular-hotkeys/src/injectKeyHold.ts | 2 +-
16 files changed, 53 insertions(+), 85 deletions(-)
diff --git a/docs/framework/angular/reference/functions/injectDefaultHotkeysOptions.md b/docs/framework/angular/reference/functions/injectDefaultHotkeysOptions.md
index 7bc05a2..0bcc03d 100644
--- a/docs/framework/angular/reference/functions/injectDefaultHotkeysOptions.md
+++ b/docs/framework/angular/reference/functions/injectDefaultHotkeysOptions.md
@@ -9,7 +9,7 @@ title: injectDefaultHotkeysOptions
function injectDefaultHotkeysOptions(): HotkeysProviderOptions;
```
-Defined in: [hotkeys-provider.ts:34](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L34)
+Defined in: [hotkeys-provider.ts:38](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L38)
## Returns
diff --git a/docs/framework/angular/reference/functions/injectHotkey.md b/docs/framework/angular/reference/functions/injectHotkey.md
index 4cfa687..b6f9ad8 100644
--- a/docs/framework/angular/reference/functions/injectHotkey.md
+++ b/docs/framework/angular/reference/functions/injectHotkey.md
@@ -12,7 +12,7 @@ function injectHotkey(
options): void;
```
-Defined in: [injectHotkey.ts:84](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkey.ts#L84)
+Defined in: [injectHotkey.ts:83](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkey.ts#L83)
Angular inject-based API for registering a keyboard hotkey.
diff --git a/docs/framework/angular/reference/functions/injectHotkeySequence.md b/docs/framework/angular/reference/functions/injectHotkeySequence.md
index 4423cb0..ec7d77b 100644
--- a/docs/framework/angular/reference/functions/injectHotkeySequence.md
+++ b/docs/framework/angular/reference/functions/injectHotkeySequence.md
@@ -12,7 +12,7 @@ function injectHotkeySequence(
options): void;
```
-Defined in: [injectHotkeySequence.ts:44](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeySequence.ts#L44)
+Defined in: [injectHotkeySequence.ts:42](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeySequence.ts#L42)
Angular inject-based API for registering a keyboard shortcut sequence (Vim-style).
diff --git a/docs/framework/angular/reference/functions/injectHotkeysContext.md b/docs/framework/angular/reference/functions/injectHotkeysContext.md
index 0bb444e..6742f25 100644
--- a/docs/framework/angular/reference/functions/injectHotkeysContext.md
+++ b/docs/framework/angular/reference/functions/injectHotkeysContext.md
@@ -6,11 +6,11 @@ title: injectHotkeysContext
# Function: injectHotkeysContext()
```ts
-function injectHotkeysContext(): HotkeysContextValue | null;
+function injectHotkeysContext(): HotkeysContextValue;
```
-Defined in: [hotkeys-provider.ts:30](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L30)
+Defined in: [hotkeys-provider.ts:34](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L34)
## Returns
-[`HotkeysContextValue`](../interfaces/HotkeysContextValue.md) \| `null`
+[`HotkeysContextValue`](../interfaces/HotkeysContextValue.md)
diff --git a/docs/framework/angular/reference/functions/provideHotkeys.md b/docs/framework/angular/reference/functions/provideHotkeys.md
index f07f3ad..565e396 100644
--- a/docs/framework/angular/reference/functions/provideHotkeys.md
+++ b/docs/framework/angular/reference/functions/provideHotkeys.md
@@ -6,29 +6,17 @@ title: provideHotkeys
# Function: provideHotkeys()
```ts
-function provideHotkeys(defaultOptions?): object;
+function provideHotkeys(defaultOptions): StaticProvider;
```
-Defined in: [hotkeys-provider.ts:20](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L20)
+Defined in: [hotkeys-provider.ts:25](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L25)
## Parameters
-### defaultOptions?
+### defaultOptions
[`HotkeysProviderOptions`](../interfaces/HotkeysProviderOptions.md)
## Returns
-`object`
-
-### provide
-
-```ts
-provide: InjectionToken;
-```
-
-### useValue
-
-```ts
-useValue: HotkeysContextValue;
-```
+`StaticProvider`
diff --git a/docs/framework/angular/reference/interfaces/AngularHotkeyRecorder.md b/docs/framework/angular/reference/interfaces/AngularHotkeyRecorder.md
index 0aaca78..9e3a0d8 100644
--- a/docs/framework/angular/reference/interfaces/AngularHotkeyRecorder.md
+++ b/docs/framework/angular/reference/interfaces/AngularHotkeyRecorder.md
@@ -12,7 +12,7 @@ Defined in: [injectHotkeyRecorder.ts:7](https://github.com/TanStack/hotkeys/blob
### cancelRecording()
```ts
-cancelRecording: () => void;
+readonly cancelRecording: () => void;
```
Defined in: [injectHotkeyRecorder.ts:17](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L17)
@@ -28,7 +28,7 @@ Cancel recording without saving
### isRecording()
```ts
-isRecording: () => boolean;
+readonly isRecording: () => boolean;
```
Defined in: [injectHotkeyRecorder.ts:9](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L9)
@@ -44,7 +44,7 @@ Whether recording is currently active
### recordedHotkey()
```ts
-recordedHotkey: () => Hotkey | null;
+readonly recordedHotkey: () => Hotkey | null;
```
Defined in: [injectHotkeyRecorder.ts:11](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L11)
@@ -60,7 +60,7 @@ The currently recorded hotkey (for live preview)
### startRecording()
```ts
-startRecording: () => void;
+readonly startRecording: () => void;
```
Defined in: [injectHotkeyRecorder.ts:13](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L13)
@@ -76,7 +76,7 @@ Start recording a new hotkey
### stopRecording()
```ts
-stopRecording: () => void;
+readonly stopRecording: () => void;
```
Defined in: [injectHotkeyRecorder.ts:15](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L15)
diff --git a/docs/framework/angular/reference/interfaces/HotkeysContextValue.md b/docs/framework/angular/reference/interfaces/HotkeysContextValue.md
index c46a7b9..018feed 100644
--- a/docs/framework/angular/reference/interfaces/HotkeysContextValue.md
+++ b/docs/framework/angular/reference/interfaces/HotkeysContextValue.md
@@ -5,7 +5,7 @@ title: HotkeysContextValue
# Interface: HotkeysContextValue
-Defined in: [hotkeys-provider.ts:12](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L12)
+Defined in: [hotkeys-provider.ts:13](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L13)
## Properties
@@ -15,4 +15,4 @@ Defined in: [hotkeys-provider.ts:12](https://github.com/TanStack/hotkeys/blob/ma
defaultOptions: HotkeysProviderOptions;
```
-Defined in: [hotkeys-provider.ts:13](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L13)
+Defined in: [hotkeys-provider.ts:14](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L14)
diff --git a/docs/framework/angular/reference/interfaces/HotkeysProviderOptions.md b/docs/framework/angular/reference/interfaces/HotkeysProviderOptions.md
index bcccc27..2ca7c2f 100644
--- a/docs/framework/angular/reference/interfaces/HotkeysProviderOptions.md
+++ b/docs/framework/angular/reference/interfaces/HotkeysProviderOptions.md
@@ -5,7 +5,7 @@ title: HotkeysProviderOptions
# Interface: HotkeysProviderOptions
-Defined in: [hotkeys-provider.ts:6](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L6)
+Defined in: [hotkeys-provider.ts:7](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L7)
## Properties
@@ -15,7 +15,7 @@ Defined in: [hotkeys-provider.ts:6](https://github.com/TanStack/hotkeys/blob/mai
optional hotkey: Partial;
```
-Defined in: [hotkeys-provider.ts:7](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L7)
+Defined in: [hotkeys-provider.ts:8](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L8)
***
@@ -25,7 +25,7 @@ Defined in: [hotkeys-provider.ts:7](https://github.com/TanStack/hotkeys/blob/mai
optional hotkeyRecorder: Partial;
```
-Defined in: [hotkeys-provider.ts:8](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L8)
+Defined in: [hotkeys-provider.ts:9](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L9)
***
@@ -35,4 +35,4 @@ Defined in: [hotkeys-provider.ts:8](https://github.com/TanStack/hotkeys/blob/mai
optional hotkeySequence: Partial;
```
-Defined in: [hotkeys-provider.ts:9](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L9)
+Defined in: [hotkeys-provider.ts:10](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L10)
diff --git a/docs/framework/angular/reference/interfaces/InjectHotkeyOptions.md b/docs/framework/angular/reference/interfaces/InjectHotkeyOptions.md
index a840c0b..548a7d4 100644
--- a/docs/framework/angular/reference/interfaces/InjectHotkeyOptions.md
+++ b/docs/framework/angular/reference/interfaces/InjectHotkeyOptions.md
@@ -5,7 +5,7 @@ title: InjectHotkeyOptions
# Interface: InjectHotkeyOptions
-Defined in: [injectHotkey.ts:17](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkey.ts#L17)
+Defined in: [injectHotkey.ts:16](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkey.ts#L16)
## Extends
@@ -19,7 +19,7 @@ Defined in: [injectHotkey.ts:17](https://github.com/TanStack/hotkeys/blob/main/p
optional target: HTMLElement | Document | Window | null;
```
-Defined in: [injectHotkey.ts:25](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkey.ts#L25)
+Defined in: [injectHotkey.ts:24](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkey.ts#L24)
The DOM element to attach the event listener to.
Can be a direct DOM element, an accessor (for reactive targets that become
diff --git a/docs/framework/angular/reference/interfaces/InjectHotkeySequenceOptions.md b/docs/framework/angular/reference/interfaces/InjectHotkeySequenceOptions.md
index 44ce349..61922e7 100644
--- a/docs/framework/angular/reference/interfaces/InjectHotkeySequenceOptions.md
+++ b/docs/framework/angular/reference/interfaces/InjectHotkeySequenceOptions.md
@@ -5,7 +5,7 @@ title: InjectHotkeySequenceOptions
# Interface: InjectHotkeySequenceOptions
-Defined in: [injectHotkeySequence.ts:11](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeySequence.ts#L11)
+Defined in: [injectHotkeySequence.ts:10](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeySequence.ts#L10)
## Extends
@@ -19,6 +19,6 @@ Defined in: [injectHotkeySequence.ts:11](https://github.com/TanStack/hotkeys/blo
optional enabled: boolean;
```
-Defined in: [injectHotkeySequence.ts:16](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeySequence.ts#L16)
+Defined in: [injectHotkeySequence.ts:15](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeySequence.ts#L15)
Whether the sequence is enabled. Defaults to true.
diff --git a/docs/framework/angular/reference/variables/HOTKEYS_INJECTION_TOKEN.md b/docs/framework/angular/reference/variables/HOTKEYS_INJECTION_TOKEN.md
index ff66185..b3d2db7 100644
--- a/docs/framework/angular/reference/variables/HOTKEYS_INJECTION_TOKEN.md
+++ b/docs/framework/angular/reference/variables/HOTKEYS_INJECTION_TOKEN.md
@@ -9,4 +9,4 @@ title: HOTKEYS_INJECTION_TOKEN
const HOTKEYS_INJECTION_TOKEN: InjectionToken;
```
-Defined in: [hotkeys-provider.ts:16](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L16)
+Defined in: [hotkeys-provider.ts:17](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L17)
diff --git a/packages/angular-hotkeys/README.md b/packages/angular-hotkeys/README.md
index 4e4f84c..6094f45 100644
--- a/packages/angular-hotkeys/README.md
+++ b/packages/angular-hotkeys/README.md
@@ -26,23 +26,6 @@ pnpm add @tanstack/angular-hotkeys @tanstack/hotkeys
## Quick Start
-**1. Provide the hotkeys context in your app config:**
-
-```ts
-// app.config.ts
-import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'
-import { provideHotkeys } from '@tanstack/angular-hotkeys'
-
-export const appConfig: ApplicationConfig = {
- providers: [
- provideZoneChangeDetection({ eventCoalescing: true }),
- provideHotkeys(),
- ],
-}
-```
-
-**2. Register a hotkey in a component (injection context):**
-
```ts
import { Component } from '@angular/core'
import { injectHotkey } from '@tanstack/angular-hotkeys'
@@ -245,8 +228,11 @@ export class ShortcutSettingsComponent {
### Global Configuration
+To customize default options, use `provideHotkeys()`:
+
```ts
// app.config.ts
+import { ApplicationConfig } from '@angular/core'
import { provideHotkeys } from '@tanstack/angular-hotkeys'
export const appConfig: ApplicationConfig = {
@@ -321,9 +307,9 @@ Hotkey recording interface.
**Returns:** `isRecording`, `recordedHotkey`, `startRecording`, `stopRecording`, `cancelRecording`
-### `provideHotkeys(defaultOptions?)`
+### `provideHotkeys(defaultOptions)`
-Provider for global hotkey defaults. Use in `ApplicationConfig` providers.
+Optional provider for global hotkey defaults. Only needed when you want to customize defaults; otherwise a default context is provided automatically. Use in `ApplicationConfig` or component `providers` when customizing.
### `injectHotkeysContext()` / `injectDefaultHotkeysOptions()`
diff --git a/packages/angular-hotkeys/src/hotkeys-provider.ts b/packages/angular-hotkeys/src/hotkeys-provider.ts
index fc119a7..e2fd833 100644
--- a/packages/angular-hotkeys/src/hotkeys-provider.ts
+++ b/packages/angular-hotkeys/src/hotkeys-provider.ts
@@ -2,6 +2,7 @@ import { InjectionToken, inject } from '@angular/core'
import type { HotkeyRecorderOptions } from '@tanstack/hotkeys'
import type { InjectHotkeyOptions } from './injectHotkey'
import type { InjectHotkeySequenceOptions } from './injectHotkeySequence'
+import type { StaticProvider } from '@angular/core'
export interface HotkeysProviderOptions {
hotkey?: Partial
@@ -10,27 +11,30 @@ export interface HotkeysProviderOptions {
}
export interface HotkeysContextValue {
- defaultOptions: HotkeysProviderOptions
+ readonly defaultOptions: HotkeysProviderOptions
}
export const HOTKEYS_INJECTION_TOKEN = new InjectionToken(
'HOTKEYS_INJECTION_TOKEN',
+ {
+ providedIn: 'root',
+ factory: () => ({ defaultOptions: {} }),
+ },
)
-export function provideHotkeys(defaultOptions?: HotkeysProviderOptions): {
- provide: typeof HOTKEYS_INJECTION_TOKEN
- useValue: HotkeysContextValue
-} {
+export function provideHotkeys(
+ defaultOptions: HotkeysProviderOptions,
+): StaticProvider {
return {
provide: HOTKEYS_INJECTION_TOKEN,
- useValue: { defaultOptions: defaultOptions ?? {} },
+ useValue: { defaultOptions },
}
}
-export function injectHotkeysContext(): HotkeysContextValue | null {
- return inject(HOTKEYS_INJECTION_TOKEN, { optional: true }) ?? null
+export function injectHotkeysContext(): HotkeysContextValue {
+ return inject(HOTKEYS_INJECTION_TOKEN)
}
export function injectDefaultHotkeysOptions(): HotkeysProviderOptions {
- return injectHotkeysContext()?.defaultOptions ?? {}
+ return injectHotkeysContext().defaultOptions
}
diff --git a/packages/angular-hotkeys/src/injectHotkey.ts b/packages/angular-hotkeys/src/injectHotkey.ts
index 83f70aa..28654b7 100644
--- a/packages/angular-hotkeys/src/injectHotkey.ts
+++ b/packages/angular-hotkeys/src/injectHotkey.ts
@@ -10,7 +10,6 @@ import type {
Hotkey,
HotkeyCallback,
HotkeyOptions,
- HotkeyRegistrationHandle,
RegisterableHotkey,
} from '@tanstack/hotkeys'
@@ -89,10 +88,8 @@ export function injectHotkey(
const defaultOptions = injectDefaultHotkeysOptions()
const manager = getHotkeyManager()
- let registration: HotkeyRegistrationHandle | null = null
-
effect((onCleanup) => {
- // Resolve reactive values const resolvedHotkey =
+ // Resolve reactive values
const resolvedHotkey = typeof hotkey === 'function' ? hotkey() : hotkey
const resolvedOptions = typeof options === 'function' ? options() : options
@@ -123,17 +120,11 @@ export function injectHotkey(
return
}
- // Unregister previous registration if it exists
- if (registration?.isActive) {
- registration.unregister()
- registration = null
- }
-
// Extract options without target (target is handled separately)
const { target: _target, ...optionsWithoutTarget } = mergedOptions
// Register the hotkey
- registration = manager.register(hotkeyString, callback, {
+ const registration = manager.register(hotkeyString, callback, {
...optionsWithoutTarget,
target: resolvedTarget,
})
@@ -146,9 +137,8 @@ export function injectHotkey(
// Cleanup on disposal
onCleanup(() => {
- if (registration?.isActive) {
+ if (registration.isActive) {
registration.unregister()
- registration = null
}
})
})
diff --git a/packages/angular-hotkeys/src/injectHotkeyRecorder.ts b/packages/angular-hotkeys/src/injectHotkeyRecorder.ts
index 6ab13df..781e5ac 100644
--- a/packages/angular-hotkeys/src/injectHotkeyRecorder.ts
+++ b/packages/angular-hotkeys/src/injectHotkeyRecorder.ts
@@ -6,15 +6,15 @@ import type { Hotkey, HotkeyRecorderOptions } from '@tanstack/hotkeys'
export interface AngularHotkeyRecorder {
/** Whether recording is currently active */
- isRecording: () => boolean
+ readonly isRecording: () => boolean
/** The currently recorded hotkey (for live preview) */
- recordedHotkey: () => Hotkey | null
+ readonly recordedHotkey: () => Hotkey | null
/** Start recording a new hotkey */
- startRecording: () => void
+ readonly startRecording: () => void
/** Stop recording (same as cancel) */
- stopRecording: () => void
+ readonly stopRecording: () => void
/** Cancel recording without saving */
- cancelRecording: () => void
+ readonly cancelRecording: () => void
}
/**
diff --git a/packages/angular-hotkeys/src/injectKeyHold.ts b/packages/angular-hotkeys/src/injectKeyHold.ts
index 1ef12d4..96437d7 100644
--- a/packages/angular-hotkeys/src/injectKeyHold.ts
+++ b/packages/angular-hotkeys/src/injectKeyHold.ts
@@ -43,8 +43,8 @@ export function injectKeyHold(key: HeldKey | (() => HeldKey)): Signal {
return computed(() => {
const resolvedKey = typeof key === 'function' ? key() : key
-
const normalizedKey = resolvedKey.toLowerCase()
+
return heldKeysSelector().some(
(heldKey) => heldKey.toLowerCase() === normalizedKey,
)
From e5da9ca1a69db2c7ef92f7a04cf91df5ee6ff376 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?=
Date: Mon, 23 Feb 2026 20:32:59 -0300
Subject: [PATCH 07/11] chore: update angular store adapter
---
packages/angular-hotkeys/package.json | 2 +-
pnpm-lock.yaml | 17 ++++++-----------
2 files changed, 7 insertions(+), 12 deletions(-)
diff --git a/packages/angular-hotkeys/package.json b/packages/angular-hotkeys/package.json
index 146fc0c..ea3321a 100644
--- a/packages/angular-hotkeys/package.json
+++ b/packages/angular-hotkeys/package.json
@@ -51,7 +51,7 @@
"src"
],
"dependencies": {
- "@tanstack/angular-store": "^0.8.0",
+ "@tanstack/angular-store": "^0.9.1",
"@tanstack/hotkeys": "workspace:*"
},
"peerDependencies": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 80b1d0d..c45bbdb 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -860,8 +860,8 @@ importers:
packages/angular-hotkeys:
dependencies:
'@tanstack/angular-store':
- specifier: ^0.8.0
- version: 0.8.1(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))
+ specifier: ^0.9.1
+ version: 0.9.1(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))
'@tanstack/hotkeys':
specifier: workspace:*
version: link:../hotkeys
@@ -3641,8 +3641,8 @@ packages:
resolution: {integrity: sha512-08eKiDAjj4zLug1taXSIJ0kGL5cawjVCyJkBb6EWSg5fEPX6L+Wtr0CH2If4j5KYylz85iaZiFlUItvgJvll5g==}
engines: {node: ^14.13.1 || ^16.0.0 || >=18}
- '@tanstack/angular-store@0.8.1':
- resolution: {integrity: sha512-Zb8e1QVeBoSu/s1R3fXczctEqB7lZrdPL87/9INwCaRSY3jPqNn3SlzP8yvwvBwv7axaFgfUrhQJXlnACC3Vnw==}
+ '@tanstack/angular-store@0.9.1':
+ resolution: {integrity: sha512-XdrVBZperSRulkk8kLsPP/apNZQZwAWvNeO6PMb+kRv7iOXAzxaIK2LQTZFLtfT1QgQZFeEqU8klJcdcuG6JcQ==}
peerDependencies:
'@angular/common': '>=19.0.0'
'@angular/core': '>=19.0.0'
@@ -3745,9 +3745,6 @@ packages:
peerDependencies:
solid-js: ^1.6.0
- '@tanstack/store@0.8.1':
- resolution: {integrity: sha512-PtOisLjUZPz5VyPRSCGjNOlwTvabdTBQ2K80DpVL1chGVr35WRxfeavAPdNq6pm/t7F8GhoR2qtmkkqtCEtHYw==}
-
'@tanstack/store@0.9.1':
resolution: {integrity: sha512-+qcNkOy0N1qSGsP7omVCW0SDrXtaDcycPqBDE726yryiA5eTDFpjBReaYjghVJwNf1pcPMyzIwTGlYjCSQR0Fg==}
@@ -10814,11 +10811,11 @@ snapshots:
transitivePeerDependencies:
- encoding
- '@tanstack/angular-store@0.8.1(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))':
+ '@tanstack/angular-store@0.9.1(@angular/common@19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))':
dependencies:
'@angular/common': 19.2.18(@angular/core@19.2.18(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
'@angular/core': 19.2.18(rxjs@7.8.2)(zone.js@0.15.1)
- '@tanstack/store': 0.8.1
+ '@tanstack/store': 0.9.1
tslib: 2.8.1
'@tanstack/devtools-client@0.0.5':
@@ -10957,8 +10954,6 @@ snapshots:
'@tanstack/store': 0.9.1
solid-js: 1.9.11
- '@tanstack/store@0.8.1': {}
-
'@tanstack/store@0.9.1': {}
'@tanstack/typedoc-config@0.3.3(typescript@5.8.3)':
From c3ee242db5d3eaf51b40a256d462af03b77f9346 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?=
Date: Mon, 23 Feb 2026 20:46:21 -0300
Subject: [PATCH 08/11] fix: update sequence adapter
---
.../src/injectHotkeySequence.ts | 22 ++++++++++++-------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/packages/angular-hotkeys/src/injectHotkeySequence.ts b/packages/angular-hotkeys/src/injectHotkeySequence.ts
index 8f50af1..934729f 100644
--- a/packages/angular-hotkeys/src/injectHotkeySequence.ts
+++ b/packages/angular-hotkeys/src/injectHotkeySequence.ts
@@ -67,19 +67,25 @@ export function injectHotkeySequence(
const manager = getSequenceManager()
- // Build options object conditionally to avoid overwriting manager defaults with undefined
- const registerOptions: SequenceOptions = { enabled: true }
- if (sequenceOptions.timeout !== undefined)
- registerOptions.timeout = sequenceOptions.timeout
- if (sequenceOptions.platform !== undefined)
- registerOptions.platform = sequenceOptions.platform
+ // Pass through options; default target to document when not provided
+ const registerOptions: SequenceOptions = {
+ ...sequenceOptions,
+ enabled: true,
+ target:
+ sequenceOptions.target ??
+ (typeof document !== 'undefined' ? document : undefined),
+ }
- const unregister = manager.register(
+ const handle = manager.register(
resolvedSequence,
callback,
registerOptions,
)
- onCleanup(unregister)
+ onCleanup(() => {
+ if (handle.isActive) {
+ handle.unregister()
+ }
+ })
})
}
From edff587a99fa2d16442e5dae69ff61399389f3bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?=
Date: Mon, 23 Feb 2026 22:59:23 -0300
Subject: [PATCH 09/11] feat: support input signals in injectHotkeyRecorder
---
.../src/injectHotkeyRecorder.ts | 72 ++++++++++++++-----
1 file changed, 54 insertions(+), 18 deletions(-)
diff --git a/packages/angular-hotkeys/src/injectHotkeyRecorder.ts b/packages/angular-hotkeys/src/injectHotkeyRecorder.ts
index 781e5ac..46d4769 100644
--- a/packages/angular-hotkeys/src/injectHotkeyRecorder.ts
+++ b/packages/angular-hotkeys/src/injectHotkeyRecorder.ts
@@ -1,7 +1,15 @@
-import { injectStore } from '@tanstack/angular-store'
-import { DestroyRef, effect, inject } from '@angular/core'
+import {
+ DestroyRef,
+ computed,
+ effect,
+ inject,
+ linkedSignal,
+ untracked,
+} from '@angular/core'
import { HotkeyRecorder } from '@tanstack/hotkeys'
import { injectDefaultHotkeysOptions } from './hotkeys-provider'
+import type { Atom, ReadonlyAtom } from '@tanstack/angular-store'
+import type { Signal } from '@angular/core'
import type { Hotkey, HotkeyRecorderOptions } from '@tanstack/hotkeys'
export interface AngularHotkeyRecorder {
@@ -53,40 +61,68 @@ export function injectHotkeyRecorder(
const defaultOptions = injectDefaultHotkeysOptions()
const destroyRef = inject(DestroyRef)
- const resolvedOptions = typeof options === 'function' ? options() : options
- const mergedOptions = {
- ...defaultOptions.hotkeyRecorder,
- ...resolvedOptions,
- } as HotkeyRecorderOptions
+ // Stable signal to lazy initialize the recorder
+ const recorderSignal = computed(() =>
+ untracked(() => {
+ const resolvedOptions =
+ typeof options === 'function' ? options() : options
- // Create recorder once synchronously (matches React's useRef pattern)
- const recorder = new HotkeyRecorder(mergedOptions)
+ const mergedOptions = {
+ ...defaultOptions.hotkeyRecorder,
+ ...resolvedOptions,
+ } as HotkeyRecorderOptions
- // Subscribe to recorder state using useStore (same pattern as useHotkeyRecorder)
- const isRecording = injectStore(recorder.store, (state) => state.isRecording)
- const recordedHotkey = injectStore(
- recorder.store,
+ return new HotkeyRecorder(mergedOptions)
+ }),
+ )
+
+ // Subscribe to recorder state
+ const recorderStore = computed(() => untracked(() => recorderSignal().store))
+ const isRecording = injectLazyStore(
+ recorderStore,
+ (state) => state.isRecording,
+ )
+ const recordedHotkey = injectLazyStore(
+ recorderStore,
(state) => state.recordedHotkey,
)
// Sync options on every effect run (matches React's sync on render)
effect(() => {
const resolved = typeof options === 'function' ? options() : options
- recorder.setOptions({
+ recorderSignal().setOptions({
...defaultOptions.hotkeyRecorder,
...resolved,
} as HotkeyRecorderOptions)
})
destroyRef.onDestroy(() => {
- recorder.destroy()
+ recorderSignal().destroy()
})
return {
isRecording,
recordedHotkey,
- startRecording: () => recorder.start(),
- stopRecording: () => recorder.stop(),
- cancelRecording: () => recorder.cancel(),
+ startRecording: () => recorderSignal().start(),
+ stopRecording: () => recorderSignal().stop(),
+ cancelRecording: () => recorderSignal().cancel(),
}
}
+
+function injectLazyStore>(
+ storeSignal: Signal | ReadonlyAtom>,
+ selector: (state: NoInfer) => TSelected,
+): Signal {
+ const slice = linkedSignal(() => selector(storeSignal().get()))
+
+ effect((onCleanup) => {
+ const currentStore = storeSignal()
+ slice.set(selector(currentStore.get()))
+ const { unsubscribe } = currentStore.subscribe((s) => {
+ slice.set(selector(s))
+ })
+ onCleanup(() => unsubscribe())
+ })
+
+ return slice.asReadonly()
+}
From 92a42e9dbc80f62711c370233f548206dbd62b7c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?=
Date: Mon, 23 Feb 2026 22:59:50 -0300
Subject: [PATCH 10/11] chore: format and version consistency
---
.../injectHeldKeys/src/app/app.config.ts | 5 +-
.../injectHotkey/src/app/app.config.ts | 5 +-
.../src/app/app.config.ts | 5 +-
.../src/app/app.config.ts | 5 +-
.../injectKeyHold/src/app/app.config.ts | 5 +-
examples/preact/useHeldKeys/package.json | 2 +-
examples/preact/useHotkey/package.json | 2 +-
.../preact/useHotkeyRecorder/package.json | 2 +-
.../preact/useHotkeySequence/package.json | 2 +-
examples/preact/useKeyhold/package.json | 2 +-
examples/solid/createHotkey/package.json | 2 +-
.../src/injectHotkeySequence.ts | 6 +-
pnpm-lock.yaml | 76 ++++---------------
13 files changed, 26 insertions(+), 93 deletions(-)
diff --git a/examples/angular/injectHeldKeys/src/app/app.config.ts b/examples/angular/injectHeldKeys/src/app/app.config.ts
index a226399..0a966a4 100644
--- a/examples/angular/injectHeldKeys/src/app/app.config.ts
+++ b/examples/angular/injectHeldKeys/src/app/app.config.ts
@@ -2,8 +2,5 @@ import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'
import { provideHotkeys } from '@tanstack/angular-hotkeys'
export const appConfig: ApplicationConfig = {
- providers: [
- provideZoneChangeDetection({ eventCoalescing: true }),
- provideHotkeys(),
- ],
+ providers: [provideZoneChangeDetection({ eventCoalescing: true })],
}
diff --git a/examples/angular/injectHotkey/src/app/app.config.ts b/examples/angular/injectHotkey/src/app/app.config.ts
index a226399..0a966a4 100644
--- a/examples/angular/injectHotkey/src/app/app.config.ts
+++ b/examples/angular/injectHotkey/src/app/app.config.ts
@@ -2,8 +2,5 @@ import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'
import { provideHotkeys } from '@tanstack/angular-hotkeys'
export const appConfig: ApplicationConfig = {
- providers: [
- provideZoneChangeDetection({ eventCoalescing: true }),
- provideHotkeys(),
- ],
+ providers: [provideZoneChangeDetection({ eventCoalescing: true })],
}
diff --git a/examples/angular/injectHotkeyRecorder/src/app/app.config.ts b/examples/angular/injectHotkeyRecorder/src/app/app.config.ts
index a226399..0a966a4 100644
--- a/examples/angular/injectHotkeyRecorder/src/app/app.config.ts
+++ b/examples/angular/injectHotkeyRecorder/src/app/app.config.ts
@@ -2,8 +2,5 @@ import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'
import { provideHotkeys } from '@tanstack/angular-hotkeys'
export const appConfig: ApplicationConfig = {
- providers: [
- provideZoneChangeDetection({ eventCoalescing: true }),
- provideHotkeys(),
- ],
+ providers: [provideZoneChangeDetection({ eventCoalescing: true })],
}
diff --git a/examples/angular/injectHotkeySequence/src/app/app.config.ts b/examples/angular/injectHotkeySequence/src/app/app.config.ts
index a226399..0a966a4 100644
--- a/examples/angular/injectHotkeySequence/src/app/app.config.ts
+++ b/examples/angular/injectHotkeySequence/src/app/app.config.ts
@@ -2,8 +2,5 @@ import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'
import { provideHotkeys } from '@tanstack/angular-hotkeys'
export const appConfig: ApplicationConfig = {
- providers: [
- provideZoneChangeDetection({ eventCoalescing: true }),
- provideHotkeys(),
- ],
+ providers: [provideZoneChangeDetection({ eventCoalescing: true })],
}
diff --git a/examples/angular/injectKeyHold/src/app/app.config.ts b/examples/angular/injectKeyHold/src/app/app.config.ts
index a226399..0a966a4 100644
--- a/examples/angular/injectKeyHold/src/app/app.config.ts
+++ b/examples/angular/injectKeyHold/src/app/app.config.ts
@@ -2,8 +2,5 @@ import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'
import { provideHotkeys } from '@tanstack/angular-hotkeys'
export const appConfig: ApplicationConfig = {
- providers: [
- provideZoneChangeDetection({ eventCoalescing: true }),
- provideHotkeys(),
- ],
+ providers: [provideZoneChangeDetection({ eventCoalescing: true })],
}
diff --git a/examples/preact/useHeldKeys/package.json b/examples/preact/useHeldKeys/package.json
index 0f88274..cd82c06 100644
--- a/examples/preact/useHeldKeys/package.json
+++ b/examples/preact/useHeldKeys/package.json
@@ -18,7 +18,7 @@
"@preact/preset-vite": "^2.10.2",
"@tanstack/preact-devtools": "0.9.6",
"@tanstack/preact-hotkeys-devtools": "^0.3.0",
- "typescript": "5.9.3",
+ "typescript": "5.8.3",
"vite": "^7.3.1"
}
}
diff --git a/examples/preact/useHotkey/package.json b/examples/preact/useHotkey/package.json
index 1c27c64..74384ad 100644
--- a/examples/preact/useHotkey/package.json
+++ b/examples/preact/useHotkey/package.json
@@ -18,7 +18,7 @@
"@preact/preset-vite": "^2.10.2",
"@tanstack/preact-devtools": "0.9.6",
"@tanstack/preact-hotkeys-devtools": "^0.3.0",
- "typescript": "5.9.3",
+ "typescript": "5.8.3",
"vite": "^7.3.1"
}
}
diff --git a/examples/preact/useHotkeyRecorder/package.json b/examples/preact/useHotkeyRecorder/package.json
index e001405..a7b9f52 100644
--- a/examples/preact/useHotkeyRecorder/package.json
+++ b/examples/preact/useHotkeyRecorder/package.json
@@ -18,7 +18,7 @@
"@preact/preset-vite": "^2.10.2",
"@tanstack/preact-devtools": "0.9.6",
"@tanstack/preact-hotkeys-devtools": "^0.3.0",
- "typescript": "5.9.3",
+ "typescript": "5.8.3",
"vite": "^7.3.1"
}
}
diff --git a/examples/preact/useHotkeySequence/package.json b/examples/preact/useHotkeySequence/package.json
index adf94b1..c4769b9 100644
--- a/examples/preact/useHotkeySequence/package.json
+++ b/examples/preact/useHotkeySequence/package.json
@@ -18,7 +18,7 @@
"@preact/preset-vite": "^2.10.2",
"@tanstack/preact-devtools": "0.9.6",
"@tanstack/preact-hotkeys-devtools": "^0.3.0",
- "typescript": "5.9.3",
+ "typescript": "5.8.3",
"vite": "^7.3.1"
}
}
diff --git a/examples/preact/useKeyhold/package.json b/examples/preact/useKeyhold/package.json
index 2f863ce..1c88d4f 100644
--- a/examples/preact/useKeyhold/package.json
+++ b/examples/preact/useKeyhold/package.json
@@ -18,7 +18,7 @@
"@preact/preset-vite": "^2.10.2",
"@tanstack/preact-devtools": "0.9.6",
"@tanstack/preact-hotkeys-devtools": "^0.3.0",
- "typescript": "5.9.3",
+ "typescript": "5.8.3",
"vite": "^7.3.1"
}
}
diff --git a/examples/solid/createHotkey/package.json b/examples/solid/createHotkey/package.json
index 7aec5d6..71b9540 100644
--- a/examples/solid/createHotkey/package.json
+++ b/examples/solid/createHotkey/package.json
@@ -18,7 +18,7 @@
"solid-js": "^1.9.11"
},
"devDependencies": {
- "@types/node": "^25.2.3",
+ "@types/node": "^25.3.0",
"typescript": "5.8.3",
"vite": "^7.3.1",
"vite-plugin-solid": "^2.11.10"
diff --git a/packages/angular-hotkeys/src/injectHotkeySequence.ts b/packages/angular-hotkeys/src/injectHotkeySequence.ts
index 934729f..c242202 100644
--- a/packages/angular-hotkeys/src/injectHotkeySequence.ts
+++ b/packages/angular-hotkeys/src/injectHotkeySequence.ts
@@ -76,11 +76,7 @@ export function injectHotkeySequence(
(typeof document !== 'undefined' ? document : undefined),
}
- const handle = manager.register(
- resolvedSequence,
- callback,
- registerOptions,
- )
+ const handle = manager.register(resolvedSequence, callback, registerOptions)
onCleanup(() => {
if (handle.isActive) {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c45bbdb..7352ac1 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -450,8 +450,8 @@ importers:
specifier: ^0.3.0
version: link:../../../packages/preact-hotkeys-devtools
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
vite:
specifier: ^7.3.1
version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
@@ -475,8 +475,8 @@ importers:
specifier: ^0.3.0
version: link:../../../packages/preact-hotkeys-devtools
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
vite:
specifier: ^7.3.1
version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
@@ -500,8 +500,8 @@ importers:
specifier: ^0.3.0
version: link:../../../packages/preact-hotkeys-devtools
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
vite:
specifier: ^7.3.1
version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
@@ -525,8 +525,8 @@ importers:
specifier: ^0.3.0
version: link:../../../packages/preact-hotkeys-devtools
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
vite:
specifier: ^7.3.1
version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
@@ -550,8 +550,8 @@ importers:
specifier: ^0.3.0
version: link:../../../packages/preact-hotkeys-devtools
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 5.8.3
+ version: 5.8.3
vite:
specifier: ^7.3.1
version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
@@ -770,17 +770,17 @@ importers:
version: 1.9.11
devDependencies:
'@types/node':
- specifier: ^25.2.3
- version: 25.2.3
+ specifier: ^25.3.0
+ version: 25.3.0
typescript:
specifier: 5.8.3
version: 5.8.3
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
vite-plugin-solid:
specifier: ^2.11.10
- version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
+ version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
examples/solid/createHotkeyRecorder:
dependencies:
@@ -3880,9 +3880,6 @@ packages:
'@types/node@12.20.55':
resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
- '@types/node@25.2.3':
- resolution: {integrity: sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==}
-
'@types/node@25.3.0':
resolution: {integrity: sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==}
@@ -7680,9 +7677,6 @@ packages:
unconfig-core@7.4.2:
resolution: {integrity: sha512-VgPCvLWugINbXvMQDf8Jh0mlbvNjNC6eSUziHsBCMpxR05OPrNrvDnyatdMjRgcHaaNsCqz+wjNXxNw1kRLHUg==}
- undici-types@7.16.0:
- resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
-
undici-types@7.18.2:
resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
@@ -11130,10 +11124,6 @@ snapshots:
'@types/node@12.20.55': {}
- '@types/node@25.2.3':
- dependencies:
- undici-types: 7.16.0
-
'@types/node@25.3.0':
dependencies:
undici-types: 7.18.2
@@ -15445,8 +15435,6 @@ snapshots:
'@quansync/fs': 1.0.0
quansync: 1.0.0
- undici-types@7.16.0: {}
-
undici-types@7.18.2: {}
undici@7.21.0: {}
@@ -15533,21 +15521,6 @@ snapshots:
vary@1.1.2: {}
- vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)):
- dependencies:
- '@babel/core': 7.29.0
- '@types/babel__core': 7.20.5
- babel-preset-solid: 1.9.10(@babel/core@7.29.0)(solid-js@1.9.11)
- merge-anything: 5.1.7
- solid-js: 1.9.11
- solid-refresh: 0.6.3(solid-js@1.9.11)
- vite: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
- vitefu: 1.1.1(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))
- optionalDependencies:
- '@testing-library/jest-dom': 6.9.1
- transitivePeerDependencies:
- - supports-color
-
vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)):
dependencies:
'@babel/core': 7.29.0
@@ -15590,23 +15563,6 @@ snapshots:
terser: 5.39.0
yaml: 2.8.2
- vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2):
- dependencies:
- esbuild: 0.27.3
- fdir: 6.5.0(picomatch@4.0.3)
- picomatch: 4.0.3
- postcss: 8.5.6
- rollup: 4.57.1
- tinyglobby: 0.2.15
- optionalDependencies:
- '@types/node': 25.2.3
- fsevents: 2.3.3
- jiti: 2.6.1
- less: 4.2.2
- sass: 1.85.0
- terser: 5.39.0
- yaml: 2.8.2
-
vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2):
dependencies:
esbuild: 0.27.3
@@ -15624,10 +15580,6 @@ snapshots:
terser: 5.39.0
yaml: 2.8.2
- vitefu@1.1.1(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)):
- optionalDependencies:
- vite: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
-
vitefu@1.1.1(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)):
optionalDependencies:
vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)
From 4e0575d84d2cae78db181d6347b6a8517485118f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?=
Date: Mon, 23 Feb 2026 23:01:21 -0300
Subject: [PATCH 11/11] chore: update docs
---
.../functions/injectHotkeyRecorder.md | 2 +-
.../interfaces/AngularHotkeyRecorder.md | 12 +-
.../interfaces/HotkeysContextValue.md | 2 +-
packages/angular-hotkeys/README.md | 455 +++++-------------
packages/hotkeys-devtools/README.md | 4 +-
packages/hotkeys/README.md | 4 +-
packages/preact-hotkeys-devtools/README.md | 4 +-
packages/preact-hotkeys/README.md | 4 +-
packages/react-hotkeys-devtools/README.md | 4 +-
packages/react-hotkeys/README.md | 4 +-
10 files changed, 142 insertions(+), 353 deletions(-)
diff --git a/docs/framework/angular/reference/functions/injectHotkeyRecorder.md b/docs/framework/angular/reference/functions/injectHotkeyRecorder.md
index a715fd2..cd79601 100644
--- a/docs/framework/angular/reference/functions/injectHotkeyRecorder.md
+++ b/docs/framework/angular/reference/functions/injectHotkeyRecorder.md
@@ -9,7 +9,7 @@ title: injectHotkeyRecorder
function injectHotkeyRecorder(options): AngularHotkeyRecorder;
```
-Defined in: [injectHotkeyRecorder.ts:50](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L50)
+Defined in: [injectHotkeyRecorder.ts:58](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L58)
Angular inject-based API for recording keyboard shortcuts.
diff --git a/docs/framework/angular/reference/interfaces/AngularHotkeyRecorder.md b/docs/framework/angular/reference/interfaces/AngularHotkeyRecorder.md
index 9e3a0d8..8b85b28 100644
--- a/docs/framework/angular/reference/interfaces/AngularHotkeyRecorder.md
+++ b/docs/framework/angular/reference/interfaces/AngularHotkeyRecorder.md
@@ -5,7 +5,7 @@ title: AngularHotkeyRecorder
# Interface: AngularHotkeyRecorder
-Defined in: [injectHotkeyRecorder.ts:7](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L7)
+Defined in: [injectHotkeyRecorder.ts:15](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L15)
## Properties
@@ -15,7 +15,7 @@ Defined in: [injectHotkeyRecorder.ts:7](https://github.com/TanStack/hotkeys/blob
readonly cancelRecording: () => void;
```
-Defined in: [injectHotkeyRecorder.ts:17](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L17)
+Defined in: [injectHotkeyRecorder.ts:25](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L25)
Cancel recording without saving
@@ -31,7 +31,7 @@ Cancel recording without saving
readonly isRecording: () => boolean;
```
-Defined in: [injectHotkeyRecorder.ts:9](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L9)
+Defined in: [injectHotkeyRecorder.ts:17](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L17)
Whether recording is currently active
@@ -47,7 +47,7 @@ Whether recording is currently active
readonly recordedHotkey: () => Hotkey | null;
```
-Defined in: [injectHotkeyRecorder.ts:11](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L11)
+Defined in: [injectHotkeyRecorder.ts:19](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L19)
The currently recorded hotkey (for live preview)
@@ -63,7 +63,7 @@ The currently recorded hotkey (for live preview)
readonly startRecording: () => void;
```
-Defined in: [injectHotkeyRecorder.ts:13](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L13)
+Defined in: [injectHotkeyRecorder.ts:21](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L21)
Start recording a new hotkey
@@ -79,7 +79,7 @@ Start recording a new hotkey
readonly stopRecording: () => void;
```
-Defined in: [injectHotkeyRecorder.ts:15](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L15)
+Defined in: [injectHotkeyRecorder.ts:23](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/injectHotkeyRecorder.ts#L23)
Stop recording (same as cancel)
diff --git a/docs/framework/angular/reference/interfaces/HotkeysContextValue.md b/docs/framework/angular/reference/interfaces/HotkeysContextValue.md
index 018feed..8d2ce59 100644
--- a/docs/framework/angular/reference/interfaces/HotkeysContextValue.md
+++ b/docs/framework/angular/reference/interfaces/HotkeysContextValue.md
@@ -12,7 +12,7 @@ Defined in: [hotkeys-provider.ts:13](https://github.com/TanStack/hotkeys/blob/ma
### defaultOptions
```ts
-defaultOptions: HotkeysProviderOptions;
+readonly defaultOptions: HotkeysProviderOptions;
```
Defined in: [hotkeys-provider.ts:14](https://github.com/TanStack/hotkeys/blob/main/packages/angular-hotkeys/src/hotkeys-provider.ts#L14)
diff --git a/packages/angular-hotkeys/README.md b/packages/angular-hotkeys/README.md
index 6094f45..d627591 100644
--- a/packages/angular-hotkeys/README.md
+++ b/packages/angular-hotkeys/README.md
@@ -1,333 +1,122 @@
-# @tanstack/angular-hotkeys
-
-> Angular adapter for [TanStack Hotkeys](https://tanstack.com/hotkeys) - keyboard shortcuts made easy
-
-[](https://www.npmjs.com/package/@tanstack/angular-hotkeys)
-[](https://opensource.org/licenses/MIT)
-
-## Features
-
-✅ **Type-safe hotkey bindings** - Template strings (`Mod+Shift+S`, `Escape`) or parsed objects
-✅ **Cross-platform** - `Mod` key automatically maps to Cmd on macOS, Ctrl on Windows/Linux
-✅ **Sequence support** - Vim-style multi-key sequences (`g g`, `d d`)
-✅ **Key state tracking** - Track which keys are currently held down
-✅ **Hotkey recording** - Built-in UI helpers for letting users define their own shortcuts
-✅ **Angular signals** - Inject-based APIs that work with Angular 19+
-
-## Installation
-
-```bash
-npm install @tanstack/angular-hotkeys @tanstack/hotkeys
-# or
-bun add @tanstack/angular-hotkeys @tanstack/hotkeys
-# or
-pnpm add @tanstack/angular-hotkeys @tanstack/hotkeys
-```
-
-## Quick Start
-
-```ts
-import { Component } from '@angular/core'
-import { injectHotkey } from '@tanstack/angular-hotkeys'
-
-@Component({
- selector: 'app-root',
- standalone: true,
- template: `Press Cmd/Ctrl+S to save
`,
-})
-export class AppComponent {
- constructor() {
- injectHotkey('Mod+S', (event) => {
- event.preventDefault()
- console.log('Save!')
- })
- }
-}
-```
-
-## Usage
-
-### Basic Hotkey
-
-```ts
-import { Component, signal } from '@angular/core'
-import { injectHotkey } from '@tanstack/angular-hotkeys'
-
-@Component({
- selector: 'app-save-button',
- standalone: true,
- template: `Save (Cmd/Ctrl+S) `,
-})
-export class SaveButtonComponent {
- private readonly saveCount = signal(0)
-
- constructor() {
- injectHotkey('Mod+S', (event, { hotkey }) => {
- event.preventDefault()
- this.saveCount.update((c) => c + 1)
- })
- }
-}
-```
-
-### Conditional Hotkeys
-
-```ts
-import { Component, signal } from '@angular/core'
-import { injectHotkey } from '@tanstack/angular-hotkeys'
-
-@Component({
- selector: 'app-modal',
- standalone: true,
- template: `
- @if (isOpen()) {
- Press Escape to close
- }
- `,
-})
-export class ModalComponent {
- isOpen = signal(true)
-
- constructor() {
- injectHotkey(
- 'Escape',
- () => this.close(),
- () => ({ enabled: this.isOpen() }),
- )
- }
-
- close() {
- this.isOpen.set(false)
- }
-}
-```
-
-### Scoped Hotkeys
-
-Use a getter for `target` so the hotkey waits for the element (e.g. from `viewChild`):
-
-```ts
-import { Component, viewChild, ElementRef } from '@angular/core'
-import { injectHotkey } from '@tanstack/angular-hotkeys'
-
-@Component({
- selector: 'app-editor',
- standalone: true,
- template: `
`,
-})
-export class EditorComponent {
- private readonly editorRef =
- viewChild>('editorRef')
-
- constructor() {
- injectHotkey(
- 'Mod+B',
- () => this.toggleBold(),
- () => ({ target: this.editorRef()?.nativeElement ?? null }),
- )
- }
-
- toggleBold() {
- document.execCommand('bold')
- }
-}
-```
-
-### Hotkey Sequences (Vim-style)
-
-```ts
-import { Component, signal } from '@angular/core'
-import { injectHotkeySequence, injectHotkey } from '@tanstack/angular-hotkeys'
-
-@Component({
- selector: 'app-vim-editor',
- standalone: true,
- template: `Try Vim shortcuts! Last: {{ lastSequence() }}
`,
-})
-export class VimEditorComponent {
- lastSequence = signal(null)
-
- constructor() {
- injectHotkeySequence(['G', 'G'], () =>
- this.lastSequence.set('gg → Go to top'),
- )
- injectHotkeySequence(['D', 'D'], () =>
- this.lastSequence.set('dd → Delete line'),
- )
- injectHotkeySequence(
- ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown'],
- () => this.lastSequence.set('Konami!'),
- { timeout: 1500 },
- )
- injectHotkey('Escape', () => this.lastSequence.set(null))
- }
-}
-```
-
-### Track Held Keys
-
-```ts
-import { Component } from '@angular/core'
-import { injectHeldKeys, injectKeyHold } from '@tanstack/angular-hotkeys'
-
-@Component({
- selector: 'app-key-tracker',
- standalone: true,
- template: `
- Shift: {{ isShiftHeld() ? 'Pressed' : 'Not pressed' }}
-
- All held:
- @for (key of heldKeys(); track key) {
- {{ key }}
- }
-
- `,
-})
-export class KeyTrackerComponent {
- heldKeys = injectHeldKeys()
- isShiftHeld = injectKeyHold('Shift')
-}
-```
-
-### Hotkey Recorder
-
-```ts
-import { Component, signal } from '@angular/core'
-import { injectHotkey, injectHotkeyRecorder } from '@tanstack/angular-hotkeys'
-
-@Component({
- selector: 'app-shortcut-settings',
- standalone: true,
- template: `
- Current shortcut: {{ shortcut() }}
-
- {{ recorder.isRecording() ? 'Recording...' : 'Edit Shortcut' }}
-
- `,
-})
-export class ShortcutSettingsComponent {
- shortcut = signal('Mod+S')
- recorder = injectHotkeyRecorder({
- onRecord: (hotkey) => this.shortcut.set(hotkey),
- onCancel: () => console.log('Recording cancelled'),
- })
-
- constructor() {
- injectHotkey(
- () => this.shortcut(),
- () => this.handleSave(),
- () => ({ enabled: !this.recorder.isRecording() }),
- )
- }
-
- handleSave() {
- // save logic
- }
-}
-```
-
-### Global Configuration
-
-To customize default options, use `provideHotkeys()`:
-
-```ts
-// app.config.ts
-import { ApplicationConfig } from '@angular/core'
-import { provideHotkeys } from '@tanstack/angular-hotkeys'
-
-export const appConfig: ApplicationConfig = {
- providers: [
- provideHotkeys({
- hotkey: {
- preventDefault: true,
- enabled: true,
- },
- hotkeySequence: {
- timeout: 1000,
- },
- }),
- ],
-}
-```
-
-## API
-
-### `injectHotkey(hotkey, callback, options?)`
-
-Register a keyboard hotkey. Call in an injection context (e.g. constructor or field initializer).
-
-- **hotkey**: String like `'Mod+S'` or `'Escape'`, or getter function
-- **callback**: Function called when hotkey is pressed
-- **options**: Optional configuration (or getter for reactive options)
-
-**Options:** `enabled`, `preventDefault`, `stopPropagation`, `target`, `platform`, `requireReset`
-
-### `injectHotkeySequence(sequence, callback, options?)`
-
-Register a multi-key sequence (Vim-style).
-
-- **sequence**: Array of hotkey strings like `['G', 'G']`, or getter function
-- **callback**: Function called when sequence completes
-- **options**: Optional configuration (or getter function)
-
-**Options:** `enabled`, `timeout` (ms), `platform`
-
-### `injectHeldKeys()`
-
-Returns a signal of currently held key names.
-
-```ts
-const heldKeys = injectHeldKeys()
-// heldKeys() => ['Shift', 'A']
-```
-
-### `injectHeldKeyCodes()`
-
-Returns a signal of a map from held key names to their physical `event.code` values.
-
-```ts
-const heldCodes = injectHeldKeyCodes()
-// heldCodes() => { Shift: 'ShiftLeft', A: 'KeyA' }
-```
-
-### `injectKeyHold(key)`
-
-Returns a signal that is true when the given key is held.
-
-```ts
-const isShiftHeld = injectKeyHold('Shift')
-// isShiftHeld() => true | false
-```
-
-### `injectHotkeyRecorder(options)`
-
-Hotkey recording interface.
-
-**Options:** `onRecord`, `onCancel`, `onClear`
-
-**Returns:** `isRecording`, `recordedHotkey`, `startRecording`, `stopRecording`, `cancelRecording`
-
-### `provideHotkeys(defaultOptions)`
-
-Optional provider for global hotkey defaults. Only needed when you want to customize defaults; otherwise a default context is provided automatically. Use in `ApplicationConfig` or component `providers` when customizing.
-
-### `injectHotkeysContext()` / `injectDefaultHotkeysOptions()`
-
-Inject the hotkeys context or merged default options (for advanced use).
-
-## Cross-Platform Keys
-
-Use `Mod` for cross-platform modifier:
-
-- `Mod+S` → `Cmd+S` on macOS, `Ctrl+S` on Windows/Linux
-- `Mod+Shift+P` → `Cmd+Shift+P` on macOS, `Ctrl+Shift+P` elsewhere
-
-## Related
-
-- [TanStack Hotkeys](https://tanstack.com/hotkeys) - The core library
-- [@tanstack/react-hotkeys](https://tanstack.com/hotkeys) - React adapter
-- [@tanstack/solid-hotkeys](https://tanstack.com/hotkeys) - Solid adapter
-
-## License
-
-MIT
+
+
+
+
+
+
+
+
+
+
+
+
+### [Become a Sponsor!](https://github.com/sponsors/tannerlinsley/)
+
+
+
+# TanStack Hotkeys
+
+> [!NOTE]
+> TanStack Hotkeys is pre-alpha (prototyping phase). We are actively developing the library and are open to feedback and contributions.
+
+Type-safe keyboard shortcuts for the web. Template-string bindings, parsed objects, a cross-platform `Mod` key, a singleton Hotkey Manager, and utilities for cheatsheet UIs—built to stay SSR-friendly.
+
+- Type-safe bindings — template strings (`Mod+Shift+S`, `Escape`) or parsed objects for full control
+- Flexible options — `keydown`/`keyup`, `preventDefault`, `stopPropagation`, conditional enabled, `requireReset`
+- Cross-platform Mod — maps to Cmd on macOS and Ctrl on Windows/Linux
+- Batteries included — validation + matching, sequences (Vim-style), key-state tracking, recorder UI helpers, React hooks, and devtools (in progress)
+
+### Read the docs →
+
+
+
+> [!NOTE]
+> You may know **TanStack Hotkeys** by our adapter names, too!
+>
+> - [**React Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/react/react-hotkeys)
+> - [**Preact Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/preact/preact-hotkeys)
+> - [**Solid Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/solid/reference)
+> - [**Angular Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/angular/reference)
+> - Svelte Hotkeys – needs a contributor!
+> - Vue Hotkeys – needs a contributor!
+
+## Get Involved
+
+- We welcome issues and pull requests!
+- Participate in [GitHub discussions](https://github.com/TanStack/hotkeys/discussions)
+- Chat with the community on [Discord](https://discord.com/invite/WrRKjPJ)
+- See [CONTRIBUTING.md](./CONTRIBUTING.md) for setup instructions
+
+## Partners
+
+
+
+
+
+
+
+
+We're looking for TanStack Hotkeys Partners to join our mission! Partner with us to push the boundaries of TanStack Hotkeys and build amazing things together.
+
+
LET'S CHAT
+
+
+
+
+## Explore the TanStack Ecosystem
+
+- TanStack Config – Tooling for JS/TS packages
+- TanStack DB – Reactive sync client store
+- TanStack DevTools – Unified devtools panel
+- TanStack Form – Type‑safe form state
+- TanStack Hotkeys – Type‑safe keyboard shortcuts
+- TanStack Query – Async state & caching
+- TanStack Ranger – Range & slider primitives
+- TanStack Router – Type‑safe routing, caching & URL state
+- TanStack Start – Full‑stack SSR & streaming
+- TanStack Store – Reactive data store
+- TanStack Table – Headless datagrids
+- TanStack Virtual – Virtualized rendering
+
+… and more at TanStack.com »
diff --git a/packages/hotkeys-devtools/README.md b/packages/hotkeys-devtools/README.md
index 4609ad9..d627591 100644
--- a/packages/hotkeys-devtools/README.md
+++ b/packages/hotkeys-devtools/README.md
@@ -55,8 +55,8 @@ Type-safe keyboard shortcuts for the web. Template-string bindings, parsed objec
>
> - [**React Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/react/react-hotkeys)
> - [**Preact Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/preact/preact-hotkeys)
-> - [**Solid Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/solid/solid-hotkeys)
-> - Angular Hotkeys – needs a contributor!
+> - [**Solid Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/solid/reference)
+> - [**Angular Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/angular/reference)
> - Svelte Hotkeys – needs a contributor!
> - Vue Hotkeys – needs a contributor!
diff --git a/packages/hotkeys/README.md b/packages/hotkeys/README.md
index 4609ad9..d627591 100644
--- a/packages/hotkeys/README.md
+++ b/packages/hotkeys/README.md
@@ -55,8 +55,8 @@ Type-safe keyboard shortcuts for the web. Template-string bindings, parsed objec
>
> - [**React Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/react/react-hotkeys)
> - [**Preact Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/preact/preact-hotkeys)
-> - [**Solid Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/solid/solid-hotkeys)
-> - Angular Hotkeys – needs a contributor!
+> - [**Solid Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/solid/reference)
+> - [**Angular Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/angular/reference)
> - Svelte Hotkeys – needs a contributor!
> - Vue Hotkeys – needs a contributor!
diff --git a/packages/preact-hotkeys-devtools/README.md b/packages/preact-hotkeys-devtools/README.md
index 4609ad9..d627591 100644
--- a/packages/preact-hotkeys-devtools/README.md
+++ b/packages/preact-hotkeys-devtools/README.md
@@ -55,8 +55,8 @@ Type-safe keyboard shortcuts for the web. Template-string bindings, parsed objec
>
> - [**React Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/react/react-hotkeys)
> - [**Preact Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/preact/preact-hotkeys)
-> - [**Solid Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/solid/solid-hotkeys)
-> - Angular Hotkeys – needs a contributor!
+> - [**Solid Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/solid/reference)
+> - [**Angular Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/angular/reference)
> - Svelte Hotkeys – needs a contributor!
> - Vue Hotkeys – needs a contributor!
diff --git a/packages/preact-hotkeys/README.md b/packages/preact-hotkeys/README.md
index 4609ad9..d627591 100644
--- a/packages/preact-hotkeys/README.md
+++ b/packages/preact-hotkeys/README.md
@@ -55,8 +55,8 @@ Type-safe keyboard shortcuts for the web. Template-string bindings, parsed objec
>
> - [**React Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/react/react-hotkeys)
> - [**Preact Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/preact/preact-hotkeys)
-> - [**Solid Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/solid/solid-hotkeys)
-> - Angular Hotkeys – needs a contributor!
+> - [**Solid Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/solid/reference)
+> - [**Angular Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/angular/reference)
> - Svelte Hotkeys – needs a contributor!
> - Vue Hotkeys – needs a contributor!
diff --git a/packages/react-hotkeys-devtools/README.md b/packages/react-hotkeys-devtools/README.md
index 4609ad9..d627591 100644
--- a/packages/react-hotkeys-devtools/README.md
+++ b/packages/react-hotkeys-devtools/README.md
@@ -55,8 +55,8 @@ Type-safe keyboard shortcuts for the web. Template-string bindings, parsed objec
>
> - [**React Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/react/react-hotkeys)
> - [**Preact Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/preact/preact-hotkeys)
-> - [**Solid Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/solid/solid-hotkeys)
-> - Angular Hotkeys – needs a contributor!
+> - [**Solid Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/solid/reference)
+> - [**Angular Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/angular/reference)
> - Svelte Hotkeys – needs a contributor!
> - Vue Hotkeys – needs a contributor!
diff --git a/packages/react-hotkeys/README.md b/packages/react-hotkeys/README.md
index 4609ad9..d627591 100644
--- a/packages/react-hotkeys/README.md
+++ b/packages/react-hotkeys/README.md
@@ -55,8 +55,8 @@ Type-safe keyboard shortcuts for the web. Template-string bindings, parsed objec
>
> - [**React Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/react/react-hotkeys)
> - [**Preact Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/preact/preact-hotkeys)
-> - [**Solid Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/solid/solid-hotkeys)
-> - Angular Hotkeys – needs a contributor!
+> - [**Solid Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/solid/reference)
+> - [**Angular Hotkeys**](https://tanstack.com/hotkeys/latest/docs/framework/angular/reference)
> - Svelte Hotkeys – needs a contributor!
> - Vue Hotkeys – needs a contributor!