state-in-url 6.2.0 → 6.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +47 -24
- package/package.json +47 -24
- package/skills/feature-state-hook/SKILL.md +11 -6
- package/skills/form-library-integration/SKILL.md +14 -10
- package/skills/input-handling/SKILL.md +11 -6
- package/skills/nextjs-ssr/SKILL.md +9 -4
- package/skills/react-router-remix-setup/SKILL.md +11 -6
- package/skills/shared-state-no-url/SKILL.md +14 -9
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "state-in-url",
|
|
3
|
-
"version": "6.2.
|
|
3
|
+
"version": "6.2.2",
|
|
4
4
|
"description": "Store state in URL as in object, types and structure are preserved, with TS validation. Same API as React.useState, wthout any hasssle or boilerplate. Next.js@14-15, react-router@6-7, and remix@2.",
|
|
5
5
|
"homepage": "https://state-in-url.dev",
|
|
6
6
|
"repository": {
|
|
@@ -95,17 +95,14 @@
|
|
|
95
95
|
"test:int": "wireit",
|
|
96
96
|
"test:int:ci": "wireit",
|
|
97
97
|
"test:exports": "pnpm run build && npx babel-node --extensions .js,.mjs,.ts,.mts --config-file ./babel.config.json -- ./packages/urlstate/exportsTest.ts",
|
|
98
|
-
"install:all": "pnpm install",
|
|
99
|
-
"install:ci": "pnpm install --frozen-lockfile",
|
|
100
98
|
"test": "wireit",
|
|
101
|
-
"tsc": "wireit",
|
|
102
99
|
"dev": "wireit",
|
|
103
100
|
"dev:lib": "wireit",
|
|
104
101
|
"dev:nextjs14": "wireit",
|
|
105
102
|
"dev:nextjs15": "wireit",
|
|
106
103
|
"dev:nextjs16": "wireit",
|
|
107
104
|
"dev:remix2": "wireit",
|
|
108
|
-
"
|
|
105
|
+
"tsc": "wireit",
|
|
109
106
|
"build": "wireit",
|
|
110
107
|
"build:demo": "wireit",
|
|
111
108
|
"start:demo": "wireit",
|
|
@@ -117,7 +114,12 @@
|
|
|
117
114
|
"start:ci": "wireit",
|
|
118
115
|
"kill-next": "wireit",
|
|
119
116
|
"kill-vite": "wireit",
|
|
117
|
+
"kill-remix": "wireit",
|
|
118
|
+
"kill-services": "wireit",
|
|
120
119
|
"kill": "wireit",
|
|
120
|
+
"bump": "npx standard-version --no-verify",
|
|
121
|
+
"install:all": "pnpm install",
|
|
122
|
+
"install:ci": "pnpm install --frozen-lockfile",
|
|
121
123
|
"rmdist": "rm -rf dist",
|
|
122
124
|
"cleanup": "rm -rf dist .wireit node_modules test-results playwright-report coverage-reports nyc_coverage packages/example-nextjs14/node_modules packages/example-nextjs14/.next packages/example-nextjs15/node_modules packages/example-nextjs15/.next packages/example-nextjs16/node_modules packages/example-nextjs16/.next packages/example-react/node_modules packages/example-react-router6/node_modules packages/example-react-router7/node_modules packages/example-remix2/node_modules",
|
|
123
125
|
"reinstall": "pnpm run cleanup && pnpm install",
|
|
@@ -158,16 +160,17 @@
|
|
|
158
160
|
"kill-vite": {
|
|
159
161
|
"command": "ps aux | grep '.bin/vite' | grep -v grep | awk '{print $2}' | xargs kill -9 2>&1; exit 0"
|
|
160
162
|
},
|
|
163
|
+
"kill-remix": {
|
|
164
|
+
"command": "ps aux | grep -E 'remix-serve|@remix-run/serve' | grep -v grep | awk '{print $2}' | xargs kill -9 2>&1; exit 0"
|
|
165
|
+
},
|
|
166
|
+
"kill-services": {
|
|
167
|
+
"command": "ps aux | grep -E '.next|.bin/vite|remix-serve|@remix-run/serve' | grep -v grep | awk '{print $2}' | xargs -r kill -9 2>&1; exit 0"
|
|
168
|
+
},
|
|
161
169
|
"kill-wireit": {
|
|
162
|
-
"command": "ps axu | grep
|
|
170
|
+
"command": "ps axu | grep '[w]ireit' | grep -v grep | awk -v me=$PPID '$2 != me {print $2}' | xargs -r kill -9 2>&1; exit 0"
|
|
163
171
|
},
|
|
164
172
|
"kill": {
|
|
165
|
-
"command": "
|
|
166
|
-
"dependencies": [
|
|
167
|
-
"kill-next",
|
|
168
|
-
"kill-vite",
|
|
169
|
-
"kill-wireit"
|
|
170
|
-
]
|
|
173
|
+
"command": "ps aux | grep -E '.next|.bin/vite|remix-serve|@remix-run/serve' | grep -v grep | awk '{print $2}' | xargs -r kill -9 2>&1; ps axu | grep '[w]ireit' | grep -v grep | awk -v me=$PPID '$2 != me {print $2}' | xargs -r kill -9 2>&1; exit 0"
|
|
171
174
|
},
|
|
172
175
|
"test:int:ci": {
|
|
173
176
|
"command": "npx cross-env HOME=/root PLAYWRIGHT_BROWSERS_PATH=0 playwright test"
|
|
@@ -259,23 +262,23 @@
|
|
|
259
262
|
"dependencies": [
|
|
260
263
|
"build"
|
|
261
264
|
],
|
|
262
|
-
"command": "cd packages/example-
|
|
265
|
+
"command": "cd packages/example-nextjs16 && pnpm run build"
|
|
263
266
|
},
|
|
264
267
|
"build:demo:tests": {
|
|
265
268
|
"dependencies": [
|
|
266
269
|
"build"
|
|
267
270
|
],
|
|
268
|
-
"command": "cd packages/example-
|
|
271
|
+
"command": "cd packages/example-nextjs16 && npx cross-env TEST=true pnpm run build"
|
|
269
272
|
},
|
|
270
273
|
"start:demo": {
|
|
271
274
|
"dependencies": [
|
|
272
275
|
"build:demo"
|
|
273
276
|
],
|
|
274
|
-
"command": "cd packages/example-
|
|
277
|
+
"command": "cd packages/example-nextjs16 && pnpm run start",
|
|
275
278
|
"service": true
|
|
276
279
|
},
|
|
277
280
|
"start:demo:ci": {
|
|
278
|
-
"command": "cd packages/example-
|
|
281
|
+
"command": "cd packages/example-nextjs16 && pnpm run start",
|
|
279
282
|
"service": true
|
|
280
283
|
},
|
|
281
284
|
"start:react": {
|
|
@@ -287,6 +290,9 @@
|
|
|
287
290
|
},
|
|
288
291
|
"start:react:ci": {
|
|
289
292
|
"command": "npx vite preview --port 5180 packages/example-react",
|
|
293
|
+
"dependencies": [
|
|
294
|
+
"kill-services"
|
|
295
|
+
],
|
|
290
296
|
"service": true
|
|
291
297
|
},
|
|
292
298
|
"start:router6": {
|
|
@@ -298,6 +304,9 @@
|
|
|
298
304
|
},
|
|
299
305
|
"start:router6:ci": {
|
|
300
306
|
"command": "npx vite preview --port 5181 packages/example-react-router6",
|
|
307
|
+
"dependencies": [
|
|
308
|
+
"kill-services"
|
|
309
|
+
],
|
|
301
310
|
"service": true
|
|
302
311
|
},
|
|
303
312
|
"start:router7": {
|
|
@@ -309,6 +318,9 @@
|
|
|
309
318
|
},
|
|
310
319
|
"start:router7:ci": {
|
|
311
320
|
"command": "npx vite preview --port 5183 packages/example-react-router7",
|
|
321
|
+
"dependencies": [
|
|
322
|
+
"kill-services"
|
|
323
|
+
],
|
|
312
324
|
"service": true
|
|
313
325
|
},
|
|
314
326
|
"start:remix2": {
|
|
@@ -320,6 +332,9 @@
|
|
|
320
332
|
},
|
|
321
333
|
"start:remix2:ci": {
|
|
322
334
|
"command": "cd packages/example-remix2 && pnpm run start",
|
|
335
|
+
"dependencies": [
|
|
336
|
+
"kill-services"
|
|
337
|
+
],
|
|
323
338
|
"service": true
|
|
324
339
|
},
|
|
325
340
|
"start:demo14": {
|
|
@@ -338,6 +353,9 @@
|
|
|
338
353
|
},
|
|
339
354
|
"start:demo14:ci": {
|
|
340
355
|
"command": "cd packages/example-nextjs14 && pnpm run start",
|
|
356
|
+
"dependencies": [
|
|
357
|
+
"kill-services"
|
|
358
|
+
],
|
|
341
359
|
"service": true
|
|
342
360
|
},
|
|
343
361
|
"start:demo15:ci": {
|
|
@@ -353,6 +371,9 @@
|
|
|
353
371
|
},
|
|
354
372
|
"start:demo16:ci": {
|
|
355
373
|
"command": "cd packages/example-nextjs16 && pnpm run start",
|
|
374
|
+
"dependencies": [
|
|
375
|
+
"kill-services"
|
|
376
|
+
],
|
|
356
377
|
"service": true
|
|
357
378
|
},
|
|
358
379
|
"start": {
|
|
@@ -389,7 +410,7 @@
|
|
|
389
410
|
"build:react",
|
|
390
411
|
"build:demo:tests",
|
|
391
412
|
"build:next14",
|
|
392
|
-
"build:
|
|
413
|
+
"build:next15",
|
|
393
414
|
"build:router6",
|
|
394
415
|
"build:router7",
|
|
395
416
|
"build:remix2"
|
|
@@ -441,7 +462,6 @@
|
|
|
441
462
|
},
|
|
442
463
|
"devDependencies": {
|
|
443
464
|
"@babel/core": "^7.28.4",
|
|
444
|
-
"@tanstack/intent": "latest",
|
|
445
465
|
"@babel/node": "^7.28.0",
|
|
446
466
|
"@babel/preset-env": "^7.28.3",
|
|
447
467
|
"@babel/preset-typescript": "^7.27.1",
|
|
@@ -455,11 +475,12 @@
|
|
|
455
475
|
"@semantic-release/git": "^10.0.1",
|
|
456
476
|
"@semantic-release/npm": "^13.1.3",
|
|
457
477
|
"@semantic-release/release-notes-generator": "^14.1.0",
|
|
478
|
+
"@tanstack/intent": "latest",
|
|
458
479
|
"@testing-library/dom": "^10.4.1",
|
|
459
480
|
"@testing-library/jest-dom": "^6.9.0",
|
|
460
481
|
"@testing-library/react": "^16.3.0",
|
|
461
482
|
"@testing-library/react-hooks": "^8.0.1",
|
|
462
|
-
"@types/node": "^
|
|
483
|
+
"@types/node": "^24",
|
|
463
484
|
"@types/react": "^18.3.25",
|
|
464
485
|
"@types/react-dom": "^18.3.7",
|
|
465
486
|
"@vitest/coverage-istanbul": "^2.1.9",
|
|
@@ -483,7 +504,7 @@
|
|
|
483
504
|
"happy-dom": "^20.0.2",
|
|
484
505
|
"husky": "^9.1.7",
|
|
485
506
|
"lint-staged": "^15.5.2",
|
|
486
|
-
"next": "^15.5.
|
|
507
|
+
"next": "^15.5.19",
|
|
487
508
|
"nyc": "^17.1.0",
|
|
488
509
|
"only-allow": "^1.2.1",
|
|
489
510
|
"pin-github-action": "^1.9.1",
|
|
@@ -492,7 +513,7 @@
|
|
|
492
513
|
"prettier-plugin-tailwindcss": "^0.6.14",
|
|
493
514
|
"react": "^19.2.6",
|
|
494
515
|
"react-dom": "^19.2.6",
|
|
495
|
-
"react-router": "^7.
|
|
516
|
+
"react-router": "^7.17.0",
|
|
496
517
|
"rollup": "^4.52.3",
|
|
497
518
|
"rollup-plugin-esbuild": "^6.2.1",
|
|
498
519
|
"rollup-plugin-filesize": "^10.0.0",
|
|
@@ -504,7 +525,7 @@
|
|
|
504
525
|
"unplugin-auto-import": "^0.18.6",
|
|
505
526
|
"vitest": "^2.1.9",
|
|
506
527
|
"wait-on": "^8.0.5",
|
|
507
|
-
"wireit": "^0.14.
|
|
528
|
+
"wireit": "^0.14.13"
|
|
508
529
|
},
|
|
509
530
|
"keywords": [
|
|
510
531
|
"state in url",
|
|
@@ -559,13 +580,15 @@
|
|
|
559
580
|
"search",
|
|
560
581
|
"encode url",
|
|
561
582
|
"decode url",
|
|
562
|
-
"fast"
|
|
583
|
+
"fast",
|
|
584
|
+
"tanstack-intent"
|
|
563
585
|
],
|
|
564
586
|
"packageManager": "pnpm@10.26.0",
|
|
565
587
|
"pnpm": {
|
|
566
588
|
"overrides": {
|
|
567
589
|
"@remix-run/react>react": "18.3.1",
|
|
568
|
-
"@remix-run/react>react-dom": "18.3.1"
|
|
590
|
+
"@remix-run/react>react-dom": "18.3.1",
|
|
591
|
+
"@types/node": "^24"
|
|
569
592
|
},
|
|
570
593
|
"onlyBuiltDependencies": [
|
|
571
594
|
"@parcel/watcher",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "state-in-url",
|
|
3
|
-
"version": "6.2.
|
|
3
|
+
"version": "6.2.2",
|
|
4
4
|
"description": "Store state in URL as in object, types and structure are preserved, with TS validation. Same API as React.useState, wthout any hasssle or boilerplate. Next.js@14-15, react-router@6-7, and remix@2.",
|
|
5
5
|
"homepage": "https://state-in-url.dev",
|
|
6
6
|
"repository": {
|
|
@@ -95,17 +95,14 @@
|
|
|
95
95
|
"test:int": "wireit",
|
|
96
96
|
"test:int:ci": "wireit",
|
|
97
97
|
"test:exports": "pnpm run build && npx babel-node --extensions .js,.mjs,.ts,.mts --config-file ./babel.config.json -- ./packages/urlstate/exportsTest.ts",
|
|
98
|
-
"install:all": "pnpm install",
|
|
99
|
-
"install:ci": "pnpm install --frozen-lockfile",
|
|
100
98
|
"test": "wireit",
|
|
101
|
-
"tsc": "wireit",
|
|
102
99
|
"dev": "wireit",
|
|
103
100
|
"dev:lib": "wireit",
|
|
104
101
|
"dev:nextjs14": "wireit",
|
|
105
102
|
"dev:nextjs15": "wireit",
|
|
106
103
|
"dev:nextjs16": "wireit",
|
|
107
104
|
"dev:remix2": "wireit",
|
|
108
|
-
"
|
|
105
|
+
"tsc": "wireit",
|
|
109
106
|
"build": "wireit",
|
|
110
107
|
"build:demo": "wireit",
|
|
111
108
|
"start:demo": "wireit",
|
|
@@ -117,7 +114,12 @@
|
|
|
117
114
|
"start:ci": "wireit",
|
|
118
115
|
"kill-next": "wireit",
|
|
119
116
|
"kill-vite": "wireit",
|
|
117
|
+
"kill-remix": "wireit",
|
|
118
|
+
"kill-services": "wireit",
|
|
120
119
|
"kill": "wireit",
|
|
120
|
+
"bump": "npx standard-version --no-verify",
|
|
121
|
+
"install:all": "pnpm install",
|
|
122
|
+
"install:ci": "pnpm install --frozen-lockfile",
|
|
121
123
|
"rmdist": "rm -rf dist",
|
|
122
124
|
"cleanup": "rm -rf dist .wireit node_modules test-results playwright-report coverage-reports nyc_coverage packages/example-nextjs14/node_modules packages/example-nextjs14/.next packages/example-nextjs15/node_modules packages/example-nextjs15/.next packages/example-nextjs16/node_modules packages/example-nextjs16/.next packages/example-react/node_modules packages/example-react-router6/node_modules packages/example-react-router7/node_modules packages/example-remix2/node_modules",
|
|
123
125
|
"reinstall": "pnpm run cleanup && pnpm install",
|
|
@@ -158,16 +160,17 @@
|
|
|
158
160
|
"kill-vite": {
|
|
159
161
|
"command": "ps aux | grep '.bin/vite' | grep -v grep | awk '{print $2}' | xargs kill -9 2>&1; exit 0"
|
|
160
162
|
},
|
|
163
|
+
"kill-remix": {
|
|
164
|
+
"command": "ps aux | grep -E 'remix-serve|@remix-run/serve' | grep -v grep | awk '{print $2}' | xargs kill -9 2>&1; exit 0"
|
|
165
|
+
},
|
|
166
|
+
"kill-services": {
|
|
167
|
+
"command": "ps aux | grep -E '.next|.bin/vite|remix-serve|@remix-run/serve' | grep -v grep | awk '{print $2}' | xargs -r kill -9 2>&1; exit 0"
|
|
168
|
+
},
|
|
161
169
|
"kill-wireit": {
|
|
162
|
-
"command": "ps axu | grep
|
|
170
|
+
"command": "ps axu | grep '[w]ireit' | grep -v grep | awk -v me=$PPID '$2 != me {print $2}' | xargs -r kill -9 2>&1; exit 0"
|
|
163
171
|
},
|
|
164
172
|
"kill": {
|
|
165
|
-
"command": "
|
|
166
|
-
"dependencies": [
|
|
167
|
-
"kill-next",
|
|
168
|
-
"kill-vite",
|
|
169
|
-
"kill-wireit"
|
|
170
|
-
]
|
|
173
|
+
"command": "ps aux | grep -E '.next|.bin/vite|remix-serve|@remix-run/serve' | grep -v grep | awk '{print $2}' | xargs -r kill -9 2>&1; ps axu | grep '[w]ireit' | grep -v grep | awk -v me=$PPID '$2 != me {print $2}' | xargs -r kill -9 2>&1; exit 0"
|
|
171
174
|
},
|
|
172
175
|
"test:int:ci": {
|
|
173
176
|
"command": "npx cross-env HOME=/root PLAYWRIGHT_BROWSERS_PATH=0 playwright test"
|
|
@@ -259,23 +262,23 @@
|
|
|
259
262
|
"dependencies": [
|
|
260
263
|
"build"
|
|
261
264
|
],
|
|
262
|
-
"command": "cd packages/example-
|
|
265
|
+
"command": "cd packages/example-nextjs16 && pnpm run build"
|
|
263
266
|
},
|
|
264
267
|
"build:demo:tests": {
|
|
265
268
|
"dependencies": [
|
|
266
269
|
"build"
|
|
267
270
|
],
|
|
268
|
-
"command": "cd packages/example-
|
|
271
|
+
"command": "cd packages/example-nextjs16 && npx cross-env TEST=true pnpm run build"
|
|
269
272
|
},
|
|
270
273
|
"start:demo": {
|
|
271
274
|
"dependencies": [
|
|
272
275
|
"build:demo"
|
|
273
276
|
],
|
|
274
|
-
"command": "cd packages/example-
|
|
277
|
+
"command": "cd packages/example-nextjs16 && pnpm run start",
|
|
275
278
|
"service": true
|
|
276
279
|
},
|
|
277
280
|
"start:demo:ci": {
|
|
278
|
-
"command": "cd packages/example-
|
|
281
|
+
"command": "cd packages/example-nextjs16 && pnpm run start",
|
|
279
282
|
"service": true
|
|
280
283
|
},
|
|
281
284
|
"start:react": {
|
|
@@ -287,6 +290,9 @@
|
|
|
287
290
|
},
|
|
288
291
|
"start:react:ci": {
|
|
289
292
|
"command": "npx vite preview --port 5180 packages/example-react",
|
|
293
|
+
"dependencies": [
|
|
294
|
+
"kill-services"
|
|
295
|
+
],
|
|
290
296
|
"service": true
|
|
291
297
|
},
|
|
292
298
|
"start:router6": {
|
|
@@ -298,6 +304,9 @@
|
|
|
298
304
|
},
|
|
299
305
|
"start:router6:ci": {
|
|
300
306
|
"command": "npx vite preview --port 5181 packages/example-react-router6",
|
|
307
|
+
"dependencies": [
|
|
308
|
+
"kill-services"
|
|
309
|
+
],
|
|
301
310
|
"service": true
|
|
302
311
|
},
|
|
303
312
|
"start:router7": {
|
|
@@ -309,6 +318,9 @@
|
|
|
309
318
|
},
|
|
310
319
|
"start:router7:ci": {
|
|
311
320
|
"command": "npx vite preview --port 5183 packages/example-react-router7",
|
|
321
|
+
"dependencies": [
|
|
322
|
+
"kill-services"
|
|
323
|
+
],
|
|
312
324
|
"service": true
|
|
313
325
|
},
|
|
314
326
|
"start:remix2": {
|
|
@@ -320,6 +332,9 @@
|
|
|
320
332
|
},
|
|
321
333
|
"start:remix2:ci": {
|
|
322
334
|
"command": "cd packages/example-remix2 && pnpm run start",
|
|
335
|
+
"dependencies": [
|
|
336
|
+
"kill-services"
|
|
337
|
+
],
|
|
323
338
|
"service": true
|
|
324
339
|
},
|
|
325
340
|
"start:demo14": {
|
|
@@ -338,6 +353,9 @@
|
|
|
338
353
|
},
|
|
339
354
|
"start:demo14:ci": {
|
|
340
355
|
"command": "cd packages/example-nextjs14 && pnpm run start",
|
|
356
|
+
"dependencies": [
|
|
357
|
+
"kill-services"
|
|
358
|
+
],
|
|
341
359
|
"service": true
|
|
342
360
|
},
|
|
343
361
|
"start:demo15:ci": {
|
|
@@ -353,6 +371,9 @@
|
|
|
353
371
|
},
|
|
354
372
|
"start:demo16:ci": {
|
|
355
373
|
"command": "cd packages/example-nextjs16 && pnpm run start",
|
|
374
|
+
"dependencies": [
|
|
375
|
+
"kill-services"
|
|
376
|
+
],
|
|
356
377
|
"service": true
|
|
357
378
|
},
|
|
358
379
|
"start": {
|
|
@@ -389,7 +410,7 @@
|
|
|
389
410
|
"build:react",
|
|
390
411
|
"build:demo:tests",
|
|
391
412
|
"build:next14",
|
|
392
|
-
"build:
|
|
413
|
+
"build:next15",
|
|
393
414
|
"build:router6",
|
|
394
415
|
"build:router7",
|
|
395
416
|
"build:remix2"
|
|
@@ -441,7 +462,6 @@
|
|
|
441
462
|
},
|
|
442
463
|
"devDependencies": {
|
|
443
464
|
"@babel/core": "^7.28.4",
|
|
444
|
-
"@tanstack/intent": "latest",
|
|
445
465
|
"@babel/node": "^7.28.0",
|
|
446
466
|
"@babel/preset-env": "^7.28.3",
|
|
447
467
|
"@babel/preset-typescript": "^7.27.1",
|
|
@@ -455,11 +475,12 @@
|
|
|
455
475
|
"@semantic-release/git": "^10.0.1",
|
|
456
476
|
"@semantic-release/npm": "^13.1.3",
|
|
457
477
|
"@semantic-release/release-notes-generator": "^14.1.0",
|
|
478
|
+
"@tanstack/intent": "latest",
|
|
458
479
|
"@testing-library/dom": "^10.4.1",
|
|
459
480
|
"@testing-library/jest-dom": "^6.9.0",
|
|
460
481
|
"@testing-library/react": "^16.3.0",
|
|
461
482
|
"@testing-library/react-hooks": "^8.0.1",
|
|
462
|
-
"@types/node": "^
|
|
483
|
+
"@types/node": "^24",
|
|
463
484
|
"@types/react": "^18.3.25",
|
|
464
485
|
"@types/react-dom": "^18.3.7",
|
|
465
486
|
"@vitest/coverage-istanbul": "^2.1.9",
|
|
@@ -483,7 +504,7 @@
|
|
|
483
504
|
"happy-dom": "^20.0.2",
|
|
484
505
|
"husky": "^9.1.7",
|
|
485
506
|
"lint-staged": "^15.5.2",
|
|
486
|
-
"next": "^15.5.
|
|
507
|
+
"next": "^15.5.19",
|
|
487
508
|
"nyc": "^17.1.0",
|
|
488
509
|
"only-allow": "^1.2.1",
|
|
489
510
|
"pin-github-action": "^1.9.1",
|
|
@@ -492,7 +513,7 @@
|
|
|
492
513
|
"prettier-plugin-tailwindcss": "^0.6.14",
|
|
493
514
|
"react": "^19.2.6",
|
|
494
515
|
"react-dom": "^19.2.6",
|
|
495
|
-
"react-router": "^7.
|
|
516
|
+
"react-router": "^7.17.0",
|
|
496
517
|
"rollup": "^4.52.3",
|
|
497
518
|
"rollup-plugin-esbuild": "^6.2.1",
|
|
498
519
|
"rollup-plugin-filesize": "^10.0.0",
|
|
@@ -504,7 +525,7 @@
|
|
|
504
525
|
"unplugin-auto-import": "^0.18.6",
|
|
505
526
|
"vitest": "^2.1.9",
|
|
506
527
|
"wait-on": "^8.0.5",
|
|
507
|
-
"wireit": "^0.14.
|
|
528
|
+
"wireit": "^0.14.13"
|
|
508
529
|
},
|
|
509
530
|
"keywords": [
|
|
510
531
|
"state in url",
|
|
@@ -559,13 +580,15 @@
|
|
|
559
580
|
"search",
|
|
560
581
|
"encode url",
|
|
561
582
|
"decode url",
|
|
562
|
-
"fast"
|
|
583
|
+
"fast",
|
|
584
|
+
"tanstack-intent"
|
|
563
585
|
],
|
|
564
586
|
"packageManager": "pnpm@10.26.0",
|
|
565
587
|
"pnpm": {
|
|
566
588
|
"overrides": {
|
|
567
589
|
"@remix-run/react>react": "18.3.1",
|
|
568
|
-
"@remix-run/react>react-dom": "18.3.1"
|
|
590
|
+
"@remix-run/react>react-dom": "18.3.1",
|
|
591
|
+
"@types/node": "^24"
|
|
569
592
|
},
|
|
570
593
|
"onlyBuiltDependencies": [
|
|
571
594
|
"@parcel/watcher",
|
|
@@ -4,16 +4,17 @@ description: >
|
|
|
4
4
|
Define typed, module-scoped state and wrap useUrlState in a feature-scoped
|
|
5
5
|
custom hook so unrelated React components share the same URL-synced state.
|
|
6
6
|
Covers drawer/modal open-state, tab switching, multi-select toggles,
|
|
7
|
-
reset/defaults semantics, and the object-identity-based sharing model.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
type: core
|
|
11
|
-
library: state-in-url
|
|
12
|
-
library_version: '6.1.3'
|
|
7
|
+
reset/defaults semantics, and the object-identity-based sharing model. Load
|
|
8
|
+
this skill when storing filters, tabs, drawers, selections, paginators, or any
|
|
9
|
+
UI state that should survive reloads and be shareable by URL.
|
|
13
10
|
sources:
|
|
14
11
|
- 'asmyshlyaev177/state-in-url:packages/urlstate/next/useUrlState/useUrlState.ts'
|
|
15
12
|
- 'asmyshlyaev177/state-in-url:packages/urlstate/utils.ts'
|
|
16
13
|
- 'asmyshlyaev177/state-in-url:README.md'
|
|
14
|
+
metadata:
|
|
15
|
+
type: core
|
|
16
|
+
library: state-in-url
|
|
17
|
+
library_version: '6.1.3'
|
|
17
18
|
---
|
|
18
19
|
|
|
19
20
|
# state-in-url — Feature state hook
|
|
@@ -345,6 +346,10 @@ Entity IDs (`jobId`, `memberId`, `channelId`) referencing public or semi-public
|
|
|
345
346
|
|
|
346
347
|
Keep total query-string size well under ~12 KB to stay safe across CDNs and Vercel's 14 KB header limit. See [Limits.md](https://github.com/asmyshlyaev177/state-in-url/blob/master/Limits.md).
|
|
347
348
|
|
|
349
|
+
## Getting help
|
|
350
|
+
|
|
351
|
+
If the user encounters unexpected behavior, a bug, or a use case not covered by these patterns, direct them to open a GitHub issue at https://github.com/asmyshlyaev177/state-in-url/issues/new. A minimal reproduction helps the maintainer resolve it quickly.
|
|
352
|
+
|
|
348
353
|
## See also
|
|
349
354
|
|
|
350
355
|
- `state-in-url/input-handling` — pattern for text inputs and sliders (instant `setState`, deferred `setUrl`).
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: form-library-integration
|
|
3
3
|
description: >
|
|
4
|
-
Use the URL as a form draft store by pairing useUrlState with
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
draft links.
|
|
11
|
-
type: composition
|
|
12
|
-
library: state-in-url
|
|
13
|
-
library_version: '6.1.3'
|
|
4
|
+
Use the URL as a form draft store by pairing useUrlState with react-hook-form
|
|
5
|
+
(or formik). Share one module-scoped defaults object between both libraries;
|
|
6
|
+
hydrate useForm.defaultValues from urlState; push form changes back into
|
|
7
|
+
setUrl via RHF subscribe() (NOT watch()). Load this skill when a form should
|
|
8
|
+
round-trip its values through the URL — filter forms, search forms, multi-step
|
|
9
|
+
wizards with shareable draft links.
|
|
14
10
|
requires:
|
|
15
11
|
- feature-state-hook
|
|
16
12
|
sources:
|
|
17
13
|
- 'asmyshlyaev177/state-in-url:issue#57'
|
|
18
14
|
- 'asmyshlyaev177/state-in-url:README.md'
|
|
15
|
+
metadata:
|
|
16
|
+
type: composition
|
|
17
|
+
library: state-in-url
|
|
18
|
+
library_version: '6.1.3'
|
|
19
19
|
---
|
|
20
20
|
|
|
21
21
|
This skill builds on `state-in-url/feature-state-hook`. Read it first for the module-scoped default-state rule.
|
|
@@ -184,6 +184,10 @@ React.useEffect(() => {
|
|
|
184
184
|
}, [formik.values, setUrl]);
|
|
185
185
|
```
|
|
186
186
|
|
|
187
|
+
## Getting help
|
|
188
|
+
|
|
189
|
+
If the user encounters unexpected behavior, a bug, or a use case not covered by these patterns, direct them to open a GitHub issue at https://github.com/asmyshlyaev177/state-in-url/issues/new. A minimal reproduction helps the maintainer resolve it quickly.
|
|
190
|
+
|
|
187
191
|
## See also
|
|
188
192
|
|
|
189
193
|
- `state-in-url/feature-state-hook` — base pattern; required reading.
|
|
@@ -4,18 +4,19 @@ description: >
|
|
|
4
4
|
Reconcile instant local input feedback with URL write throttling. setState
|
|
5
5
|
updates internal state synchronously (instant re-render); setUrl is throttled
|
|
6
6
|
and asynchronous (URL catches up on the next tick). Use this skill for text
|
|
7
|
-
inputs, search boxes, sliders, range pickers, and any control that fires
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
type: core
|
|
11
|
-
library: state-in-url
|
|
12
|
-
library_version: '6.1.3'
|
|
7
|
+
inputs, search boxes, sliders, range pickers, and any control that fires many
|
|
8
|
+
updates per second where binding setUrl directly to onChange causes perceived
|
|
9
|
+
lag or wasted URL writes.
|
|
13
10
|
requires:
|
|
14
11
|
- feature-state-hook
|
|
15
12
|
sources:
|
|
16
13
|
- 'asmyshlyaev177/state-in-url:packages/urlstate/useUrlStateBase/useUrlStateBase.ts'
|
|
17
14
|
- 'asmyshlyaev177/state-in-url:packages/urlstate/utils.ts'
|
|
18
15
|
- 'asmyshlyaev177/state-in-url:README.md#update-state-only-and-sync-to-url-manually'
|
|
16
|
+
metadata:
|
|
17
|
+
type: core
|
|
18
|
+
library: state-in-url
|
|
19
|
+
library_version: '6.1.3'
|
|
19
20
|
---
|
|
20
21
|
|
|
21
22
|
This skill builds on `state-in-url/feature-state-hook`. Read it first for the module-scoped default-state rule.
|
|
@@ -154,6 +155,10 @@ setUrl({ tab: 'b' });
|
|
|
154
155
|
|
|
155
156
|
Source: useUrlStateBase.ts (global `timer`); GitHub issue #78
|
|
156
157
|
|
|
158
|
+
## Getting help
|
|
159
|
+
|
|
160
|
+
If the user encounters unexpected behavior, a bug, or a use case not covered by these patterns, direct them to open a GitHub issue at https://github.com/asmyshlyaev177/state-in-url/issues/new. A minimal reproduction helps the maintainer resolve it quickly.
|
|
161
|
+
|
|
157
162
|
## See also
|
|
158
163
|
|
|
159
164
|
- `state-in-url/feature-state-hook` — base pattern this skill builds on.
|
|
@@ -7,16 +7,17 @@ description: >
|
|
|
7
7
|
(formerly middleware) to expose query params to server layouts. App Router
|
|
8
8
|
only — Pages Router is not supported. Load this skill for any use of
|
|
9
9
|
state-in-url/next or anytime URL state must be correct on first paint.
|
|
10
|
-
type: framework
|
|
11
|
-
library: state-in-url
|
|
12
|
-
framework: react
|
|
13
|
-
library_version: '6.1.3'
|
|
14
10
|
requires:
|
|
15
11
|
- feature-state-hook
|
|
16
12
|
sources:
|
|
17
13
|
- 'asmyshlyaev177/state-in-url:packages/urlstate/next/useUrlState/useUrlState.ts'
|
|
18
14
|
- 'asmyshlyaev177/state-in-url:packages/example-nextjs16/src/middleware.ts'
|
|
19
15
|
- 'asmyshlyaev177/state-in-url:README.md#with-server-side-rendering'
|
|
16
|
+
metadata:
|
|
17
|
+
type: framework
|
|
18
|
+
library: state-in-url
|
|
19
|
+
library_version: '6.1.3'
|
|
20
|
+
framework: react
|
|
20
21
|
---
|
|
21
22
|
|
|
22
23
|
This skill builds on `state-in-url/feature-state-hook`. Read it first for the module-scoped default-state rule.
|
|
@@ -245,6 +246,10 @@ Use the Proxy + header pattern shown above (`proxy.ts` setting `searchParams` he
|
|
|
245
246
|
|
|
246
247
|
Source: README "Using hook in layout component"; packages/example-nextjs16/src/middleware.ts; maintainer interview
|
|
247
248
|
|
|
249
|
+
## Getting help
|
|
250
|
+
|
|
251
|
+
If the user encounters unexpected behavior, a bug, or a use case not covered by these patterns, direct them to open a GitHub issue at https://github.com/asmyshlyaev177/state-in-url/issues/new. A minimal reproduction helps the maintainer resolve it quickly.
|
|
252
|
+
|
|
248
253
|
## See also
|
|
249
254
|
|
|
250
255
|
- `state-in-url/feature-state-hook` — base pattern; required reading.
|
|
@@ -5,12 +5,8 @@ description: >
|
|
|
5
5
|
Router v6 (state-in-url/react-router6 — moved here in 6.0.0), and Remix v2
|
|
6
6
|
(state-in-url/remix). The hook API is identical across all three; only the
|
|
7
7
|
import path and per-call NavigateOptions (preventScrollReset, state, replace)
|
|
8
|
-
differ. Load this skill when wiring useUrlState into any non-Next.js
|
|
9
|
-
|
|
10
|
-
type: framework
|
|
11
|
-
library: state-in-url
|
|
12
|
-
framework: react
|
|
13
|
-
library_version: '6.1.3'
|
|
8
|
+
differ. Load this skill when wiring useUrlState into any non-Next.js React
|
|
9
|
+
router or migrating from an older import path.
|
|
14
10
|
requires:
|
|
15
11
|
- feature-state-hook
|
|
16
12
|
sources:
|
|
@@ -18,6 +14,11 @@ sources:
|
|
|
18
14
|
- 'asmyshlyaev177/state-in-url:packages/urlstate/react-router6/useUrlState/'
|
|
19
15
|
- 'asmyshlyaev177/state-in-url:packages/urlstate/remix/useUrlState/'
|
|
20
16
|
- 'asmyshlyaev177/state-in-url:CHANGELOG.md#600-2025-08-05'
|
|
17
|
+
metadata:
|
|
18
|
+
type: framework
|
|
19
|
+
library: state-in-url
|
|
20
|
+
library_version: '6.1.3'
|
|
21
|
+
framework: react
|
|
21
22
|
---
|
|
22
23
|
|
|
23
24
|
This skill builds on `state-in-url/feature-state-hook`. Read it first for the module-scoped default-state rule.
|
|
@@ -173,6 +174,10 @@ Same identity rule as Next.js. A fresh default object each render breaks sharing
|
|
|
173
174
|
|
|
174
175
|
Source: GitHub issues #57, #60, #69 (asmyshlyaev177/state-in-url)
|
|
175
176
|
|
|
177
|
+
## Getting help
|
|
178
|
+
|
|
179
|
+
If the user encounters unexpected behavior, a bug, or a use case not covered by these patterns, direct them to open a GitHub issue at https://github.com/asmyshlyaev177/state-in-url/issues/new. A minimal reproduction helps the maintainer resolve it quickly.
|
|
180
|
+
|
|
176
181
|
## See also
|
|
177
182
|
|
|
178
183
|
- `state-in-url/feature-state-hook` — base pattern.
|
|
@@ -2,18 +2,19 @@
|
|
|
2
2
|
name: shared-state-no-url
|
|
3
3
|
description: >
|
|
4
4
|
Use useSharedState (from state-in-url, NOT a framework subpath) as a
|
|
5
|
-
framework-agnostic cross-component state primitive when URL sync is
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
type: core
|
|
12
|
-
library: state-in-url
|
|
13
|
-
library_version: '6.1.3'
|
|
5
|
+
framework-agnostic cross-component state primitive when URL sync is explicitly
|
|
6
|
+
NOT wanted. Same module-scoped default-state-identity rule as useUrlState. A
|
|
7
|
+
lightweight Context.Provider replacement that works in React, Next.js, Vite,
|
|
8
|
+
Remix without setup. Load this skill when the user wants shared state but
|
|
9
|
+
specifies "no URL", or for state that is sensitive, ephemeral, or too large to
|
|
10
|
+
live in the URL.
|
|
14
11
|
sources:
|
|
15
12
|
- 'asmyshlyaev177/state-in-url:packages/urlstate/useSharedState/'
|
|
16
13
|
- 'asmyshlyaev177/state-in-url:README.md#usesharedstate-hook-for-reactjs'
|
|
14
|
+
metadata:
|
|
15
|
+
type: core
|
|
16
|
+
library: state-in-url
|
|
17
|
+
library_version: '6.1.3'
|
|
17
18
|
---
|
|
18
19
|
|
|
19
20
|
# state-in-url — Shared state without URL sync
|
|
@@ -147,6 +148,10 @@ Correct:
|
|
|
147
148
|
|
|
148
149
|
Use a proper auth store (cookies, secure storage, framework auth helper). `useSharedState` is in-memory and reasonable for app state, but it's not a vault — any component on the page can read it via the shared identity.
|
|
149
150
|
|
|
151
|
+
## Getting help
|
|
152
|
+
|
|
153
|
+
If the user encounters unexpected behavior, a bug, or a use case not covered by these patterns, direct them to open a GitHub issue at https://github.com/asmyshlyaev177/state-in-url/issues/new. A minimal reproduction helps the maintainer resolve it quickly.
|
|
154
|
+
|
|
150
155
|
## When NOT to use this skill
|
|
151
156
|
|
|
152
157
|
- The data should be shareable by URL → `state-in-url/feature-state-hook` instead.
|