Merge remote-tracking branch 'origin/staging' into develop

This commit is contained in:
Andrey Antukh 2026-06-18 09:44:10 +02:00
commit 203817fe6a
8 changed files with 193 additions and 188 deletions

View File

@ -11,17 +11,17 @@
},
"type": "module",
"dependencies": {
"@penpot/svgo": "penpot/svgo#3.3.0",
"archiver": "8.0.0",
"cookies": "^0.9.1",
"date-fns": "^4.4.0",
"generic-pool": "^3.9.0",
"inflation": "^2.1.0",
"ioredis": "^5.11.1",
"playwright": "^1.60.0",
"playwright": "^1.61.0",
"raw-body": "^3.0.2",
"source-map-support": "^0.5.21",
"@penpot/svgo": "penpot/svgo#3.3.0",
"undici": "^8.4.1",
"undici": "^8.5.0",
"xml-js": "^1.6.11",
"xregexp": "^5.1.2"
},

View File

@ -35,8 +35,8 @@ importers:
specifier: ^5.11.1
version: 5.11.1
playwright:
specifier: ^1.60.0
version: 1.60.0
specifier: ^1.61.0
version: 1.61.0
raw-body:
specifier: ^3.0.2
version: 3.0.2
@ -44,8 +44,8 @@ importers:
specifier: ^0.5.21
version: 0.5.21
undici:
specifier: ^8.4.1
version: 8.4.1
specifier: ^8.5.0
version: 8.5.0
xml-js:
specifier: ^1.6.11
version: 1.6.11
@ -330,13 +330,13 @@ packages:
resolution: {integrity: sha512-GX0gsdbGVCgnRgbeGaubfjpBXyYRWOOCVeYh08bSQvDZqxz5ndXs1OTfAt/h36G1xvI94YIspsI0sVFqAV9+RQ==}
engines: {node: '>=20.19.0'}
playwright-core@1.60.0:
resolution: {integrity: sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==}
playwright-core@1.61.0:
resolution: {integrity: sha512-caX7TrY3Ml6egyDX0WUcTHDxodl/b51y5wJOdCEA36QviK/s2g081hvmGs8eaE3DWb6NYZQ6BjO/QkNRPenoPA==}
engines: {node: '>=18'}
hasBin: true
playwright@1.60.0:
resolution: {integrity: sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==}
playwright@1.61.0:
resolution: {integrity: sha512-Z+7BeeqQPRRzklHsVFP4KTGIyMxKUmfeRA4WisM6G3/XW6nwGeX6fX9qYaDa+CiUqpOkb2f6X3nar05R3kSuJQ==}
engines: {node: '>=18'}
hasBin: true
@ -430,8 +430,8 @@ packages:
resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==}
engines: {node: '>=0.6.x'}
undici@8.4.1:
resolution: {integrity: sha512-RNHlB4fxZK0IrkhBsxhlbx7s8kFWwr7rzzOqj5nvZugw3ig3RsB7KW3zVlV0eu8POl+rx5d1hmL7rRg0z1owow==}
undici@8.5.0:
resolution: {integrity: sha512-xamtWoB1EshgjpmlXd7GGm2VfdDtw1+rD8uhry8pSNW3If6S8E0m2T2+orSKeZXEn/aPJMviCpDBA65WJt8zhg==}
engines: {node: '>=22.19.0'}
unpipe@1.0.0:
@ -714,11 +714,11 @@ snapshots:
dependencies:
boolbase: 2.0.0
playwright-core@1.60.0: {}
playwright-core@1.61.0: {}
playwright@1.60.0:
playwright@1.61.0:
dependencies:
playwright-core: 1.60.0
playwright-core: 1.61.0
optionalDependencies:
fsevents: 2.3.2
@ -829,7 +829,7 @@ snapshots:
tsscmp@1.0.6: {}
undici@8.4.1: {}
undici@8.5.0: {}
unpipe@1.0.0: {}

View File

@ -107,7 +107,7 @@
"react-virtualized": "^9.22.6",
"rimraf": "^6.1.3",
"rxjs": "8.0.0-alpha.14",
"sass": "^1.100.0",
"sass": "^1.101.0",
"sass-embedded": "^1.100.0",
"sax": "^1.6.0",
"scheduler": "^0.27.0",
@ -117,7 +117,7 @@
"stylelint": "^17.13.0",
"stylelint-config-standard-scss": "^17.0.0",
"stylelint-scss": "^7.2.0",
"stylelint-use-logical-spec": "^5.0.1",
"stylelint-plugin-logical-css": "^2.1.0",
"svg-sprite": "^2.0.4",
"tdigest": "^0.1.2",
"tinycolor2": "^1.6.0",

264
frontend/pnpm-lock.yaml generated
View File

@ -54,7 +54,7 @@ importers:
version: 1.61.0
'@storybook/addon-docs':
specifier: 10.4.6
version: 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
version: 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
'@storybook/addon-themes':
specifier: 10.4.6
version: 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))
@ -63,7 +63,7 @@ importers:
version: 10.4.6(@vitest/browser-playwright@4.1.9)(@vitest/browser@4.1.9)(@vitest/runner@4.1.9)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.9)
'@storybook/react-vite':
specifier: 10.4.6
version: 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
version: 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
'@tokens-studio/sd-transforms':
specifier: 2.0.3
version: 2.0.3(style-dictionary@5.4.4(tslib@2.8.1))
@ -72,10 +72,10 @@ importers:
version: 25.9.3
'@vitest/browser':
specifier: 4.1.9
version: 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))(vitest@4.1.9)
version: 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))(vitest@4.1.9)
'@vitest/browser-playwright':
specifier: ^4.1.9
version: 4.1.9(playwright@1.61.0)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))(vitest@4.1.9)
version: 4.1.9(playwright@1.61.0)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))(vitest@4.1.9)
'@vitest/coverage-v8':
specifier: 4.1.9
version: 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9)
@ -102,7 +102,7 @@ importers:
version: 3.1.0
express:
specifier: ^5.1.0
version: 5.2.1(supports-color@5.5.0)
version: 5.2.1
fancy-log:
specifier: ^2.0.0
version: 2.0.0
@ -197,8 +197,8 @@ importers:
specifier: 8.0.0-alpha.14
version: 8.0.0-alpha.14
sass:
specifier: ^1.100.0
version: 1.100.0
specifier: ^1.101.0
version: 1.101.0
sass-embedded:
specifier: ^1.100.0
version: 1.100.0
@ -219,16 +219,16 @@ importers:
version: 5.4.4(tslib@2.8.1)
stylelint:
specifier: ^17.13.0
version: 17.13.0(supports-color@5.5.0)(typescript@6.0.3)
version: 17.13.0(typescript@6.0.3)
stylelint-config-standard-scss:
specifier: ^17.0.0
version: 17.0.0(postcss@8.5.15)(stylelint@17.13.0(supports-color@5.5.0)(typescript@6.0.3))
version: 17.0.0(postcss@8.5.15)(stylelint@17.13.0(typescript@6.0.3))
stylelint-plugin-logical-css:
specifier: ^2.1.0
version: 2.1.0(stylelint@17.13.0(typescript@6.0.3))
stylelint-scss:
specifier: ^7.2.0
version: 7.2.0(stylelint@17.13.0(supports-color@5.5.0)(typescript@6.0.3))
stylelint-use-logical-spec:
specifier: ^5.0.1
version: 5.0.1(stylelint@17.13.0(supports-color@5.5.0)(typescript@6.0.3))
version: 7.2.0(stylelint@17.13.0(typescript@6.0.3))
svg-sprite:
specifier: ^2.0.4
version: 2.0.4
@ -243,13 +243,13 @@ importers:
version: 6.0.3
vite:
specifier: ^8.0.16
version: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0)
version: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0)
vitest:
specifier: ^4.1.9
version: 4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
version: 4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
wait-on:
specifier: ^9.0.4
version: 9.0.10(supports-color@5.5.0)
version: 9.0.10
watcher:
specifier: ^2.3.1
version: 2.3.1
@ -307,7 +307,7 @@ importers:
version: 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)
'@storybook/react-vite':
specifier: 10.4.6
version: 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
version: 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
'@testing-library/dom':
specifier: 10.4.1
version: 10.4.1
@ -322,7 +322,7 @@ importers:
version: 19.2.3(@types/react@19.2.17)
'@vitejs/plugin-react':
specifier: ^6.0.2
version: 6.0.2(babel-plugin-react-compiler@1.0.0)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
version: 6.0.2(babel-plugin-react-compiler@1.0.0)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
babel-plugin-react-compiler:
specifier: ^1.0.0
version: 1.0.0
@ -346,7 +346,7 @@ importers:
version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
vite-plugin-dts:
specifier: ^5.0.2
version: 5.0.2(@microsoft/api-extractor@7.56.2(@types/node@25.9.3))(esbuild@0.28.1)(rolldown@1.0.3)(rollup@4.61.1)(supports-color@5.5.0)(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
version: 5.0.2(@microsoft/api-extractor@7.56.2(@types/node@25.9.3))(esbuild@0.28.1)(rolldown@1.0.3)(rollup@4.61.1)(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
text-editor:
devDependencies:
@ -358,7 +358,7 @@ importers:
version: 25.9.3
'@vitest/browser':
specifier: ^4.1.9
version: 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))(vitest@4.1.9)
version: 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))(vitest@4.1.9)
'@vitest/coverage-v8':
specifier: ^4.1.9
version: 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9)
@ -382,10 +382,10 @@ importers:
version: 3.8.4
vite:
specifier: ^8.0.16
version: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0)
version: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0)
vitest:
specifier: ^4.1.9
version: 4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
version: 4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
packages:
@ -567,10 +567,6 @@ packages:
resolution: {integrity: sha512-TgUkdp71C9pIbBcHudc+gXZnihEDOjUAmXO1VO4HHGES7QLZcShR0stfKIxLSNIYx2fqhmJChOjm/wkF8wv4gA==}
engines: {node: '>=6.9.0'}
'@babel/runtime@7.28.6':
resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
engines: {node: '>=6.9.0'}
'@babel/runtime@7.29.7':
resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==}
engines: {node: '>=6.9.0'}
@ -2451,9 +2447,6 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
caniuse-lite@1.0.30001792:
resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==}
caniuse-lite@1.0.30001799:
resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==}
@ -3945,10 +3938,6 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
lru-cache@11.3.6:
resolution: {integrity: sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==}
engines: {node: 20 || >=22}
lru-cache@11.5.1:
resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==}
engines: {node: 20 || >=22}
@ -4201,10 +4190,6 @@ packages:
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
engines: {node: '>= 0.4'}
obug@2.1.2:
resolution: {integrity: sha512-AWGB9WFcRXOQs48Z/udjI5ZcZMHXwX8XPByNpOydgcGsDLIzjGizhoMWJyKAWze7AVW/2W1i+/gPX4YtKe5cyg==}
engines: {node: '>=12.20.0'}
obug@2.1.3:
resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==}
engines: {node: '>=12.20.0'}
@ -4837,6 +4822,11 @@ packages:
engines: {node: '>=20.19.0'}
hasBin: true
sass@1.101.0:
resolution: {integrity: sha512-OL3GoQyoUdDt843DpVmDO6y2k1sc5IhUDSpu8XucEI+35neq5QivZ1iuegnpraEVTJXlQGK1gl27zKcTLEPbQw==}
engines: {node: '>=20.19.0'}
hasBin: true
sax@1.6.0:
resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==}
engines: {node: '>=11.0.0'}
@ -5146,18 +5136,17 @@ packages:
peerDependencies:
stylelint: ^17.0.0
stylelint-plugin-logical-css@2.1.0:
resolution: {integrity: sha512-625OT+p5y2kkGBaRV7uTYscuH0m1UueMXh0WcidrXgwF2DOnKov+un9tvuyNG+SUC07W0ibcn+fZvQs/keskww==}
peerDependencies:
stylelint: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
stylelint-scss@7.2.0:
resolution: {integrity: sha512-6E79Bachv0Iz0gqRUZgdqdXCsiq26DWBWIBNHYtjTmAp3wJu6cp/I37VfW7BPntmh2puF3bY09XWl4HZGrLhzw==}
engines: {node: '>=20.19.0'}
peerDependencies:
stylelint: ^16.8.2 || ^17.0.0
stylelint-use-logical-spec@5.0.1:
resolution: {integrity: sha512-UfLB4LW6iG4r3cXxjxkiHQrFyhWFqt8FpNNngD+TyvgMWSokk5TYwTvBHS3atUvZhOogllTOe/PUrGE+4z84AA==}
engines: {node: '>=8.0.0'}
peerDependencies:
stylelint: '>=11 < 17'
stylelint@17.13.0:
resolution: {integrity: sha512-G1WYzMerp7ihOaIe9VJCHLt12MoAD2QLf1AFerYP37+BCRBUK5UCpq8e/mN+zCIaJPKQcaxhE4WlPmqdiOx/gw==}
engines: {node: '>=20.19.0'}
@ -5972,8 +5961,6 @@ snapshots:
dependencies:
core-js-pure: 3.48.0
'@babel/runtime@7.28.6': {}
'@babel/runtime@7.29.7': {}
'@babel/template@7.29.7':
@ -6311,11 +6298,11 @@ snapshots:
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
'@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))':
'@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))':
dependencies:
glob: 13.0.6
react-docgen-typescript: 2.4.0(typescript@6.0.3)
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0)
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0)
optionalDependencies:
typescript: 6.0.3
@ -6996,10 +6983,10 @@ snapshots:
'@standard-schema/spec@1.1.0': {}
'@storybook/addon-docs@10.4.6(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))':
'@storybook/addon-docs@10.4.6(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))':
dependencies:
'@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.7)
'@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
'@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
'@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@storybook/react-dom-shim': 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))
react: 19.2.7
@ -7026,33 +7013,33 @@ snapshots:
'@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
optionalDependencies:
'@vitest/browser': 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))(vitest@4.1.9)
'@vitest/browser-playwright': 4.1.9(playwright@1.61.0)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))(vitest@4.1.9)
'@vitest/browser': 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))(vitest@4.1.9)
'@vitest/browser-playwright': 4.1.9(playwright@1.61.0)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))(vitest@4.1.9)
'@vitest/runner': 4.1.9
vitest: 4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
vitest: 4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
transitivePeerDependencies:
- react
- react-dom
'@storybook/builder-vite@10.4.6(esbuild@0.28.1)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))':
'@storybook/builder-vite@10.4.6(esbuild@0.28.1)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))':
dependencies:
'@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
'@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
ts-dedent: 2.3.0
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0)
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0)
transitivePeerDependencies:
- esbuild
- rollup
- webpack
'@storybook/csf-plugin@10.4.6(esbuild@0.28.1)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))':
'@storybook/csf-plugin@10.4.6(esbuild@0.28.1)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))':
dependencies:
storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
unplugin: 2.3.11
optionalDependencies:
esbuild: 0.28.1
rollup: 4.61.1
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0)
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0)
'@storybook/global@5.0.0': {}
@ -7070,11 +7057,11 @@ snapshots:
'@types/react': 19.2.17
'@types/react-dom': 19.2.3(@types/react@19.2.17)
'@storybook/react-vite@10.4.6(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))':
'@storybook/react-vite@10.4.6(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))':
dependencies:
'@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
'@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
'@rollup/pluginutils': 5.4.0(rollup@4.61.1)
'@storybook/builder-vite': 10.4.6(esbuild@0.28.1)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
'@storybook/builder-vite': 10.4.6(esbuild@0.28.1)(rollup@4.61.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
'@storybook/react': 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3)
empathic: 2.0.1
magic-string: 0.30.21
@ -7084,7 +7071,7 @@ snapshots:
resolve: 1.22.12
storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
tsconfig-paths: 4.2.0
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0)
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0)
transitivePeerDependencies:
- '@types/react'
- '@types/react-dom'
@ -7132,7 +7119,7 @@ snapshots:
'@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@babel/runtime': 7.28.6
'@babel/runtime': 7.29.7
'@testing-library/dom': 10.4.1
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
@ -7231,36 +7218,36 @@ snapshots:
'@types/triple-beam@1.3.5': {}
'@vitejs/plugin-react@6.0.2(babel-plugin-react-compiler@1.0.0)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))':
'@vitejs/plugin-react@6.0.2(babel-plugin-react-compiler@1.0.0)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))':
dependencies:
'@rolldown/pluginutils': 1.0.1
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0)
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0)
optionalDependencies:
babel-plugin-react-compiler: 1.0.0
'@vitest/browser-playwright@4.1.9(playwright@1.61.0)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))(vitest@4.1.9)':
'@vitest/browser-playwright@4.1.9(playwright@1.61.0)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))(vitest@4.1.9)':
dependencies:
'@vitest/browser': 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))(vitest@4.1.9)
'@vitest/mocker': 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
'@vitest/browser': 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))(vitest@4.1.9)
'@vitest/mocker': 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
playwright: 1.61.0
tinyrainbow: 3.1.0
vitest: 4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
vitest: 4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
transitivePeerDependencies:
- bufferutil
- msw
- utf-8-validate
- vite
'@vitest/browser@4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))(vitest@4.1.9)':
'@vitest/browser@4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))(vitest@4.1.9)':
dependencies:
'@blazediff/core': 1.9.1
'@vitest/mocker': 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
'@vitest/mocker': 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
'@vitest/utils': 4.1.9
magic-string: 0.30.21
pngjs: 7.0.0
sirv: 3.0.2
tinyrainbow: 3.1.0
vitest: 4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
vitest: 4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
ws: 8.21.0
transitivePeerDependencies:
- bufferutil
@ -7277,12 +7264,12 @@ snapshots:
istanbul-lib-report: 3.0.1
istanbul-reports: 3.2.0
magicast: 0.5.3
obug: 2.1.2
obug: 2.1.3
std-env: 4.1.0
tinyrainbow: 3.1.0
vitest: 4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
vitest: 4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
optionalDependencies:
'@vitest/browser': 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))(vitest@4.1.9)
'@vitest/browser': 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))(vitest@4.1.9)
'@vitest/expect@3.2.4':
dependencies:
@ -7301,13 +7288,13 @@ snapshots:
chai: 6.2.2
tinyrainbow: 3.1.0
'@vitest/mocker@4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))':
'@vitest/mocker@4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))':
dependencies:
'@vitest/spy': 4.1.9
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0)
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0)
'@vitest/pretty-format@3.2.4':
dependencies:
@ -7344,7 +7331,7 @@ snapshots:
sirv: 3.0.2
tinyglobby: 0.2.17
tinyrainbow: 3.1.0
vitest: 4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
vitest: 4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
'@vitest/utils@3.2.4':
dependencies:
@ -7389,7 +7376,7 @@ snapshots:
acorn@8.17.0: {}
agent-base@6.0.2(supports-color@5.5.0):
agent-base@6.0.2:
dependencies:
debug: 4.4.3(supports-color@5.5.0)
transitivePeerDependencies:
@ -7573,7 +7560,7 @@ snapshots:
autoprefixer@10.5.0(postcss@8.5.15):
dependencies:
browserslist: 4.28.2
caniuse-lite: 1.0.30001792
caniuse-lite: 1.0.30001799
fraction.js: 5.3.4
picocolors: 1.1.1
postcss: 8.5.15
@ -7585,11 +7572,11 @@ snapshots:
axe-core@4.11.1: {}
axios@1.16.1(supports-color@5.5.0):
axios@1.16.1:
dependencies:
follow-redirects: 1.16.0
form-data: 4.0.5
https-proxy-agent: 5.0.1(supports-color@5.5.0)
https-proxy-agent: 5.0.1
proxy-from-env: 2.1.0
transitivePeerDependencies:
- debug
@ -7623,7 +7610,7 @@ snapshots:
inherits: 2.0.4
readable-stream: 3.6.2
body-parser@2.2.2(supports-color@5.5.0):
body-parser@2.2.2:
dependencies:
bytes: 3.1.2
content-type: 1.0.5
@ -7711,8 +7698,6 @@ snapshots:
callsites@3.1.0: {}
caniuse-lite@1.0.30001792: {}
caniuse-lite@1.0.30001799: {}
canvas@3.2.3:
@ -8083,7 +8068,7 @@ snapshots:
dom-helpers@5.2.1:
dependencies:
'@babel/runtime': 7.28.6
'@babel/runtime': 7.29.7
csstype: 3.2.3
dom-serializer@1.4.1:
@ -8503,10 +8488,10 @@ snapshots:
expr-eval-fork@3.0.3: {}
express@5.2.1(supports-color@5.5.0):
express@5.2.1:
dependencies:
accepts: 2.0.0
body-parser: 2.2.2(supports-color@5.5.0)
body-parser: 2.2.2
content-disposition: 1.0.1
content-type: 1.0.5
cookie: 0.7.2
@ -8516,7 +8501,7 @@ snapshots:
encodeurl: 2.0.0
escape-html: 1.0.3
etag: 1.8.1
finalhandler: 2.1.1(supports-color@5.5.0)
finalhandler: 2.1.1
fresh: 2.0.0
http-errors: 2.0.1
merge-descriptors: 2.0.0
@ -8527,8 +8512,8 @@ snapshots:
proxy-addr: 2.0.7
qs: 6.15.2
range-parser: 1.2.1
router: 2.2.0(supports-color@5.5.0)
send: 1.2.1(supports-color@5.5.0)
router: 2.2.0
send: 1.2.1
serve-static: 2.2.1
statuses: 2.0.2
type-is: 2.0.1
@ -8598,7 +8583,7 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
finalhandler@2.1.1(supports-color@5.5.0):
finalhandler@2.1.1:
dependencies:
debug: 4.4.3(supports-color@5.5.0)
encodeurl: 2.0.0
@ -8859,9 +8844,9 @@ snapshots:
statuses: 2.0.2
toidentifier: 1.0.1
https-proxy-agent@5.0.1(supports-color@5.5.0):
https-proxy-agent@5.0.1:
dependencies:
agent-base: 6.0.2(supports-color@5.5.0)
agent-base: 6.0.2
debug: 4.4.3(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
@ -9152,7 +9137,7 @@ snapshots:
decimal.js: 10.6.0
html-encoding-sniffer: 6.0.0
is-potential-custom-element-name: 1.0.1
lru-cache: 11.3.6
lru-cache: 11.5.1
parse5: 8.0.1
saxes: 6.0.0
symbol-tree: 3.2.4
@ -9328,8 +9313,6 @@ snapshots:
lru-cache@10.4.3: {}
lru-cache@11.3.6: {}
lru-cache@11.5.1: {}
lru-cache@5.1.1:
@ -9573,8 +9556,6 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.1.1
obug@2.1.2: {}
obug@2.1.3: {}
on-finished@2.4.1:
@ -9717,7 +9698,7 @@ snapshots:
path-scurry@2.0.2:
dependencies:
lru-cache: 11.3.6
lru-cache: 11.5.1
minipass: 7.1.3
path-to-regexp@8.4.2: {}
@ -9981,7 +9962,7 @@ snapshots:
react-virtualized@9.22.6(react-dom@19.2.7(react@19.2.7))(react@19.2.7):
dependencies:
'@babel/runtime': 7.28.6
'@babel/runtime': 7.29.7
clsx: 1.2.1
dom-helpers: 5.2.1
loose-envify: 1.4.0
@ -10138,7 +10119,7 @@ snapshots:
fsevents: 2.3.3
optional: true
router@2.2.0(supports-color@5.5.0):
router@2.2.0:
dependencies:
debug: 4.4.3(supports-color@5.5.0)
depd: 2.0.0
@ -10281,6 +10262,15 @@ snapshots:
source-map-js: 1.2.1
optionalDependencies:
'@parcel/watcher': 2.5.6
optional: true
sass@1.101.0:
dependencies:
chokidar: 5.0.0
immutable: 5.1.6
source-map-js: 1.2.1
optionalDependencies:
'@parcel/watcher': 2.5.6
sax@1.6.0: {}
@ -10301,7 +10291,7 @@ snapshots:
semver@7.8.4: {}
send@1.2.1(supports-color@5.5.0):
send@1.2.1:
dependencies:
debug: 4.4.3(supports-color@5.5.0)
encodeurl: 2.0.0
@ -10322,7 +10312,7 @@ snapshots:
encodeurl: 2.0.0
escape-html: 1.0.3
parseurl: 1.3.3
send: 1.2.1(supports-color@5.5.0)
send: 1.2.1
transitivePeerDependencies:
- supports-color
@ -10629,33 +10619,37 @@ snapshots:
transitivePeerDependencies:
- tslib
stylelint-config-recommended-scss@17.0.1(postcss@8.5.15)(stylelint@17.13.0(supports-color@5.5.0)(typescript@6.0.3)):
stylelint-config-recommended-scss@17.0.1(postcss@8.5.15)(stylelint@17.13.0(typescript@6.0.3)):
dependencies:
postcss-scss: 4.0.9(postcss@8.5.15)
stylelint: 17.13.0(supports-color@5.5.0)(typescript@6.0.3)
stylelint-config-recommended: 18.0.0(stylelint@17.13.0(supports-color@5.5.0)(typescript@6.0.3))
stylelint-scss: 7.2.0(stylelint@17.13.0(supports-color@5.5.0)(typescript@6.0.3))
stylelint: 17.13.0(typescript@6.0.3)
stylelint-config-recommended: 18.0.0(stylelint@17.13.0(typescript@6.0.3))
stylelint-scss: 7.2.0(stylelint@17.13.0(typescript@6.0.3))
optionalDependencies:
postcss: 8.5.15
stylelint-config-recommended@18.0.0(stylelint@17.13.0(supports-color@5.5.0)(typescript@6.0.3)):
stylelint-config-recommended@18.0.0(stylelint@17.13.0(typescript@6.0.3)):
dependencies:
stylelint: 17.13.0(supports-color@5.5.0)(typescript@6.0.3)
stylelint: 17.13.0(typescript@6.0.3)
stylelint-config-standard-scss@17.0.0(postcss@8.5.15)(stylelint@17.13.0(supports-color@5.5.0)(typescript@6.0.3)):
stylelint-config-standard-scss@17.0.0(postcss@8.5.15)(stylelint@17.13.0(typescript@6.0.3)):
dependencies:
stylelint: 17.13.0(supports-color@5.5.0)(typescript@6.0.3)
stylelint-config-recommended-scss: 17.0.1(postcss@8.5.15)(stylelint@17.13.0(supports-color@5.5.0)(typescript@6.0.3))
stylelint-config-standard: 40.0.0(stylelint@17.13.0(supports-color@5.5.0)(typescript@6.0.3))
stylelint: 17.13.0(typescript@6.0.3)
stylelint-config-recommended-scss: 17.0.1(postcss@8.5.15)(stylelint@17.13.0(typescript@6.0.3))
stylelint-config-standard: 40.0.0(stylelint@17.13.0(typescript@6.0.3))
optionalDependencies:
postcss: 8.5.15
stylelint-config-standard@40.0.0(stylelint@17.13.0(supports-color@5.5.0)(typescript@6.0.3)):
stylelint-config-standard@40.0.0(stylelint@17.13.0(typescript@6.0.3)):
dependencies:
stylelint: 17.13.0(supports-color@5.5.0)(typescript@6.0.3)
stylelint-config-recommended: 18.0.0(stylelint@17.13.0(supports-color@5.5.0)(typescript@6.0.3))
stylelint: 17.13.0(typescript@6.0.3)
stylelint-config-recommended: 18.0.0(stylelint@17.13.0(typescript@6.0.3))
stylelint-scss@7.2.0(stylelint@17.13.0(supports-color@5.5.0)(typescript@6.0.3)):
stylelint-plugin-logical-css@2.1.0(stylelint@17.13.0(typescript@6.0.3)):
dependencies:
stylelint: 17.13.0(typescript@6.0.3)
stylelint-scss@7.2.0(stylelint@17.13.0(typescript@6.0.3)):
dependencies:
'@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
'@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
@ -10668,13 +10662,9 @@ snapshots:
postcss-resolve-nested-selector: 0.1.6
postcss-selector-parser: 7.1.1
postcss-value-parser: 4.2.0
stylelint: 17.13.0(supports-color@5.5.0)(typescript@6.0.3)
stylelint: 17.13.0(typescript@6.0.3)
stylelint-use-logical-spec@5.0.1(stylelint@17.13.0(supports-color@5.5.0)(typescript@6.0.3)):
dependencies:
stylelint: 17.13.0(supports-color@5.5.0)(typescript@6.0.3)
stylelint@17.13.0(supports-color@5.5.0)(typescript@6.0.3):
stylelint@17.13.0(typescript@6.0.3):
dependencies:
'@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
'@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
@ -10959,7 +10949,7 @@ snapshots:
unpipe@1.0.0: {}
unplugin-dts@1.0.2(@microsoft/api-extractor@7.56.2(@types/node@25.9.3))(esbuild@0.28.1)(rolldown@1.0.3)(rollup@4.61.1)(supports-color@5.5.0)(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0)):
unplugin-dts@1.0.2(@microsoft/api-extractor@7.56.2(@types/node@25.9.3))(esbuild@0.28.1)(rolldown@1.0.3)(rollup@4.61.1)(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0)):
dependencies:
'@rollup/pluginutils': 5.4.0(rollup@4.61.1)
'@volar/typescript': 2.4.28
@ -10975,7 +10965,7 @@ snapshots:
esbuild: 0.28.1
rolldown: 1.0.3
rollup: 4.61.1
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0)
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0)
transitivePeerDependencies:
- supports-color
@ -11037,13 +11027,13 @@ snapshots:
remove-trailing-separator: 1.1.0
replace-ext: 1.0.1
vite-plugin-dts@5.0.2(@microsoft/api-extractor@7.56.2(@types/node@25.9.3))(esbuild@0.28.1)(rolldown@1.0.3)(rollup@4.61.1)(supports-color@5.5.0)(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0)):
vite-plugin-dts@5.0.2(@microsoft/api-extractor@7.56.2(@types/node@25.9.3))(esbuild@0.28.1)(rolldown@1.0.3)(rollup@4.61.1)(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0)):
dependencies:
unplugin-dts: 1.0.2(@microsoft/api-extractor@7.56.2(@types/node@25.9.3))(esbuild@0.28.1)(rolldown@1.0.3)(rollup@4.61.1)(supports-color@5.5.0)(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
unplugin-dts: 1.0.2(@microsoft/api-extractor@7.56.2(@types/node@25.9.3))(esbuild@0.28.1)(rolldown@1.0.3)(rollup@4.61.1)(typescript@6.0.3)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
optionalDependencies:
'@microsoft/api-extractor': 7.56.2(@types/node@25.9.3)
rollup: 4.61.1
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0)
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0)
transitivePeerDependencies:
- '@rspack/core'
- '@vue/language-core'
@ -11053,7 +11043,7 @@ snapshots:
- typescript
- webpack
vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0):
vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0):
dependencies:
lightningcss: 1.32.0
picomatch: 4.0.4
@ -11064,13 +11054,13 @@ snapshots:
'@types/node': 25.9.3
esbuild: 0.28.1
fsevents: 2.3.3
sass: 1.100.0
sass: 1.101.0
sass-embedded: 1.100.0
vitest@4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0)):
vitest@4.1.9(@types/node@25.9.3)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(canvas@3.2.3))(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0)):
dependencies:
'@vitest/expect': 4.1.9
'@vitest/mocker': 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))
'@vitest/mocker': 4.1.9(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))
'@vitest/pretty-format': 4.1.9
'@vitest/runner': 4.1.9
'@vitest/snapshot': 4.1.9
@ -11079,7 +11069,7 @@ snapshots:
es-module-lexer: 2.1.0
expect-type: 1.3.0
magic-string: 0.30.21
obug: 2.1.2
obug: 2.1.3
pathe: 2.0.3
picomatch: 4.0.4
std-env: 4.1.0
@ -11087,11 +11077,11 @@ snapshots:
tinyexec: 1.0.2
tinyglobby: 0.2.17
tinyrainbow: 3.1.0
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0)
vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 25.9.3
'@vitest/browser-playwright': 4.1.9(playwright@1.61.0)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.100.0))(vitest@4.1.9)
'@vitest/browser-playwright': 4.1.9(playwright@1.61.0)(vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(sass-embedded@1.100.0)(sass@1.101.0))(vitest@4.1.9)
'@vitest/coverage-v8': 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9)
'@vitest/ui': 4.1.9(vitest@4.1.9)
jsdom: 29.1.1(canvas@3.2.3)
@ -11104,9 +11094,9 @@ snapshots:
dependencies:
xml-name-validator: 5.0.0
wait-on@9.0.10(supports-color@5.5.0):
wait-on@9.0.10:
dependencies:
axios: 1.16.1(supports-color@5.5.0)
axios: 1.16.1
joi: 18.2.1
lodash: 4.18.1
minimist: 1.2.8

View File

@ -167,24 +167,25 @@
:hint-message (:message error)})
props)]
(mf/with-effect [resolve-stream tokens token input-name touched? token-name]
(mf/with-effect [resolve-stream tokens token input-name token-name]
(let [subs (->> resolve-stream
(rx/debounce 300)
(rx/mapcat (partial resolve-value tokens token token-name))
(rx/map (fn [result]
(d/update-when result :error wte/resolve-error-assoc-message)))
(rx/subs! (fn [{:keys [error value]}]
(when touched?
(if error
(let [error' (:message error)]
(if (csu/group-name-conflict-error? error' token-name)
(swap! form assoc-in [:extra-errors ""] error')
(do
(swap! form assoc-in [:extra-errors input-name] error')
(reset! hint* {:message error' :type "error"}))))
(let [message (tr "workspace.tokens.resolved-value" value)]
(swap! form update :extra-errors dissoc input-name)
(reset! hint* {:message message :type "hint"})))))))]
(let [touched? (get-in @form [:touched input-name])]
(when touched?
(if error
(let [error' (:message error)]
(if (csu/group-name-conflict-error? error' token-name)
(swap! form assoc-in [:extra-errors ""] error')
(do
(swap! form assoc-in [:extra-errors input-name] error')
(reset! hint* {:message error' :type "error"}))))
(let [message (tr "workspace.tokens.resolved-value" value)]
(swap! form update :extra-errors dissoc input-name)
(reset! hint* {:message message :type "hint"}))))))))]
(fn []
(rx/dispose! subs))))

View File

@ -3,7 +3,7 @@ import postcssScss from "postcss-scss";
/** @type {import("stylelint").Config} */
export default {
extends: ["stylelint-config-standard-scss"],
plugins: ["stylelint-scss", "stylelint-use-logical-spec"],
plugins: ["stylelint-scss", "stylelint-plugin-logical-css"],
overrides: [
{
files: ["**/*.scss"],
@ -59,7 +59,7 @@ export default {
"font-weight-notation": "numeric",
// // URLs
"function-url-no-scheme-relative": true,
// "liberty/use-logical-spec": "always",
// "plugin/use-logical-properties-and-values": "always",
"selector-class-pattern": null,
"alpha-value-notation": "number",
"color-function-notation": "modern",

View File

@ -111,12 +111,22 @@ export class PenpotMcpServer {
*/
private readonly redisBridge?: RedisBridge;
/**
* Tenant identifier, read from the `PENPOT_TENANT` environment variable.
*
* Used to qualify Redis channel names so that multiple environments sharing a
* Redis instance do not interfere with each other. Defaults to `"default"`,
* matching the backend default.
*/
private readonly tenant: string;
constructor(private isMultiUser: boolean = false) {
// read port configuration from environment variables
this.host = process.env.PENPOT_MCP_SERVER_HOST ?? "localhost";
this.port = parseInt(process.env.PENPOT_MCP_SERVER_PORT ?? "4401", 10);
this.webSocketPort = parseInt(process.env.PENPOT_MCP_WEBSOCKET_PORT ?? "4402", 10);
this.replPort = parseInt(process.env.PENPOT_MCP_REPL_PORT ?? "4403", 10);
this.tenant = process.env.PENPOT_TENANT ?? "default";
this.configLoader = new ConfigurationLoader(process.cwd());
this.apiDocs = new ApiDocs();
@ -134,7 +144,7 @@ export class PenpotMcpServer {
// requiring the plugin and the MCP client to connect to the same instance.
const redisUri = process.env.PENPOT_MCP_REDIS_URI;
if (this.isMultiUser && redisUri) {
this.redisBridge = new RedisBridge(redisUri);
this.redisBridge = new RedisBridge(redisUri, this.tenant);
}
this.pluginBridge = new PluginBridge(this, this.webSocketPort, this.redisBridge);

View File

@ -2,16 +2,6 @@ import Redis from "ioredis";
import { PluginTaskRequest, PluginTaskResponse } from "@penpot/mcp-common";
import { createLogger } from "./logger";
/**
* Channel name prefixes for the task request/response pub/sub protocol.
*
* Request channels are keyed by user token (one per connected plugin); response
* channels are keyed by the task ID, so that only the instance that issued a given
* request receives its response.
*/
const TASK_REQUEST_CHANNEL_PREFIX = "penpot.mcp.task.req.";
const TASK_RESPONSE_CHANNEL_PREFIX = "penpot.mcp.task.res.";
/**
* Handler invoked for a task request arriving on a subscribed request channel.
*/
@ -46,6 +36,7 @@ export class RedisBridge {
private readonly logger = createLogger("RedisBridge");
private readonly publisher: Redis;
private readonly subscriber: Redis;
private readonly tenant: string;
/**
* Message handlers keyed by channel name.
@ -60,8 +51,11 @@ export class RedisBridge {
* Creates a Redis bridge connected to the given Redis instance.
*
* @param redisUri - The Redis connection URI (e.g. `redis://host:6379`)
* @param tenant - The tenant identifier, used to qualify Redis channel names so that
* multiple environments sharing a Redis instance do not interfere.
*/
constructor(redisUri: string) {
constructor(redisUri: string, tenant: string) {
this.tenant = tenant;
this.publisher = new Redis(redisUri);
this.subscriber = new Redis(redisUri);
@ -75,6 +69,16 @@ export class RedisBridge {
});
}
/** Builds the Redis Pub/Sub channel name for a task request addressed to a user token. */
private requestChannel(userToken: string): string {
return `penpot.mcp.${this.tenant}.task.req.${userToken}`;
}
/** Builds the Redis Pub/Sub channel name for a task response keyed by task ID. */
private responseChannel(taskId: string): string {
return `penpot.mcp.${this.tenant}.task.res.${taskId}`;
}
/**
* Subscribes to the response channel for the given task ID and publishes the task
* request to the given user token's request channel.
@ -93,8 +97,8 @@ export class RedisBridge {
request: PluginTaskRequest,
onResponse: TaskResponseHandler
): Promise<void> {
const responseChannel = `${TASK_RESPONSE_CHANNEL_PREFIX}${request.id}`;
const requestChannel = `${TASK_REQUEST_CHANNEL_PREFIX}${userToken}`;
const responseChannel = this.responseChannel(request.id);
const requestChannel = this.requestChannel(userToken);
this.handlers.set(responseChannel, (rawMessage) => {
// a response channel is single-use: remove the handler and unsubscribe on delivery
@ -122,7 +126,7 @@ export class RedisBridge {
* @param taskId - The task ID whose response channel to unsubscribe from
*/
async unsubscribeFromResponse(taskId: string): Promise<void> {
const responseChannel = `${TASK_RESPONSE_CHANNEL_PREFIX}${taskId}`;
const responseChannel = this.responseChannel(taskId);
this.handlers.delete(responseChannel);
await this.subscriber.unsubscribe(responseChannel);
}
@ -137,7 +141,7 @@ export class RedisBridge {
* @param response - The serialized plugin task response, passed through verbatim
*/
publishTaskResponse(taskId: string, response: PluginTaskResponse<any>): void {
const responseChannel = `${TASK_RESPONSE_CHANNEL_PREFIX}${taskId}`;
const responseChannel = this.responseChannel(taskId);
void this.publisher.publish(responseChannel, JSON.stringify(response));
}
@ -150,7 +154,7 @@ export class RedisBridge {
* @param handler - The handler to invoke for incoming requests
*/
async subscribeToTasks(userToken: string, handler: TaskRequestHandler): Promise<void> {
const requestChannel = `${TASK_REQUEST_CHANNEL_PREFIX}${userToken}`;
const requestChannel = this.requestChannel(userToken);
this.handlers.set(requestChannel, (rawMessage) => {
try {
handler(JSON.parse(rawMessage) as PluginTaskRequest);
@ -167,7 +171,7 @@ export class RedisBridge {
* @param userToken - The user token whose request channel to unsubscribe from
*/
async unsubscribeFromTasks(userToken: string): Promise<void> {
const requestChannel = `${TASK_REQUEST_CHANNEL_PREFIX}${userToken}`;
const requestChannel = this.requestChannel(userToken);
this.handlers.delete(requestChannel);
await this.subscriber.unsubscribe(requestChannel);
}