diff --git a/apps/solid-example/index.html b/apps/solid-example/index.html
new file mode 100644
index 0000000..584991d
--- /dev/null
+++ b/apps/solid-example/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ WebHaptics Solid Example
+
+
+
+
+
+
diff --git a/apps/solid-example/package.json b/apps/solid-example/package.json
new file mode 100644
index 0000000..324bb96
--- /dev/null
+++ b/apps/solid-example/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "solid-example",
+ "private": true,
+ "version": "0.0.6",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "solid-js": "^1.9.0",
+ "web-haptics": "workspace:*"
+ },
+ "devDependencies": {
+ "typescript": "^5.0.2",
+ "vite": "^7.3.1",
+ "vite-plugin-solid": "^2.11.0"
+ }
+}
diff --git a/apps/solid-example/src/App.tsx b/apps/solid-example/src/App.tsx
new file mode 100644
index 0000000..22556fa
--- /dev/null
+++ b/apps/solid-example/src/App.tsx
@@ -0,0 +1,19 @@
+import { useWebHaptics } from "web-haptics/solid";
+
+export default function App() {
+ const { trigger } = useWebHaptics();
+
+ return (
+
+
+
+ );
+}
diff --git a/apps/solid-example/src/main.tsx b/apps/solid-example/src/main.tsx
new file mode 100644
index 0000000..522c520
--- /dev/null
+++ b/apps/solid-example/src/main.tsx
@@ -0,0 +1,4 @@
+import { render } from "solid-js/web";
+import App from "./App";
+
+render(() => , document.getElementById("root")!);
diff --git a/apps/solid-example/tsconfig.json b/apps/solid-example/tsconfig.json
new file mode 100644
index 0000000..bbea4eb
--- /dev/null
+++ b/apps/solid-example/tsconfig.json
@@ -0,0 +1,21 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "preserve",
+ "jsxImportSource": "solid-js",
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src"]
+}
diff --git a/apps/solid-example/vite.config.ts b/apps/solid-example/vite.config.ts
new file mode 100644
index 0000000..4a303c3
--- /dev/null
+++ b/apps/solid-example/vite.config.ts
@@ -0,0 +1,6 @@
+import { defineConfig } from "vite";
+import solid from "vite-plugin-solid";
+
+export default defineConfig({
+ plugins: [solid()],
+});
diff --git a/packages/web-haptics/package.json b/packages/web-haptics/package.json
index 3876d90..5a348d6 100644
--- a/packages/web-haptics/package.json
+++ b/packages/web-haptics/package.json
@@ -34,6 +34,11 @@
"types": "./dist/svelte/index.d.ts",
"import": "./dist/svelte/index.mjs",
"require": "./dist/svelte/index.js"
+ },
+ "./solid": {
+ "types": "./dist/solid/index.d.ts",
+ "import": "./dist/solid/index.mjs",
+ "require": "./dist/solid/index.js"
}
},
"publishConfig": {
@@ -56,6 +61,8 @@
"react",
"vue",
"svelte",
+ "solid",
+ "solidjs",
"typescript"
],
"bugs": {
@@ -73,7 +80,8 @@
"react": ">=18",
"react-dom": ">=18",
"vue": ">=3",
- "svelte": ">=4"
+ "svelte": ">=4",
+ "solid-js": ">=1.6"
},
"peerDependenciesMeta": {
"react": {
@@ -87,6 +95,9 @@
},
"svelte": {
"optional": true
+ },
+ "solid-js": {
+ "optional": true
}
},
"devDependencies": {
@@ -105,6 +116,7 @@
"prettier": "^3.0.3",
"react": "^18.2.0",
"react-dom": "^18.2.0",
+ "solid-js": "^1.9.0",
"svelte": "^4.0.0",
"tsup": "^8.5.0",
"typescript": "^5.9.3",
diff --git a/packages/web-haptics/src/solid/index.ts b/packages/web-haptics/src/solid/index.ts
new file mode 100644
index 0000000..79fb6d7
--- /dev/null
+++ b/packages/web-haptics/src/solid/index.ts
@@ -0,0 +1 @@
+export { useWebHaptics } from "./useWebHaptics";
diff --git a/packages/web-haptics/src/solid/types.ts b/packages/web-haptics/src/solid/types.ts
new file mode 100644
index 0000000..ddb9391
--- /dev/null
+++ b/packages/web-haptics/src/solid/types.ts
@@ -0,0 +1,8 @@
+export type {
+ Vibration,
+ HapticPattern,
+ HapticPreset,
+ HapticInput,
+ TriggerOptions,
+ WebHapticsOptions,
+} from "../lib/web-haptics/types";
diff --git a/packages/web-haptics/src/solid/useWebHaptics.ts b/packages/web-haptics/src/solid/useWebHaptics.ts
new file mode 100644
index 0000000..c2dc4ce
--- /dev/null
+++ b/packages/web-haptics/src/solid/useWebHaptics.ts
@@ -0,0 +1,49 @@
+import { onMount, onCleanup, createEffect, on } from "solid-js";
+import { WebHaptics } from "../lib/web-haptics";
+import type {
+ HapticInput,
+ TriggerOptions,
+ WebHapticsOptions,
+} from "../lib/web-haptics/types";
+
+export function useWebHaptics(options?: () => WebHapticsOptions) {
+ let instance: WebHaptics | null = null;
+
+ onMount(() => {
+ instance = new WebHaptics(options?.());
+ });
+
+ onCleanup(() => {
+ instance?.destroy();
+ instance = null;
+ });
+
+ createEffect(
+ on(
+ () => options?.()?.debug,
+ (debug) => {
+ instance?.setDebug(debug ?? false);
+ },
+ { defer: true },
+ ),
+ );
+
+ createEffect(
+ on(
+ () => options?.()?.showSwitch,
+ (showSwitch) => {
+ instance?.setShowSwitch(showSwitch ?? false);
+ },
+ { defer: true },
+ ),
+ );
+
+ const trigger = (input?: HapticInput, opts?: TriggerOptions) =>
+ instance?.trigger(input, opts);
+
+ const cancel = () => instance?.cancel();
+
+ const isSupported = WebHaptics.isSupported;
+
+ return { trigger, cancel, isSupported };
+}
diff --git a/packages/web-haptics/tsup.config.ts b/packages/web-haptics/tsup.config.ts
index 5434c9b..416f074 100644
--- a/packages/web-haptics/tsup.config.ts
+++ b/packages/web-haptics/tsup.config.ts
@@ -64,6 +64,19 @@ export default defineConfig((options) => {
esbuildPlugins: [aliasCorePlugin],
minify: !options.watch,
},
+ // Solid
+ {
+ entry: {
+ "solid/index": "src/solid/index.ts",
+ },
+ format: ["cjs", "esm"],
+ dts: true,
+ target: "es2022",
+ treeshake: true,
+ external: ["solid-js"],
+ esbuildPlugins: [aliasCorePlugin],
+ minify: !options.watch,
+ },
];
return configs;
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a393b0f..8f76be7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -49,6 +49,25 @@ importers:
specifier: ^7.3.1
version: 7.3.1(@types/node@20.5.1)(sass@1.93.0)(yaml@2.8.1)
+ apps/solid-example:
+ dependencies:
+ solid-js:
+ specifier: ^1.9.0
+ version: 1.9.11
+ web-haptics:
+ specifier: workspace:*
+ version: link:../../packages/web-haptics
+ devDependencies:
+ typescript:
+ specifier: ^5.0.2
+ version: 5.9.3
+ vite:
+ specifier: ^7.3.1
+ version: 7.3.1(@types/node@20.5.1)(sass@1.93.0)(yaml@2.8.1)
+ vite-plugin-solid:
+ specifier: ^2.11.0
+ version: 2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@20.5.1)(sass@1.93.0)(yaml@2.8.1))
+
apps/svelte-example:
dependencies:
web-haptics:
@@ -147,6 +166,9 @@ importers:
react-dom:
specifier: ^18.2.0
version: 18.3.1(react@18.3.1)
+ solid-js:
+ specifier: ^1.9.0
+ version: 1.9.11
svelte:
specifier: ^4.0.0
version: 4.2.20
@@ -245,6 +267,10 @@ packages:
resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-module-imports@7.18.6':
+ resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-module-imports@7.27.1':
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
engines: {node: '>=6.9.0'}
@@ -259,6 +285,10 @@ packages:
resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-plugin-utils@7.28.6':
+ resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-string-parser@7.27.1':
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
@@ -289,6 +319,12 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
+ '@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/plugin-transform-react-jsx-self@7.27.1':
resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
engines: {node: '>=6.9.0'}
@@ -911,36 +947,42 @@ packages:
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==}
@@ -1009,56 +1051,67 @@ packages:
resolution: {integrity: sha512-aL6hRwu0k7MTUESgkg7QHY6CoqPgr6gdQXRJI1/VbFlUMwsSzPGSR7sG5d+MCbYnJmJwThc2ol3nixj1fvI/zQ==}
cpu: [arm]
os: [linux]
+ libc: [glibc]
'@rollup/rollup-linux-arm-musleabihf@4.52.0':
resolution: {integrity: sha512-BTs0M5s1EJejgIBJhCeiFo7GZZ2IXWkFGcyZhxX4+8usnIo5Mti57108vjXFIQmmJaRyDwmV59Tw64Ap1dkwMw==}
cpu: [arm]
os: [linux]
+ libc: [musl]
'@rollup/rollup-linux-arm64-gnu@4.52.0':
resolution: {integrity: sha512-uj672IVOU9m08DBGvoPKPi/J8jlVgjh12C9GmjjBxCTQc3XtVmRkRKyeHSmIKQpvJ7fIm1EJieBUcnGSzDVFyw==}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@rollup/rollup-linux-arm64-musl@4.52.0':
resolution: {integrity: sha512-/+IVbeDMDCtB/HP/wiWsSzduD10SEGzIZX2945KSgZRNi4TSkjHqRJtNTVtVb8IRwhJ65ssI56krlLik+zFWkw==}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@rollup/rollup-linux-loong64-gnu@4.52.0':
resolution: {integrity: sha512-U1vVzvSWtSMWKKrGoROPBXMh3Vwn93TA9V35PldokHGqiUbF6erSzox/5qrSMKp6SzakvyjcPiVF8yB1xKr9Pg==}
cpu: [loong64]
os: [linux]
+ libc: [glibc]
'@rollup/rollup-linux-ppc64-gnu@4.52.0':
resolution: {integrity: sha512-X/4WfuBAdQRH8cK3DYl8zC00XEE6aM472W+QCycpQJeLWVnHfkv7RyBFVaTqNUMsTgIX8ihMjCvFF9OUgeABzw==}
cpu: [ppc64]
os: [linux]
+ libc: [glibc]
'@rollup/rollup-linux-riscv64-gnu@4.52.0':
resolution: {integrity: sha512-xIRYc58HfWDBZoLmWfWXg2Sq8VCa2iJ32B7mqfWnkx5mekekl0tMe7FHpY8I72RXEcUkaWawRvl3qA55og+cwQ==}
cpu: [riscv64]
os: [linux]
+ libc: [glibc]
'@rollup/rollup-linux-riscv64-musl@4.52.0':
resolution: {integrity: sha512-mbsoUey05WJIOz8U1WzNdf+6UMYGwE3fZZnQqsM22FZ3wh1N887HT6jAOjXs6CNEK3Ntu2OBsyQDXfIjouI4dw==}
cpu: [riscv64]
os: [linux]
+ libc: [musl]
'@rollup/rollup-linux-s390x-gnu@4.52.0':
resolution: {integrity: sha512-qP6aP970bucEi5KKKR4AuPFd8aTx9EF6BvutvYxmZuWLJHmnq4LvBfp0U+yFDMGwJ+AIJEH5sIP+SNypauMWzg==}
cpu: [s390x]
os: [linux]
+ libc: [glibc]
'@rollup/rollup-linux-x64-gnu@4.52.0':
resolution: {integrity: sha512-nmSVN+F2i1yKZ7rJNKO3G7ZzmxJgoQBQZ/6c4MuS553Grmr7WqR7LLDcYG53Z2m9409z3JLt4sCOhLdbKQ3HmA==}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@rollup/rollup-linux-x64-musl@4.52.0':
resolution: {integrity: sha512-2d0qRo33G6TfQVjaMR71P+yJVGODrt5V6+T0BDYH4EMfGgdC/2HWDVjSSFw888GSzAZUwuska3+zxNUCDco6rQ==}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@rollup/rollup-openharmony-arm64@4.52.0':
resolution: {integrity: sha512-A1JalX4MOaFAAyGgpO7XP5khquv/7xKzLIyLmhNrbiCxWpMlnsTYr8dnsWM7sEeotNmxvSOEL7F65j0HXFcFsw==}
@@ -1403,6 +1456,20 @@ packages:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
engines: {node: '>= 0.4'}
+ babel-plugin-jsx-dom-expressions@0.40.5:
+ resolution: {integrity: sha512-8TFKemVLDYezqqv4mWz+PhRrkryTzivTGu0twyLrOkVZ0P63COx2Y04eVsUjFlwSOXui1z3P3Pn209dokWnirg==}
+ peerDependencies:
+ '@babel/core': ^7.20.12
+
+ babel-preset-solid@1.9.10:
+ resolution: {integrity: sha512-HCelrgua/Y+kqO8RyL04JBWS/cVdrtUv/h45GntgQY+cJl4eBcKkCDV3TdMjtKx1nXwRaR9QXslM/Npm1dxdZQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ solid-js: ^1.9.10
+ peerDependenciesMeta:
+ solid-js:
+ optional: true
+
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -1710,6 +1777,10 @@ packages:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
+ entities@6.0.1:
+ resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
+ engines: {node: '>=0.12'}
+
error-ex@1.3.4:
resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
@@ -2187,6 +2258,9 @@ packages:
resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
engines: {node: '>=10'}
+ html-entities@2.3.3:
+ resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==}
+
human-id@4.1.3:
resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==}
hasBin: true
@@ -2378,6 +2452,10 @@ packages:
resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
engines: {node: '>= 0.4'}
+ is-what@4.1.16:
+ resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
+ engines: {node: '>=12.13'}
+
is-windows@1.0.2:
resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
engines: {node: '>=0.10.0'}
@@ -2596,6 +2674,10 @@ packages:
resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==}
engines: {node: '>=10'}
+ merge-anything@5.1.7:
+ resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==}
+ engines: {node: '>=12.13'}
+
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -2810,6 +2892,9 @@ packages:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
+ parse5@7.3.0:
+ resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
+
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -3073,6 +3158,16 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ seroval-plugins@1.5.1:
+ resolution: {integrity: sha512-4FbuZ/TMl02sqv0RTFexu0SP6V+ywaIe5bAWCCEik0fk17BhALgwvUDVF7e3Uvf9pxmwCEJsRPmlkUE6HdzLAw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ seroval: ^1.0
+
+ seroval@1.5.1:
+ resolution: {integrity: sha512-OwrZRZAfhHww0WEnKHDY8OM0U/Qs8OTfIDWhUD4BLpNJUfXK4cGmjiagGze086m+mhI+V2nD0gfbHEnJjb9STA==}
+ engines: {node: '>=10'}
+
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@@ -3124,6 +3219,14 @@ packages:
resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
engines: {node: '>=12'}
+ solid-js@1.9.11:
+ resolution: {integrity: sha512-WEJtcc5mkh/BnHA6Yrg4whlF8g6QwpmXXRg4P2ztPmcKeHHlH4+djYecBLhSpecZY2RRECXYUwIc/C2r3yzQ4Q==}
+
+ solid-refresh@0.6.3:
+ resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==}
+ peerDependencies:
+ solid-js: ^1.3
+
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
@@ -3445,6 +3548,16 @@ packages:
validate-npm-package-license@3.0.4:
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+ vite-plugin-solid@2.11.10:
+ resolution: {integrity: sha512-Yr1dQybmtDtDAHkii6hXuc1oVH9CPcS/Zb2jN/P36qqcrkNnVPsMTzQ06jyzFPFjj3U1IYKMVt/9ZqcwGCEbjw==}
+ peerDependencies:
+ '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.*
+ solid-js: ^1.7.2
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+ peerDependenciesMeta:
+ '@testing-library/jest-dom':
+ optional: true
+
vite@6.4.1:
resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
@@ -3533,6 +3646,14 @@ packages:
vite:
optional: true
+ vitefu@1.1.2:
+ resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==}
+ peerDependencies:
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0
+ peerDependenciesMeta:
+ vite:
+ optional: true
+
vue@3.5.24:
resolution: {integrity: sha512-uTHDOpVQTMjcGgrqFPSb8iO2m1DUvo+WbGqoXQz8Y1CeBYQ0FXf2z1gLRaBtHjlRz7zZUBHxjVB5VTLzYkvftg==}
peerDependencies:
@@ -3675,6 +3796,10 @@ snapshots:
'@babel/helper-globals@7.28.0': {}
+ '@babel/helper-module-imports@7.18.6':
+ dependencies:
+ '@babel/types': 7.28.5
+
'@babel/helper-module-imports@7.27.1':
dependencies:
'@babel/traverse': 7.28.4
@@ -3693,6 +3818,8 @@ snapshots:
'@babel/helper-plugin-utils@7.27.1': {}
+ '@babel/helper-plugin-utils@7.28.6': {}
+
'@babel/helper-string-parser@7.27.1': {}
'@babel/helper-validator-identifier@7.27.1': {}
@@ -3714,6 +3841,11 @@ snapshots:
dependencies:
'@babel/types': 7.28.5
+ '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.4)':
dependencies:
'@babel/core': 7.28.4
@@ -4953,6 +5085,22 @@ snapshots:
axobject-query@4.1.0: {}
+ babel-plugin-jsx-dom-expressions@0.40.5(@babel/core@7.28.4):
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-module-imports': 7.18.6
+ '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.4)
+ '@babel/types': 7.28.5
+ html-entities: 2.3.3
+ parse5: 7.3.0
+
+ babel-preset-solid@1.9.10(@babel/core@7.28.4)(solid-js@1.9.11):
+ dependencies:
+ '@babel/core': 7.28.4
+ babel-plugin-jsx-dom-expressions: 0.40.5(@babel/core@7.28.4)
+ optionalDependencies:
+ solid-js: 1.9.11
+
balanced-match@1.0.2: {}
baseline-browser-mapping@2.8.6: {}
@@ -5240,6 +5388,8 @@ snapshots:
entities@4.5.0: {}
+ entities@6.0.1: {}
+
error-ex@1.3.4:
dependencies:
is-arrayish: 0.2.1
@@ -5958,6 +6108,8 @@ snapshots:
dependencies:
lru-cache: 6.0.0
+ html-entities@2.3.3: {}
+
human-id@4.1.3: {}
human-signals@2.1.0: {}
@@ -6132,6 +6284,8 @@ snapshots:
call-bound: 1.0.4
get-intrinsic: 1.3.0
+ is-what@4.1.16: {}
+
is-windows@1.0.2: {}
isarray@2.0.5: {}
@@ -6346,6 +6500,10 @@ snapshots:
type-fest: 0.18.1
yargs-parser: 20.2.9
+ merge-anything@5.1.7:
+ dependencies:
+ is-what: 4.1.16
+
merge-stream@2.0.0: {}
merge2@1.4.1: {}
@@ -6566,6 +6724,10 @@ snapshots:
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
+ parse5@7.3.0:
+ dependencies:
+ entities: 6.0.1
+
path-exists@4.0.0: {}
path-is-absolute@1.0.1: {}
@@ -6830,6 +6992,12 @@ snapshots:
dependencies:
lru-cache: 6.0.0
+ seroval-plugins@1.5.1(seroval@1.5.1):
+ dependencies:
+ seroval: 1.5.1
+
+ seroval@1.5.1: {}
+
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
@@ -6897,6 +7065,21 @@ snapshots:
ansi-styles: 6.2.1
is-fullwidth-code-point: 4.0.0
+ solid-js@1.9.11:
+ dependencies:
+ csstype: 3.1.3
+ seroval: 1.5.1
+ seroval-plugins: 1.5.1(seroval@1.5.1)
+
+ solid-refresh@0.6.3(solid-js@1.9.11):
+ dependencies:
+ '@babel/generator': 7.28.3
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/types': 7.28.5
+ solid-js: 1.9.11
+ transitivePeerDependencies:
+ - supports-color
+
source-map-js@1.2.1: {}
source-map@0.8.0-beta.0:
@@ -7255,6 +7438,19 @@ snapshots:
spdx-correct: 3.2.0
spdx-expression-parse: 3.0.1
+ vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@20.5.1)(sass@1.93.0)(yaml@2.8.1)):
+ dependencies:
+ '@babel/core': 7.28.4
+ '@types/babel__core': 7.20.5
+ babel-preset-solid: 1.9.10(@babel/core@7.28.4)(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@20.5.1)(sass@1.93.0)(yaml@2.8.1)
+ vitefu: 1.1.2(vite@7.3.1(@types/node@20.5.1)(sass@1.93.0)(yaml@2.8.1))
+ transitivePeerDependencies:
+ - supports-color
+
vite@6.4.1(@types/node@20.5.1)(sass@1.93.0)(yaml@2.8.1):
dependencies:
esbuild: 0.25.10
@@ -7287,6 +7483,10 @@ snapshots:
optionalDependencies:
vite: 7.3.1(@types/node@20.5.1)(sass@1.93.0)(yaml@2.8.1)
+ vitefu@1.1.2(vite@7.3.1(@types/node@20.5.1)(sass@1.93.0)(yaml@2.8.1)):
+ optionalDependencies:
+ vite: 7.3.1(@types/node@20.5.1)(sass@1.93.0)(yaml@2.8.1)
+
vue@3.5.24(typescript@5.2.2):
dependencies:
'@vue/compiler-dom': 3.5.24