From 15fe0f1e9ce65ca7f50ce1c2784002389b606cc9 Mon Sep 17 00:00:00 2001 From: Florian Hell Date: Tue, 10 Mar 2026 08:35:41 +0100 Subject: [PATCH] Added solidjs integration with example --- apps/solid-example/index.html | 12 ++ apps/solid-example/package.json | 20 ++ apps/solid-example/src/App.tsx | 19 ++ apps/solid-example/src/main.tsx | 4 + apps/solid-example/tsconfig.json | 21 ++ apps/solid-example/vite.config.ts | 6 + packages/web-haptics/package.json | 14 +- packages/web-haptics/src/solid/index.ts | 1 + packages/web-haptics/src/solid/types.ts | 8 + .../web-haptics/src/solid/useWebHaptics.ts | 49 +++++ packages/web-haptics/tsup.config.ts | 13 ++ pnpm-lock.yaml | 200 ++++++++++++++++++ 12 files changed, 366 insertions(+), 1 deletion(-) create mode 100644 apps/solid-example/index.html create mode 100644 apps/solid-example/package.json create mode 100644 apps/solid-example/src/App.tsx create mode 100644 apps/solid-example/src/main.tsx create mode 100644 apps/solid-example/tsconfig.json create mode 100644 apps/solid-example/vite.config.ts create mode 100644 packages/web-haptics/src/solid/index.ts create mode 100644 packages/web-haptics/src/solid/types.ts create mode 100644 packages/web-haptics/src/solid/useWebHaptics.ts 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