├── .editorconfig
├── .gitignore
├── .prettierrc
├── README.md
├── package.json
├── pnpm-lock.yaml
├── rollup.config.js
├── src
├── automutable.tsx
├── base.tsx
├── controls.tsx
├── index.ts
└── ui.tsx
└── tsconfig.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 | [*]
3 | charset = utf-8
4 | end_of_line = lf
5 | indent_style = tab
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.{js,ts,tsx,scss,json,css,cs}]
10 | indent_size = 3
11 |
12 | [*.{yml,yaml}]
13 | indent_style = space
14 | indent_size = 4
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "endOfLine": "lf",
3 | "printWidth": 110,
4 | "singleQuote": false,
5 | "semi": false,
6 | "useTabs": true,
7 | "trailingComma": "es5"
8 | }
9 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | `pnpm i -S solid-tweakpane solid-js`
2 |
3 | ## Without binding
4 | `initialValue` prop required in this case.
5 | ```tsx
6 |
7 | console.log(e.value)}
15 | />
16 | {
19 | // ...
20 | }}
21 | />
22 |
23 | ```
24 | ## With binding
25 | Currently it can be used with mutable.
26 | You need to place all elements into and provide target.
27 | Example:
28 |
29 | ```tsx
30 | const settings = createMutable({
31 | bool: false,
32 | current: 0.01,
33 | folder1: {
34 | bool: true,
35 | folder11: {
36 | number: 2,
37 | color: '#f05',
38 | },
39 | },
40 | })
41 |
42 |
43 | console.log('changed value test', e.value)}
49 | />
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
72 |
73 |
74 | ```
75 | 
76 |
77 | It's possible to automatically build Pane from mutable with ``:
78 |
79 | ```jsx
80 |
81 |
82 |
83 | ```
84 | 
85 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "solid-tweakpane",
3 | "version": "0.6.1",
4 | "type": "module",
5 | "description": "Solid components for Tweakpane library",
6 | "main": "./dist/cjs/index.js",
7 | "module": "./dist/es/index.js",
8 | "types": "./dist/index.d.ts",
9 | "exports": {
10 | "node": {
11 | "import": "./dist/es/index.js",
12 | "require": "./dist/cjs/index.js"
13 | },
14 | "import": "./dist/es/index.js",
15 | "require": "./dist/cjs/index.js",
16 | "types": "./dist/index.d.ts"
17 | },
18 | "files": [
19 | "./dist"
20 | ],
21 | "scripts": {
22 | "build": "rollup -c && tsc"
23 | },
24 | "keywords": [
25 | "solid",
26 | "tweakpane"
27 | ],
28 | "author": "foxpro tuningiposadka@gmail.com",
29 | "license": "ISC",
30 | "homepage": "https://github.com/MrFoxPro/solid-tweakpane",
31 | "bugs": {
32 | "url": "https://github.com/MrFoxPro/solid-tweakpane/issues"
33 | },
34 | "devDependencies": {
35 | "@babel/core": "^7.26.10",
36 | "@babel/preset-typescript": "^7.26.0",
37 | "@rollup/plugin-babel": "^6.0.4",
38 | "@rollup/plugin-commonjs": "^28.0.3",
39 | "@rollup/plugin-node-resolve": "^16.0.1",
40 | "@rollup/plugin-strip": "^3.0.4",
41 | "@types/ts-nameof": "^4.2.5",
42 | "babel-plugin-ts-nameof": "^4.2.1",
43 | "babel-preset-solid": "^1.9.5",
44 | "babel-preset-typescript": "7.0.0-alpha.19",
45 | "prettier": "^3.5.3",
46 | "rollup": "^4.35.0",
47 | "rollup-plugin-delete": "^3.0.1",
48 | "solid-js": "^1.5.4",
49 | "typescript": "^5.8.2"
50 | },
51 | "dependencies": {
52 | "@tweakpane/core": "^1.1.0",
53 | "tweakpane": "^3.1.0"
54 | },
55 | "peerDependencies": {
56 | "solid-js": "^1.5.4"
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | '@tweakpane/core':
9 | specifier: ^1.1.0
10 | version: 1.1.0
11 | tweakpane:
12 | specifier: ^3.1.0
13 | version: 3.1.0
14 |
15 | devDependencies:
16 | '@babel/core':
17 | specifier: ^7.26.10
18 | version: 7.26.10
19 | '@babel/preset-typescript':
20 | specifier: ^7.26.0
21 | version: 7.26.0(@babel/core@7.26.10)
22 | '@rollup/plugin-babel':
23 | specifier: ^6.0.4
24 | version: 6.0.4(@babel/core@7.26.10)(rollup@4.35.0)
25 | '@rollup/plugin-commonjs':
26 | specifier: ^28.0.3
27 | version: 28.0.3(rollup@4.35.0)
28 | '@rollup/plugin-node-resolve':
29 | specifier: ^16.0.1
30 | version: 16.0.1(rollup@4.35.0)
31 | '@rollup/plugin-strip':
32 | specifier: ^3.0.4
33 | version: 3.0.4(rollup@4.35.0)
34 | '@types/ts-nameof':
35 | specifier: ^4.2.5
36 | version: 4.2.5
37 | babel-plugin-ts-nameof:
38 | specifier: ^4.2.1
39 | version: 4.2.1
40 | babel-preset-solid:
41 | specifier: ^1.9.5
42 | version: 1.9.5(@babel/core@7.26.10)
43 | babel-preset-typescript:
44 | specifier: 7.0.0-alpha.19
45 | version: 7.0.0-alpha.19
46 | prettier:
47 | specifier: ^3.5.3
48 | version: 3.5.3
49 | rollup:
50 | specifier: ^4.35.0
51 | version: 4.35.0
52 | rollup-plugin-delete:
53 | specifier: ^3.0.1
54 | version: 3.0.1(rollup@4.35.0)
55 | solid-js:
56 | specifier: ^1.5.4
57 | version: 1.5.7
58 | typescript:
59 | specifier: ^5.8.2
60 | version: 5.8.2
61 |
62 | packages:
63 |
64 | /@ampproject/remapping@2.3.0:
65 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
66 | engines: {node: '>=6.0.0'}
67 | dependencies:
68 | '@jridgewell/gen-mapping': 0.3.8
69 | '@jridgewell/trace-mapping': 0.3.25
70 | dev: true
71 |
72 | /@babel/code-frame@7.26.2:
73 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
74 | engines: {node: '>=6.9.0'}
75 | dependencies:
76 | '@babel/helper-validator-identifier': 7.25.9
77 | js-tokens: 4.0.0
78 | picocolors: 1.1.1
79 | dev: true
80 |
81 | /@babel/compat-data@7.26.8:
82 | resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==}
83 | engines: {node: '>=6.9.0'}
84 | dev: true
85 |
86 | /@babel/core@7.26.10:
87 | resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==}
88 | engines: {node: '>=6.9.0'}
89 | dependencies:
90 | '@ampproject/remapping': 2.3.0
91 | '@babel/code-frame': 7.26.2
92 | '@babel/generator': 7.26.10
93 | '@babel/helper-compilation-targets': 7.26.5
94 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
95 | '@babel/helpers': 7.26.10
96 | '@babel/parser': 7.26.10
97 | '@babel/template': 7.26.9
98 | '@babel/traverse': 7.26.10
99 | '@babel/types': 7.26.10
100 | convert-source-map: 2.0.0
101 | debug: 4.4.0
102 | gensync: 1.0.0-beta.2
103 | json5: 2.2.3
104 | semver: 6.3.1
105 | transitivePeerDependencies:
106 | - supports-color
107 | dev: true
108 |
109 | /@babel/generator@7.26.10:
110 | resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==}
111 | engines: {node: '>=6.9.0'}
112 | dependencies:
113 | '@babel/parser': 7.26.10
114 | '@babel/types': 7.26.10
115 | '@jridgewell/gen-mapping': 0.3.8
116 | '@jridgewell/trace-mapping': 0.3.25
117 | jsesc: 3.1.0
118 | dev: true
119 |
120 | /@babel/helper-annotate-as-pure@7.25.9:
121 | resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==}
122 | engines: {node: '>=6.9.0'}
123 | dependencies:
124 | '@babel/types': 7.26.10
125 | dev: true
126 |
127 | /@babel/helper-compilation-targets@7.26.5:
128 | resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==}
129 | engines: {node: '>=6.9.0'}
130 | dependencies:
131 | '@babel/compat-data': 7.26.8
132 | '@babel/helper-validator-option': 7.25.9
133 | browserslist: 4.24.4
134 | lru-cache: 5.1.1
135 | semver: 6.3.1
136 | dev: true
137 |
138 | /@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.26.10):
139 | resolution: {integrity: sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==}
140 | engines: {node: '>=6.9.0'}
141 | peerDependencies:
142 | '@babel/core': ^7.0.0
143 | dependencies:
144 | '@babel/core': 7.26.10
145 | '@babel/helper-annotate-as-pure': 7.25.9
146 | '@babel/helper-member-expression-to-functions': 7.25.9
147 | '@babel/helper-optimise-call-expression': 7.25.9
148 | '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10)
149 | '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
150 | '@babel/traverse': 7.26.10
151 | semver: 6.3.1
152 | transitivePeerDependencies:
153 | - supports-color
154 | dev: true
155 |
156 | /@babel/helper-member-expression-to-functions@7.25.9:
157 | resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==}
158 | engines: {node: '>=6.9.0'}
159 | dependencies:
160 | '@babel/traverse': 7.26.10
161 | '@babel/types': 7.26.10
162 | transitivePeerDependencies:
163 | - supports-color
164 | dev: true
165 |
166 | /@babel/helper-module-imports@7.18.6:
167 | resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
168 | engines: {node: '>=6.9.0'}
169 | dependencies:
170 | '@babel/types': 7.26.10
171 | dev: true
172 |
173 | /@babel/helper-module-imports@7.25.9:
174 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
175 | engines: {node: '>=6.9.0'}
176 | dependencies:
177 | '@babel/traverse': 7.26.10
178 | '@babel/types': 7.26.10
179 | transitivePeerDependencies:
180 | - supports-color
181 | dev: true
182 |
183 | /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10):
184 | resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
185 | engines: {node: '>=6.9.0'}
186 | peerDependencies:
187 | '@babel/core': ^7.0.0
188 | dependencies:
189 | '@babel/core': 7.26.10
190 | '@babel/helper-module-imports': 7.25.9
191 | '@babel/helper-validator-identifier': 7.25.9
192 | '@babel/traverse': 7.26.10
193 | transitivePeerDependencies:
194 | - supports-color
195 | dev: true
196 |
197 | /@babel/helper-optimise-call-expression@7.25.9:
198 | resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==}
199 | engines: {node: '>=6.9.0'}
200 | dependencies:
201 | '@babel/types': 7.26.10
202 | dev: true
203 |
204 | /@babel/helper-plugin-utils@7.26.5:
205 | resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==}
206 | engines: {node: '>=6.9.0'}
207 | dev: true
208 |
209 | /@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10):
210 | resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==}
211 | engines: {node: '>=6.9.0'}
212 | peerDependencies:
213 | '@babel/core': ^7.0.0
214 | dependencies:
215 | '@babel/core': 7.26.10
216 | '@babel/helper-member-expression-to-functions': 7.25.9
217 | '@babel/helper-optimise-call-expression': 7.25.9
218 | '@babel/traverse': 7.26.10
219 | transitivePeerDependencies:
220 | - supports-color
221 | dev: true
222 |
223 | /@babel/helper-skip-transparent-expression-wrappers@7.25.9:
224 | resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==}
225 | engines: {node: '>=6.9.0'}
226 | dependencies:
227 | '@babel/traverse': 7.26.10
228 | '@babel/types': 7.26.10
229 | transitivePeerDependencies:
230 | - supports-color
231 | dev: true
232 |
233 | /@babel/helper-string-parser@7.25.9:
234 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
235 | engines: {node: '>=6.9.0'}
236 | dev: true
237 |
238 | /@babel/helper-validator-identifier@7.25.9:
239 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
240 | engines: {node: '>=6.9.0'}
241 | dev: true
242 |
243 | /@babel/helper-validator-option@7.25.9:
244 | resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
245 | engines: {node: '>=6.9.0'}
246 | dev: true
247 |
248 | /@babel/helpers@7.26.10:
249 | resolution: {integrity: sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==}
250 | engines: {node: '>=6.9.0'}
251 | dependencies:
252 | '@babel/template': 7.26.9
253 | '@babel/types': 7.26.10
254 | dev: true
255 |
256 | /@babel/parser@7.26.10:
257 | resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==}
258 | engines: {node: '>=6.0.0'}
259 | hasBin: true
260 | dependencies:
261 | '@babel/types': 7.26.10
262 | dev: true
263 |
264 | /@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10):
265 | resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==}
266 | engines: {node: '>=6.9.0'}
267 | peerDependencies:
268 | '@babel/core': ^7.0.0-0
269 | dependencies:
270 | '@babel/core': 7.26.10
271 | '@babel/helper-plugin-utils': 7.26.5
272 | dev: true
273 |
274 | /@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10):
275 | resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==}
276 | engines: {node: '>=6.9.0'}
277 | peerDependencies:
278 | '@babel/core': ^7.0.0-0
279 | dependencies:
280 | '@babel/core': 7.26.10
281 | '@babel/helper-plugin-utils': 7.26.5
282 | dev: true
283 |
284 | /@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.10):
285 | resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==}
286 | engines: {node: '>=6.9.0'}
287 | peerDependencies:
288 | '@babel/core': ^7.0.0-0
289 | dependencies:
290 | '@babel/core': 7.26.10
291 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
292 | '@babel/helper-plugin-utils': 7.26.5
293 | transitivePeerDependencies:
294 | - supports-color
295 | dev: true
296 |
297 | /@babel/plugin-transform-typescript@7.26.8(@babel/core@7.26.10):
298 | resolution: {integrity: sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==}
299 | engines: {node: '>=6.9.0'}
300 | peerDependencies:
301 | '@babel/core': ^7.0.0-0
302 | dependencies:
303 | '@babel/core': 7.26.10
304 | '@babel/helper-annotate-as-pure': 7.25.9
305 | '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.10)
306 | '@babel/helper-plugin-utils': 7.26.5
307 | '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
308 | '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10)
309 | transitivePeerDependencies:
310 | - supports-color
311 | dev: true
312 |
313 | /@babel/preset-typescript@7.26.0(@babel/core@7.26.10):
314 | resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==}
315 | engines: {node: '>=6.9.0'}
316 | peerDependencies:
317 | '@babel/core': ^7.0.0-0
318 | dependencies:
319 | '@babel/core': 7.26.10
320 | '@babel/helper-plugin-utils': 7.26.5
321 | '@babel/helper-validator-option': 7.25.9
322 | '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10)
323 | '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10)
324 | '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.10)
325 | transitivePeerDependencies:
326 | - supports-color
327 | dev: true
328 |
329 | /@babel/template@7.26.9:
330 | resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==}
331 | engines: {node: '>=6.9.0'}
332 | dependencies:
333 | '@babel/code-frame': 7.26.2
334 | '@babel/parser': 7.26.10
335 | '@babel/types': 7.26.10
336 | dev: true
337 |
338 | /@babel/traverse@7.26.10:
339 | resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==}
340 | engines: {node: '>=6.9.0'}
341 | dependencies:
342 | '@babel/code-frame': 7.26.2
343 | '@babel/generator': 7.26.10
344 | '@babel/parser': 7.26.10
345 | '@babel/template': 7.26.9
346 | '@babel/types': 7.26.10
347 | debug: 4.4.0
348 | globals: 11.12.0
349 | transitivePeerDependencies:
350 | - supports-color
351 | dev: true
352 |
353 | /@babel/types@7.26.10:
354 | resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==}
355 | engines: {node: '>=6.9.0'}
356 | dependencies:
357 | '@babel/helper-string-parser': 7.25.9
358 | '@babel/helper-validator-identifier': 7.25.9
359 | dev: true
360 |
361 | /@jridgewell/gen-mapping@0.3.8:
362 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
363 | engines: {node: '>=6.0.0'}
364 | dependencies:
365 | '@jridgewell/set-array': 1.2.1
366 | '@jridgewell/sourcemap-codec': 1.5.0
367 | '@jridgewell/trace-mapping': 0.3.25
368 | dev: true
369 |
370 | /@jridgewell/resolve-uri@3.1.2:
371 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
372 | engines: {node: '>=6.0.0'}
373 | dev: true
374 |
375 | /@jridgewell/set-array@1.2.1:
376 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
377 | engines: {node: '>=6.0.0'}
378 | dev: true
379 |
380 | /@jridgewell/sourcemap-codec@1.5.0:
381 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
382 | dev: true
383 |
384 | /@jridgewell/trace-mapping@0.3.25:
385 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
386 | dependencies:
387 | '@jridgewell/resolve-uri': 3.1.2
388 | '@jridgewell/sourcemap-codec': 1.5.0
389 | dev: true
390 |
391 | /@nodelib/fs.scandir@2.1.5:
392 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
393 | engines: {node: '>= 8'}
394 | dependencies:
395 | '@nodelib/fs.stat': 2.0.5
396 | run-parallel: 1.2.0
397 | dev: true
398 |
399 | /@nodelib/fs.stat@2.0.5:
400 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
401 | engines: {node: '>= 8'}
402 | dev: true
403 |
404 | /@nodelib/fs.walk@1.2.8:
405 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
406 | engines: {node: '>= 8'}
407 | dependencies:
408 | '@nodelib/fs.scandir': 2.1.5
409 | fastq: 1.19.1
410 | dev: true
411 |
412 | /@rollup/plugin-babel@6.0.4(@babel/core@7.26.10)(rollup@4.35.0):
413 | resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==}
414 | engines: {node: '>=14.0.0'}
415 | peerDependencies:
416 | '@babel/core': ^7.0.0
417 | '@types/babel__core': ^7.1.9
418 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
419 | peerDependenciesMeta:
420 | '@types/babel__core':
421 | optional: true
422 | rollup:
423 | optional: true
424 | dependencies:
425 | '@babel/core': 7.26.10
426 | '@babel/helper-module-imports': 7.25.9
427 | '@rollup/pluginutils': 5.1.4(rollup@4.35.0)
428 | rollup: 4.35.0
429 | transitivePeerDependencies:
430 | - supports-color
431 | dev: true
432 |
433 | /@rollup/plugin-commonjs@28.0.3(rollup@4.35.0):
434 | resolution: {integrity: sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==}
435 | engines: {node: '>=16.0.0 || 14 >= 14.17'}
436 | peerDependencies:
437 | rollup: ^2.68.0||^3.0.0||^4.0.0
438 | peerDependenciesMeta:
439 | rollup:
440 | optional: true
441 | dependencies:
442 | '@rollup/pluginutils': 5.1.4(rollup@4.35.0)
443 | commondir: 1.0.1
444 | estree-walker: 2.0.2
445 | fdir: 6.4.3(picomatch@4.0.2)
446 | is-reference: 1.2.1
447 | magic-string: 0.30.17
448 | picomatch: 4.0.2
449 | rollup: 4.35.0
450 | dev: true
451 |
452 | /@rollup/plugin-node-resolve@16.0.1(rollup@4.35.0):
453 | resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==}
454 | engines: {node: '>=14.0.0'}
455 | peerDependencies:
456 | rollup: ^2.78.0||^3.0.0||^4.0.0
457 | peerDependenciesMeta:
458 | rollup:
459 | optional: true
460 | dependencies:
461 | '@rollup/pluginutils': 5.1.4(rollup@4.35.0)
462 | '@types/resolve': 1.20.2
463 | deepmerge: 4.3.1
464 | is-module: 1.0.0
465 | resolve: 1.22.10
466 | rollup: 4.35.0
467 | dev: true
468 |
469 | /@rollup/plugin-strip@3.0.4(rollup@4.35.0):
470 | resolution: {integrity: sha512-LDRV49ZaavxUo2YoKKMQjCxzCxugu1rCPQa0lDYBOWLj6vtzBMr8DcoJjsmg+s450RbKbe3qI9ZLaSO+O1oNbg==}
471 | engines: {node: '>=14.0.0'}
472 | peerDependencies:
473 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
474 | peerDependenciesMeta:
475 | rollup:
476 | optional: true
477 | dependencies:
478 | '@rollup/pluginutils': 5.1.4(rollup@4.35.0)
479 | estree-walker: 2.0.2
480 | magic-string: 0.30.17
481 | rollup: 4.35.0
482 | dev: true
483 |
484 | /@rollup/pluginutils@5.1.4(rollup@4.35.0):
485 | resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
486 | engines: {node: '>=14.0.0'}
487 | peerDependencies:
488 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
489 | peerDependenciesMeta:
490 | rollup:
491 | optional: true
492 | dependencies:
493 | '@types/estree': 1.0.6
494 | estree-walker: 2.0.2
495 | picomatch: 4.0.2
496 | rollup: 4.35.0
497 | dev: true
498 |
499 | /@rollup/rollup-android-arm-eabi@4.35.0:
500 | resolution: {integrity: sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==}
501 | cpu: [arm]
502 | os: [android]
503 | requiresBuild: true
504 | dev: true
505 | optional: true
506 |
507 | /@rollup/rollup-android-arm64@4.35.0:
508 | resolution: {integrity: sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==}
509 | cpu: [arm64]
510 | os: [android]
511 | requiresBuild: true
512 | dev: true
513 | optional: true
514 |
515 | /@rollup/rollup-darwin-arm64@4.35.0:
516 | resolution: {integrity: sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==}
517 | cpu: [arm64]
518 | os: [darwin]
519 | requiresBuild: true
520 | dev: true
521 | optional: true
522 |
523 | /@rollup/rollup-darwin-x64@4.35.0:
524 | resolution: {integrity: sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==}
525 | cpu: [x64]
526 | os: [darwin]
527 | requiresBuild: true
528 | dev: true
529 | optional: true
530 |
531 | /@rollup/rollup-freebsd-arm64@4.35.0:
532 | resolution: {integrity: sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==}
533 | cpu: [arm64]
534 | os: [freebsd]
535 | requiresBuild: true
536 | dev: true
537 | optional: true
538 |
539 | /@rollup/rollup-freebsd-x64@4.35.0:
540 | resolution: {integrity: sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==}
541 | cpu: [x64]
542 | os: [freebsd]
543 | requiresBuild: true
544 | dev: true
545 | optional: true
546 |
547 | /@rollup/rollup-linux-arm-gnueabihf@4.35.0:
548 | resolution: {integrity: sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==}
549 | cpu: [arm]
550 | os: [linux]
551 | requiresBuild: true
552 | dev: true
553 | optional: true
554 |
555 | /@rollup/rollup-linux-arm-musleabihf@4.35.0:
556 | resolution: {integrity: sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==}
557 | cpu: [arm]
558 | os: [linux]
559 | requiresBuild: true
560 | dev: true
561 | optional: true
562 |
563 | /@rollup/rollup-linux-arm64-gnu@4.35.0:
564 | resolution: {integrity: sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==}
565 | cpu: [arm64]
566 | os: [linux]
567 | requiresBuild: true
568 | dev: true
569 | optional: true
570 |
571 | /@rollup/rollup-linux-arm64-musl@4.35.0:
572 | resolution: {integrity: sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==}
573 | cpu: [arm64]
574 | os: [linux]
575 | requiresBuild: true
576 | dev: true
577 | optional: true
578 |
579 | /@rollup/rollup-linux-loongarch64-gnu@4.35.0:
580 | resolution: {integrity: sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==}
581 | cpu: [loong64]
582 | os: [linux]
583 | requiresBuild: true
584 | dev: true
585 | optional: true
586 |
587 | /@rollup/rollup-linux-powerpc64le-gnu@4.35.0:
588 | resolution: {integrity: sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==}
589 | cpu: [ppc64]
590 | os: [linux]
591 | requiresBuild: true
592 | dev: true
593 | optional: true
594 |
595 | /@rollup/rollup-linux-riscv64-gnu@4.35.0:
596 | resolution: {integrity: sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==}
597 | cpu: [riscv64]
598 | os: [linux]
599 | requiresBuild: true
600 | dev: true
601 | optional: true
602 |
603 | /@rollup/rollup-linux-s390x-gnu@4.35.0:
604 | resolution: {integrity: sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==}
605 | cpu: [s390x]
606 | os: [linux]
607 | requiresBuild: true
608 | dev: true
609 | optional: true
610 |
611 | /@rollup/rollup-linux-x64-gnu@4.35.0:
612 | resolution: {integrity: sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==}
613 | cpu: [x64]
614 | os: [linux]
615 | requiresBuild: true
616 | dev: true
617 | optional: true
618 |
619 | /@rollup/rollup-linux-x64-musl@4.35.0:
620 | resolution: {integrity: sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==}
621 | cpu: [x64]
622 | os: [linux]
623 | requiresBuild: true
624 | dev: true
625 | optional: true
626 |
627 | /@rollup/rollup-win32-arm64-msvc@4.35.0:
628 | resolution: {integrity: sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==}
629 | cpu: [arm64]
630 | os: [win32]
631 | requiresBuild: true
632 | dev: true
633 | optional: true
634 |
635 | /@rollup/rollup-win32-ia32-msvc@4.35.0:
636 | resolution: {integrity: sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==}
637 | cpu: [ia32]
638 | os: [win32]
639 | requiresBuild: true
640 | dev: true
641 | optional: true
642 |
643 | /@rollup/rollup-win32-x64-msvc@4.35.0:
644 | resolution: {integrity: sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==}
645 | cpu: [x64]
646 | os: [win32]
647 | requiresBuild: true
648 | dev: true
649 | optional: true
650 |
651 | /@sindresorhus/merge-streams@2.3.0:
652 | resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==}
653 | engines: {node: '>=18'}
654 | dev: true
655 |
656 | /@ts-nameof/common@4.2.1:
657 | resolution: {integrity: sha512-bWwYOFTTd6Nq7RUqJalIii1su3OyR+N1W0smp5PzHGUVycHuJ7MRiyCQrWgMt1lbbp3GY6cvCttm7Zo5E7A1xQ==}
658 | dev: true
659 |
660 | /@ts-nameof/transforms-babel@4.2.1:
661 | resolution: {integrity: sha512-4BG5+55JXI3bLzoEqHKPQm5t4JgK2Ae1chAD7w5jDdMI8j1mWqVeonMjNMNIm28dMYs41Qvep25/5hpg24JyOw==}
662 | dependencies:
663 | '@ts-nameof/common': 4.2.1
664 | '@ts-nameof/transforms-common': 4.2.1
665 | dev: true
666 |
667 | /@ts-nameof/transforms-common@4.2.1:
668 | resolution: {integrity: sha512-mg6nkkHqNlKU1B15pEtiikSKadJSOxFFWpi7tEVB7Yhjx0PhoTcSe7oxK0fXHZGeoTGF2SMZjmCsGnbtfcgk6w==}
669 | dependencies:
670 | '@ts-nameof/common': 4.2.1
671 | dev: true
672 |
673 | /@tweakpane/core@1.1.0:
674 | resolution: {integrity: sha512-vbbiQb+aoFI13lIbE7DJvhHZVE1YlUpGoaAamSpU6wLp2jA3VowS1wfRJBBB8IBCYm7nF6ULl7zfJKxl1XdyfA==}
675 | dev: false
676 |
677 | /@types/estree@1.0.6:
678 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
679 | dev: true
680 |
681 | /@types/resolve@1.20.2:
682 | resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
683 | dev: true
684 |
685 | /@types/ts-nameof@4.2.5:
686 | resolution: {integrity: sha512-bdJP6fHAfxdjQYeIrWEPOegSkSR3uOwuDVZmzTR2ueypQdyhrkh8GlbSnM6wi4Qn6RxeOvFanyltT1T6H4Wccg==}
687 | dev: true
688 |
689 | /babel-plugin-jsx-dom-expressions@0.39.7(@babel/core@7.26.10):
690 | resolution: {integrity: sha512-8GzVmFla7jaTNWW8W+lTMl9YGva4/06CtwJjySnkYtt8G1v9weCzc2SuF1DfrudcCNb2Doetc1FRg33swBYZCA==}
691 | peerDependencies:
692 | '@babel/core': ^7.20.12
693 | dependencies:
694 | '@babel/core': 7.26.10
695 | '@babel/helper-module-imports': 7.18.6
696 | '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10)
697 | '@babel/types': 7.26.10
698 | html-entities: 2.3.3
699 | parse5: 7.2.1
700 | validate-html-nesting: 1.2.2
701 | dev: true
702 |
703 | /babel-plugin-syntax-object-rest-spread@7.0.0-alpha.19:
704 | resolution: {integrity: sha512-Jo9wXmU9AtufOFPdQpedc+j7Ck5okGYsK0zkk2NZNae61SAtuMF5M3aRUeZusrssPqWC32pOiBokbApIFHdlXw==}
705 | dev: true
706 |
707 | /babel-plugin-syntax-typescript@7.0.0-alpha.19:
708 | resolution: {integrity: sha512-jLuaWfoQsVr8/hmZtWB+86tZ5jYmOYV6kq70EkSUT7RR+gfeYOExS0FjObbbp+WExZNpBaRZvlyikNk3hCQGeQ==}
709 | dev: true
710 |
711 | /babel-plugin-transform-typescript@7.0.0-alpha.19:
712 | resolution: {integrity: sha512-OtkOYcYRffmC38/UjDZn2cvM2qarqDT748TbSJtVpNb7EvDLQcfPn9+0adk8oqmhc0lk+Ldy/2daGMNMxW0vuQ==}
713 | dependencies:
714 | babel-plugin-syntax-typescript: 7.0.0-alpha.19
715 | dev: true
716 |
717 | /babel-plugin-ts-nameof@4.2.1:
718 | resolution: {integrity: sha512-otoDlZLYyc3SzwDWYYtseeMnfp2V5YZPrCqKpo2aqyi56AvszpFfVrrj9+d24Ma/c0gtLgtEhaHgGZ6wLLVa3A==}
719 | dependencies:
720 | '@ts-nameof/transforms-babel': 4.2.1
721 | dev: true
722 |
723 | /babel-preset-solid@1.9.5(@babel/core@7.26.10):
724 | resolution: {integrity: sha512-85I3osODJ1LvZbv8wFozROV1vXq32BubqHXAGu73A//TRs3NLI1OFP83AQBUTSQHwgZQmARjHlJciym3we+V+w==}
725 | peerDependencies:
726 | '@babel/core': ^7.0.0
727 | dependencies:
728 | '@babel/core': 7.26.10
729 | babel-plugin-jsx-dom-expressions: 0.39.7(@babel/core@7.26.10)
730 | dev: true
731 |
732 | /babel-preset-typescript@7.0.0-alpha.19:
733 | resolution: {integrity: sha512-2VGIgn58ohmVXhc+qAx0OsihQHQm5R+Y1Mu7bu98HbCJtR/CzEdZs8qCtPb1XmYKF8XRNvZQge44dPTVimI2/w==}
734 | dependencies:
735 | babel-plugin-syntax-object-rest-spread: 7.0.0-alpha.19
736 | babel-plugin-transform-typescript: 7.0.0-alpha.19
737 | dev: true
738 |
739 | /braces@3.0.3:
740 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
741 | engines: {node: '>=8'}
742 | dependencies:
743 | fill-range: 7.1.1
744 | dev: true
745 |
746 | /browserslist@4.24.4:
747 | resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
748 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
749 | hasBin: true
750 | dependencies:
751 | caniuse-lite: 1.0.30001705
752 | electron-to-chromium: 1.5.119
753 | node-releases: 2.0.19
754 | update-browserslist-db: 1.1.3(browserslist@4.24.4)
755 | dev: true
756 |
757 | /caniuse-lite@1.0.30001705:
758 | resolution: {integrity: sha512-S0uyMMiYvA7CxNgomYBwwwPUnWzFD83f3B1ce5jHUfHTH//QL6hHsreI8RVC5606R4ssqravelYO5TU6t8sEyg==}
759 | dev: true
760 |
761 | /commondir@1.0.1:
762 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
763 | dev: true
764 |
765 | /convert-source-map@2.0.0:
766 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
767 | dev: true
768 |
769 | /csstype@3.1.1:
770 | resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
771 | dev: true
772 |
773 | /debug@4.4.0:
774 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
775 | engines: {node: '>=6.0'}
776 | peerDependencies:
777 | supports-color: '*'
778 | peerDependenciesMeta:
779 | supports-color:
780 | optional: true
781 | dependencies:
782 | ms: 2.1.3
783 | dev: true
784 |
785 | /deepmerge@4.3.1:
786 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
787 | engines: {node: '>=0.10.0'}
788 | dev: true
789 |
790 | /del@8.0.0:
791 | resolution: {integrity: sha512-R6ep6JJ+eOBZsBr9esiNN1gxFbZE4Q2cULkUSFumGYecAiS6qodDvcPx/sFuWHMNul7DWmrtoEOpYSm7o6tbSA==}
792 | engines: {node: '>=18'}
793 | dependencies:
794 | globby: 14.1.0
795 | is-glob: 4.0.3
796 | is-path-cwd: 3.0.0
797 | is-path-inside: 4.0.0
798 | p-map: 7.0.3
799 | slash: 5.1.0
800 | dev: true
801 |
802 | /electron-to-chromium@1.5.119:
803 | resolution: {integrity: sha512-Ku4NMzUjz3e3Vweh7PhApPrZSS4fyiCIbcIrG9eKrriYVLmbMepETR/v6SU7xPm98QTqMSYiCwfO89QNjXLkbQ==}
804 | dev: true
805 |
806 | /entities@4.5.0:
807 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
808 | engines: {node: '>=0.12'}
809 | dev: true
810 |
811 | /escalade@3.2.0:
812 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
813 | engines: {node: '>=6'}
814 | dev: true
815 |
816 | /estree-walker@2.0.2:
817 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
818 | dev: true
819 |
820 | /fast-glob@3.3.3:
821 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
822 | engines: {node: '>=8.6.0'}
823 | dependencies:
824 | '@nodelib/fs.stat': 2.0.5
825 | '@nodelib/fs.walk': 1.2.8
826 | glob-parent: 5.1.2
827 | merge2: 1.4.1
828 | micromatch: 4.0.8
829 | dev: true
830 |
831 | /fastq@1.19.1:
832 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
833 | dependencies:
834 | reusify: 1.1.0
835 | dev: true
836 |
837 | /fdir@6.4.3(picomatch@4.0.2):
838 | resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
839 | peerDependencies:
840 | picomatch: ^3 || ^4
841 | peerDependenciesMeta:
842 | picomatch:
843 | optional: true
844 | dependencies:
845 | picomatch: 4.0.2
846 | dev: true
847 |
848 | /fill-range@7.1.1:
849 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
850 | engines: {node: '>=8'}
851 | dependencies:
852 | to-regex-range: 5.0.1
853 | dev: true
854 |
855 | /fsevents@2.3.3:
856 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
857 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
858 | os: [darwin]
859 | requiresBuild: true
860 | dev: true
861 | optional: true
862 |
863 | /function-bind@1.1.2:
864 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
865 | dev: true
866 |
867 | /gensync@1.0.0-beta.2:
868 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
869 | engines: {node: '>=6.9.0'}
870 | dev: true
871 |
872 | /glob-parent@5.1.2:
873 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
874 | engines: {node: '>= 6'}
875 | dependencies:
876 | is-glob: 4.0.3
877 | dev: true
878 |
879 | /globals@11.12.0:
880 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
881 | engines: {node: '>=4'}
882 | dev: true
883 |
884 | /globby@14.1.0:
885 | resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==}
886 | engines: {node: '>=18'}
887 | dependencies:
888 | '@sindresorhus/merge-streams': 2.3.0
889 | fast-glob: 3.3.3
890 | ignore: 7.0.3
891 | path-type: 6.0.0
892 | slash: 5.1.0
893 | unicorn-magic: 0.3.0
894 | dev: true
895 |
896 | /hasown@2.0.2:
897 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
898 | engines: {node: '>= 0.4'}
899 | dependencies:
900 | function-bind: 1.1.2
901 | dev: true
902 |
903 | /html-entities@2.3.3:
904 | resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==}
905 | dev: true
906 |
907 | /ignore@7.0.3:
908 | resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==}
909 | engines: {node: '>= 4'}
910 | dev: true
911 |
912 | /is-core-module@2.16.1:
913 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
914 | engines: {node: '>= 0.4'}
915 | dependencies:
916 | hasown: 2.0.2
917 | dev: true
918 |
919 | /is-extglob@2.1.1:
920 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
921 | engines: {node: '>=0.10.0'}
922 | dev: true
923 |
924 | /is-glob@4.0.3:
925 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
926 | engines: {node: '>=0.10.0'}
927 | dependencies:
928 | is-extglob: 2.1.1
929 | dev: true
930 |
931 | /is-module@1.0.0:
932 | resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
933 | dev: true
934 |
935 | /is-number@7.0.0:
936 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
937 | engines: {node: '>=0.12.0'}
938 | dev: true
939 |
940 | /is-path-cwd@3.0.0:
941 | resolution: {integrity: sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==}
942 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
943 | dev: true
944 |
945 | /is-path-inside@4.0.0:
946 | resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==}
947 | engines: {node: '>=12'}
948 | dev: true
949 |
950 | /is-reference@1.2.1:
951 | resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
952 | dependencies:
953 | '@types/estree': 1.0.6
954 | dev: true
955 |
956 | /js-tokens@4.0.0:
957 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
958 | dev: true
959 |
960 | /jsesc@3.1.0:
961 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
962 | engines: {node: '>=6'}
963 | hasBin: true
964 | dev: true
965 |
966 | /json5@2.2.3:
967 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
968 | engines: {node: '>=6'}
969 | hasBin: true
970 | dev: true
971 |
972 | /lru-cache@5.1.1:
973 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
974 | dependencies:
975 | yallist: 3.1.1
976 | dev: true
977 |
978 | /magic-string@0.30.17:
979 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
980 | dependencies:
981 | '@jridgewell/sourcemap-codec': 1.5.0
982 | dev: true
983 |
984 | /merge2@1.4.1:
985 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
986 | engines: {node: '>= 8'}
987 | dev: true
988 |
989 | /micromatch@4.0.8:
990 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
991 | engines: {node: '>=8.6'}
992 | dependencies:
993 | braces: 3.0.3
994 | picomatch: 2.3.1
995 | dev: true
996 |
997 | /ms@2.1.3:
998 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
999 | dev: true
1000 |
1001 | /node-releases@2.0.19:
1002 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
1003 | dev: true
1004 |
1005 | /p-map@7.0.3:
1006 | resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==}
1007 | engines: {node: '>=18'}
1008 | dev: true
1009 |
1010 | /parse5@7.2.1:
1011 | resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==}
1012 | dependencies:
1013 | entities: 4.5.0
1014 | dev: true
1015 |
1016 | /path-parse@1.0.7:
1017 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1018 | dev: true
1019 |
1020 | /path-type@6.0.0:
1021 | resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==}
1022 | engines: {node: '>=18'}
1023 | dev: true
1024 |
1025 | /picocolors@1.1.1:
1026 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1027 | dev: true
1028 |
1029 | /picomatch@2.3.1:
1030 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1031 | engines: {node: '>=8.6'}
1032 | dev: true
1033 |
1034 | /picomatch@4.0.2:
1035 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
1036 | engines: {node: '>=12'}
1037 | dev: true
1038 |
1039 | /prettier@3.5.3:
1040 | resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==}
1041 | engines: {node: '>=14'}
1042 | hasBin: true
1043 | dev: true
1044 |
1045 | /queue-microtask@1.2.3:
1046 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1047 | dev: true
1048 |
1049 | /resolve@1.22.10:
1050 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
1051 | engines: {node: '>= 0.4'}
1052 | hasBin: true
1053 | dependencies:
1054 | is-core-module: 2.16.1
1055 | path-parse: 1.0.7
1056 | supports-preserve-symlinks-flag: 1.0.0
1057 | dev: true
1058 |
1059 | /reusify@1.1.0:
1060 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
1061 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1062 | dev: true
1063 |
1064 | /rollup-plugin-delete@3.0.1(rollup@4.35.0):
1065 | resolution: {integrity: sha512-4tyijMQFwSDLA04DAHwbI2TrRwPiRwAqBQ17dxyr9CgHeHXLdgk8IDVWHFWPrL3UZJWrAmHohQ2MgmVghQDrlg==}
1066 | engines: {node: '>=18'}
1067 | peerDependencies:
1068 | rollup: '*'
1069 | dependencies:
1070 | del: 8.0.0
1071 | rollup: 4.35.0
1072 | dev: true
1073 |
1074 | /rollup@4.35.0:
1075 | resolution: {integrity: sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==}
1076 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1077 | hasBin: true
1078 | dependencies:
1079 | '@types/estree': 1.0.6
1080 | optionalDependencies:
1081 | '@rollup/rollup-android-arm-eabi': 4.35.0
1082 | '@rollup/rollup-android-arm64': 4.35.0
1083 | '@rollup/rollup-darwin-arm64': 4.35.0
1084 | '@rollup/rollup-darwin-x64': 4.35.0
1085 | '@rollup/rollup-freebsd-arm64': 4.35.0
1086 | '@rollup/rollup-freebsd-x64': 4.35.0
1087 | '@rollup/rollup-linux-arm-gnueabihf': 4.35.0
1088 | '@rollup/rollup-linux-arm-musleabihf': 4.35.0
1089 | '@rollup/rollup-linux-arm64-gnu': 4.35.0
1090 | '@rollup/rollup-linux-arm64-musl': 4.35.0
1091 | '@rollup/rollup-linux-loongarch64-gnu': 4.35.0
1092 | '@rollup/rollup-linux-powerpc64le-gnu': 4.35.0
1093 | '@rollup/rollup-linux-riscv64-gnu': 4.35.0
1094 | '@rollup/rollup-linux-s390x-gnu': 4.35.0
1095 | '@rollup/rollup-linux-x64-gnu': 4.35.0
1096 | '@rollup/rollup-linux-x64-musl': 4.35.0
1097 | '@rollup/rollup-win32-arm64-msvc': 4.35.0
1098 | '@rollup/rollup-win32-ia32-msvc': 4.35.0
1099 | '@rollup/rollup-win32-x64-msvc': 4.35.0
1100 | fsevents: 2.3.3
1101 | dev: true
1102 |
1103 | /run-parallel@1.2.0:
1104 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1105 | dependencies:
1106 | queue-microtask: 1.2.3
1107 | dev: true
1108 |
1109 | /semver@6.3.1:
1110 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1111 | hasBin: true
1112 | dev: true
1113 |
1114 | /slash@5.1.0:
1115 | resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==}
1116 | engines: {node: '>=14.16'}
1117 | dev: true
1118 |
1119 | /solid-js@1.5.7:
1120 | resolution: {integrity: sha512-L1UuyMuZZARAwzXo5NZDhE6yxc14aqNbVOUoGzvlcxRZo1Cm4ExhPV0diEfwDyiKG/igqNNLkNurHkXiI5sVEg==}
1121 | dependencies:
1122 | csstype: 3.1.1
1123 | dev: true
1124 |
1125 | /supports-preserve-symlinks-flag@1.0.0:
1126 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1127 | engines: {node: '>= 0.4'}
1128 | dev: true
1129 |
1130 | /to-regex-range@5.0.1:
1131 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1132 | engines: {node: '>=8.0'}
1133 | dependencies:
1134 | is-number: 7.0.0
1135 | dev: true
1136 |
1137 | /tweakpane@3.1.0:
1138 | resolution: {integrity: sha512-PGAp/LPQdHwzL7/iAW4lV1p9iPQTti7YMjMWO48CoYjvZRS59RmgQnhEGzKzqST1JnmOYmQUjTe8bdhlZRJs5A==}
1139 | dev: false
1140 |
1141 | /typescript@5.8.2:
1142 | resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
1143 | engines: {node: '>=14.17'}
1144 | hasBin: true
1145 | dev: true
1146 |
1147 | /unicorn-magic@0.3.0:
1148 | resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
1149 | engines: {node: '>=18'}
1150 | dev: true
1151 |
1152 | /update-browserslist-db@1.1.3(browserslist@4.24.4):
1153 | resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
1154 | hasBin: true
1155 | peerDependencies:
1156 | browserslist: '>= 4.21.0'
1157 | dependencies:
1158 | browserslist: 4.24.4
1159 | escalade: 3.2.0
1160 | picocolors: 1.1.1
1161 | dev: true
1162 |
1163 | /validate-html-nesting@1.2.2:
1164 | resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==}
1165 | dev: true
1166 |
1167 | /yallist@3.1.1:
1168 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
1169 | dev: true
1170 |
--------------------------------------------------------------------------------
/rollup.config.js:
--------------------------------------------------------------------------------
1 | import babel from '@rollup/plugin-babel'
2 | import commonjs from '@rollup/plugin-commonjs'
3 | import nodeResolve from '@rollup/plugin-node-resolve'
4 | import strip from '@rollup/plugin-strip'
5 | import del from 'rollup-plugin-delete'
6 | const extensions = ['.ts', '.tsx', '.js']
7 |
8 | /** @type {import('rollup').OutputOptions} */
9 | const output = {}
10 | /** @type {import('rollup').RollupOptions} */
11 | const config = {
12 | input: 'src/index.ts',
13 | external: ['solid-js', 'tweakpane', '@tweakpane/core'],
14 | treeshake: 'smallest',
15 | output: [
16 | {
17 | ...output,
18 | format: 'es',
19 | dir: 'dist/es',
20 | },
21 | {
22 | ...output,
23 | format: 'cjs',
24 | dir: 'dist/cjs',
25 | },
26 | ],
27 | plugins: [
28 | nodeResolve({
29 | extensions,
30 | }),
31 | babel({
32 | extensions,
33 | babelHelpers: 'bundled',
34 | presets: ['solid', '@babel/preset-typescript'],
35 | plugins: ['babel-plugin-ts-nameof'],
36 | exclude: /node_modules\//,
37 | }),
38 | commonjs({
39 | extensions,
40 | }),
41 | strip({
42 | include: /\.(js|mjs|ts|tsx|jsx)/,
43 | }),
44 | del({ targets: 'dist/*' }),
45 | ],
46 | }
47 | export default config
48 |
--------------------------------------------------------------------------------
/src/automutable.tsx:
--------------------------------------------------------------------------------
1 | import { Bindable } from "@tweakpane/core"
2 | import { VoidProps, For, Switch, Match } from "solid-js"
3 | import { TWPFolder } from "./ui"
4 | import { TWPInput } from "./controls"
5 |
6 | export function TWPAutoMutable(props: VoidProps<{ target: Bindable }>) {
7 | return (
8 |
9 | {(key) => (
10 | }>
11 |
12 |
13 |
14 |
15 |
16 |
17 | )}
18 |
19 | )
20 | }
21 |
--------------------------------------------------------------------------------
/src/base.tsx:
--------------------------------------------------------------------------------
1 | import { createContext, FlowProps, onCleanup, splitProps, useContext } from "solid-js"
2 | import { Pane } from "tweakpane"
3 | import type { PaneConfig } from "tweakpane/dist/types/pane/pane-config"
4 | import type { Bindable, BladeApi } from "@tweakpane/core"
5 | import type { BladeRackApi } from "@tweakpane/core/dist/cjs/blade/common/api/blade-rack"
6 |
7 | export type TWPBaseProps | BladeRackApi> = {
8 | ref?: (e: T) => void
9 | }
10 | const TWPRootContext = createContext()
11 | export const useTWPRoot = () => useContext(TWPRootContext)
12 | export function TWPGroup(props: FlowProps<{ root: BladeRackApi }>) {
13 | return {props.children}
14 | }
15 |
16 | export function Tweakpane(props: FlowProps) {
17 | const [compProps, paneProps] = splitProps(props, ["children"])
18 | const pane = new Pane(paneProps)
19 | onCleanup(() => pane.dispose())
20 | return {compProps.children}
21 | }
22 |
23 | const TWPBindGroupContext = createContext()
24 | export const useTWPBingGroup = () => useContext(TWPBindGroupContext)
25 | export function TWPBindGroup(props: FlowProps<{ target: Bindable }>) {
26 | return {props.children}
27 | }
28 |
--------------------------------------------------------------------------------
/src/controls.tsx:
--------------------------------------------------------------------------------
1 | import { createEffect, on, onCleanup, JSX, VoidProps } from "solid-js"
2 | import { Tweakpane, TWPBaseProps, TWPBindGroup, useTWPBingGroup, useTWPRoot } from "./base"
3 | import type { Bindable } from "@tweakpane/core"
4 | import type { InputBindingApi, MonitorBindingApi, InputParams, MonitorParams } from "tweakpane"
5 | import type { BladeRackApi } from "@tweakpane/core/dist/cjs/blade/common/api/blade-rack"
6 |
7 | type AvailableAPI = InputBindingApi | MonitorBindingApi
8 | type TWPControlBaseProps = VoidProps &
9 | TWPBaseProps & {
10 | target?: Bindable
11 | key?: string
12 | initialValue?: any
13 | }
14 |
15 | type TWPControlFactory = (
16 | root: BladeRackApi,
17 | binding: Bindable,
18 | props: TProps
19 | ) => [AvailableAPI, JSX.Element?]
20 | function createTWPControl(
21 | initFn: TWPControlFactory
22 | ) {
23 | return function (props: TProps) {
24 | const root = useTWPRoot()
25 | if (!root) throw new Error(`Use tweakpane controls within <${nameof(Tweakpane)}>`)
26 | let binding = props.target ?? useTWPBingGroup()
27 | if (!binding && props.key) {
28 | throw new Error(
29 | `In case of usage with key, place it within <${nameof(
30 | TWPBindGroup
31 | )}> and provide target`
32 | )
33 | }
34 | if (binding && !Object.hasOwn(binding, props.key)) {
35 | throw new Error(`There is no key ${props.key} in binding ${binding}`)
36 | }
37 | if (!binding && !props.key) {
38 | if (!props.initialValue) {
39 | throw new Error(
40 | `In case of usage without target and key, provide ${nameof(
41 | props.initialValue
42 | )} prop`
43 | )
44 | }
45 | binding = { value: props.initialValue }
46 | props.key = "value"
47 | }
48 | const [comp, element] = initFn(root, binding, props)
49 | createEffect(
50 | on(
51 | () => binding[props.key],
52 | () => comp.refresh(),
53 | { defer: true }
54 | )
55 | )
56 | onCleanup(() => {
57 | if (!comp) return
58 | root.remove(comp)
59 | comp.dispose()
60 | })
61 | props.ref?.(comp)
62 | if (element) return element
63 | }
64 | }
65 |
66 | type TWPInputInputProps = {
67 | params?: InputParams
68 | onChange?: Parameters["on"]>[1]
69 | }
70 | export const TWPInput = createTWPControl((root, binding, props) => {
71 | const input = root.addInput(binding, props.key, props.params)
72 | props.onChange && input.on("change", props.onChange)
73 | return [input]
74 | })
75 |
76 | type TWPMonitorProps = {
77 | params?: MonitorParams
78 | onUpdate?: Parameters["on"]>[1]
79 | }
80 | export const TWPMonitor = createTWPControl((root, binding, props) => {
81 | const monitor = root.addMonitor(binding, props.key, props.params)
82 | props.onUpdate && monitor.on("update", props.onUpdate)
83 | return [monitor]
84 | })
85 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | export { Tweakpane, TWPBindGroup } from "./base"
2 | export * from "./ui"
3 | export * from "./controls"
4 | export * from "./automutable"
5 |
--------------------------------------------------------------------------------
/src/ui.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | ParentProps,
3 | splitProps,
4 | onCleanup,
5 | VoidProps,
6 | JSX,
7 | FlowProps,
8 | createEffect,
9 | createContext,
10 | useContext,
11 | onMount,
12 | } from "solid-js"
13 | import { Tweakpane, TWPBaseProps, TWPGroup, useTWPRoot } from "./base"
14 | import type { FolderApi, FolderParams, TabParams, SeparatorParams } from "tweakpane"
15 | import type { ButtonApi, SeparatorApi, TabApi, TabPageParams } from "@tweakpane/core"
16 | import type { BladeRackApi } from "@tweakpane/core/dist/cjs/blade/common/api/blade-rack"
17 |
18 | type AvailableAPI = FolderApi | ButtonApi | TabApi | SeparatorApi
19 | type TWPUIBaseProps = TWPBaseProps
20 | type TWPUIInitFn = (root: BladeRackApi, props: TProps) => [AvailableAPI, JSX.Element?]
21 |
22 | function createTWPUI(
23 | initFn: TWPUIInitFn
24 | ) {
25 | return function(props: TProps) {
26 | const root = useTWPRoot()
27 | if (!root) throw new Error(`Use tweakpane controls within <${nameof(Tweakpane)}>`)
28 | const [comp, element] = initFn(root, props)
29 | onCleanup(() => {
30 | if (!comp) return
31 | comp.dispose()
32 | root.remove(comp)
33 | })
34 | props.ref?.(comp)
35 | if (element) return element
36 | }
37 | }
38 | export const TWPFolder = createTWPUI>((root, props) => {
39 | const [compProps, folderProps] = splitProps(props, ["children"])
40 | const folder = root.addFolder(folderProps)
41 | return [folder, {compProps.children}]
42 | })
43 |
44 | type TWPButtonProps = {
45 | onClick?: Parameters[1]
46 | } & FolderParams
47 | export const TWPButton = createTWPUI((root, props) => {
48 | const button = root.addButton(props)
49 | props.onClick && button.on("click", props.onClick)
50 | createEffect(() => {
51 | button.title = props.title
52 | })
53 | return [button]
54 | })
55 |
56 | export const TWPSeparator = createTWPUI>((root, props) => {
57 | const separator = root.addSeparator(props)
58 | return [separator]
59 | })
60 |
61 | const TabContext = createContext()
62 | const useTab = () => useContext(TabContext)
63 | export const TWPTab = createTWPUI>>((root, props) => {
64 | const [compProps, tabProps] = splitProps(props, ["children"])
65 | const tab = root.addTab({ ...tabProps, pages: [{ title: "mock" }] })
66 | onMount(() => tab.removePage(0))
67 | return [tab, {compProps.children}]
68 | })
69 |
70 | export function TWPTabPage(props: ParentProps) {
71 | const root = useTab()
72 | if (!root) throw new Error(`Parent for <${nameof(TWPTabPage)}> should be <${nameof(TWPTab)}>`)
73 | const [compProps, pageProps] = splitProps(props, ["children"])
74 | const page = root.addPage(pageProps)
75 | createEffect(() => (page.title = props.title))
76 | onCleanup(() => {
77 | root.removePage(root.pages.indexOf(page))
78 | })
79 | return {compProps.children}
80 | }
81 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "emitDeclarationOnly": true,
4 | "declaration": true,
5 | "jsx": "preserve",
6 | "jsxImportSource": "solid-js",
7 | "sourceMap": false,
8 | "target": "ESNext",
9 | "module": "ESNext",
10 | "forceConsistentCasingInFileNames": true,
11 | "allowSyntheticDefaultImports": true,
12 | "moduleResolution": "Node",
13 | "outDir": "./dist",
14 | "skipDefaultLibCheck": true
15 | },
16 | "exclude": ["node_modules", "dist", "./src/example"],
17 | "include": ["./src"]
18 | }
19 |
--------------------------------------------------------------------------------