Compare commits

...

11 Commits

Author SHA1 Message Date
Atash03 a6028cdbf2 fix: add link to the themes nav 2026-03-12 23:52:35 +05:00
Atash03 dc1053a957 fix: UI button color change 2026-02-20 21:09:05 +05:00
Atash03 a074625468 add tm flag png 2026-02-16 00:21:24 +05:00
Atash03 6dc442db1f add turkmen language 2026-02-15 05:05:32 +05:00
Batyr 05488cd400 build 2026-01-04 21:50:51 +05:00
Batyr 023fdf6952 build 2025-12-29 22:23:16 +05:00
Batyr 2da9746df0 build 2025-12-29 18:48:05 +05:00
Batyr 0c3821a9bb change 2025-12-16 16:55:54 +05:00
Batyr 636963445e build 2025-12-10 15:28:38 +05:00
Batyr 1cc5744acb Merge branch 'main' of ssh://216.250.8.93:2018/~/repos/turkmen-textile-react 2025-12-10 15:25:19 +05:00
Batyr 0d49ef7a79 replaced vid 2025-11-22 18:55:31 +05:00
85 changed files with 3602 additions and 644 deletions

5
.gitignore vendored
View File

@ -21,3 +21,8 @@ dist-ssr
*.njsproj
*.sln
*.sw?
# ai
.claude
.agents

878
bun.lock Normal file
View File

@ -0,0 +1,878 @@
{
"lockfileVersion": 1,
"workspaces": {
"": {
"name": "turkmen-textile",
"dependencies": {
"@hookform/resolvers": "^3.10.0",
"@radix-ui/react-dialog": "^1.1.5",
"@radix-ui/react-label": "^2.1.1",
"@radix-ui/react-navigation-menu": "^1.2.13",
"@radix-ui/react-popover": "^1.1.5",
"@radix-ui/react-radio-group": "^1.2.2",
"@radix-ui/react-slot": "^1.1.1",
"@tanstack/react-query": "^5.66.0",
"axios": "^1.7.9",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"embla-carousel-autoplay": "^8.5.2",
"embla-carousel-react": "^8.5.2",
"i18next": "^24.2.2",
"lenis": "^1.3.4",
"locomotive-scroll": "^4.1.4",
"lucide-react": "^0.473.0",
"motion": "^12.0.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-hook-form": "^7.54.2",
"react-i18next": "^15.4.0",
"react-router-dom": "^7.1.3",
"tailwind-merge": "^2.6.0",
"tailwindcss-animate": "^1.0.7",
"usehooks-ts": "^3.1.0",
"zod": "^3.24.1",
"zustand": "^5.0.3",
},
"devDependencies": {
"@eslint/js": "^9.17.0",
"@types/locomotive-scroll": "^4.1.4",
"@types/node": "^22.12.0",
"@types/react": "^18.3.18",
"@types/react-dom": "^18.3.5",
"@vitejs/plugin-react-swc": "^3.5.0",
"autoprefixer": "^10.4.20",
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.16",
"globals": "^15.14.0",
"postcss": "^8.5.1",
"tailwindcss": "^3.4.17",
"typescript": "~5.6.2",
"typescript-eslint": "^8.18.2",
"vite": "^6.0.5",
},
},
},
"packages": {
"@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="],
"@babel/runtime": ["@babel/runtime@7.26.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ=="],
"@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.24.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA=="],
"@esbuild/android-arm": ["@esbuild/android-arm@0.24.2", "", { "os": "android", "cpu": "arm" }, "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q=="],
"@esbuild/android-arm64": ["@esbuild/android-arm64@0.24.2", "", { "os": "android", "cpu": "arm64" }, "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg=="],
"@esbuild/android-x64": ["@esbuild/android-x64@0.24.2", "", { "os": "android", "cpu": "x64" }, "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw=="],
"@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.24.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA=="],
"@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.24.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA=="],
"@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.24.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg=="],
"@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.24.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q=="],
"@esbuild/linux-arm": ["@esbuild/linux-arm@0.24.2", "", { "os": "linux", "cpu": "arm" }, "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA=="],
"@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.24.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg=="],
"@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.24.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw=="],
"@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ=="],
"@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw=="],
"@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.24.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw=="],
"@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q=="],
"@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.24.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw=="],
"@esbuild/linux-x64": ["@esbuild/linux-x64@0.24.2", "", { "os": "linux", "cpu": "x64" }, "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q=="],
"@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.24.2", "", { "os": "none", "cpu": "arm64" }, "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw=="],
"@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.24.2", "", { "os": "none", "cpu": "x64" }, "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw=="],
"@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.24.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A=="],
"@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.24.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA=="],
"@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.24.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig=="],
"@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.24.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ=="],
"@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.24.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA=="],
"@esbuild/win32-x64": ["@esbuild/win32-x64@0.24.2", "", { "os": "win32", "cpu": "x64" }, "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg=="],
"@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.4.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA=="],
"@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="],
"@eslint/config-array": ["@eslint/config-array@0.19.2", "", { "dependencies": { "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w=="],
"@eslint/core": ["@eslint/core@0.10.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw=="],
"@eslint/eslintrc": ["@eslint/eslintrc@3.2.0", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w=="],
"@eslint/js": ["@eslint/js@9.19.0", "", {}, "sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ=="],
"@eslint/object-schema": ["@eslint/object-schema@2.1.6", "", {}, "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA=="],
"@eslint/plugin-kit": ["@eslint/plugin-kit@0.2.5", "", { "dependencies": { "@eslint/core": "^0.10.0", "levn": "^0.4.1" } }, "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A=="],
"@floating-ui/core": ["@floating-ui/core@1.6.9", "", { "dependencies": { "@floating-ui/utils": "^0.2.9" } }, "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw=="],
"@floating-ui/dom": ["@floating-ui/dom@1.6.13", "", { "dependencies": { "@floating-ui/core": "^1.6.0", "@floating-ui/utils": "^0.2.9" } }, "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w=="],
"@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.2", "", { "dependencies": { "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A=="],
"@floating-ui/utils": ["@floating-ui/utils@0.2.9", "", {}, "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg=="],
"@hookform/resolvers": ["@hookform/resolvers@3.10.0", "", { "peerDependencies": { "react-hook-form": "^7.0.0" } }, "sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag=="],
"@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="],
"@humanfs/node": ["@humanfs/node@0.16.6", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" } }, "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw=="],
"@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="],
"@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.1", "", {}, "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA=="],
"@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="],
"@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="],
"@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="],
"@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="],
"@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="],
"@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="],
"@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="],
"@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="],
"@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="],
"@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="],
"@radix-ui/primitive": ["@radix-ui/primitive@1.1.1", "", {}, "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA=="],
"@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.2", "", { "dependencies": { "@radix-ui/react-primitive": "2.0.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg=="],
"@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw=="],
"@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw=="],
"@radix-ui/react-context": ["@radix-ui/react-context@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q=="],
"@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.6", "", { "dependencies": { "@radix-ui/primitive": "1.1.1", "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.5", "@radix-ui/react-focus-guards": "1.1.1", "@radix-ui/react-focus-scope": "1.1.2", "@radix-ui/react-id": "1.1.0", "@radix-ui/react-portal": "1.1.4", "@radix-ui/react-presence": "1.1.2", "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-slot": "1.1.2", "@radix-ui/react-use-controllable-state": "1.1.0", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw=="],
"@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw=="],
"@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.5", "", { "dependencies": { "@radix-ui/primitive": "1.1.1", "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-use-callback-ref": "1.1.0", "@radix-ui/react-use-escape-keydown": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg=="],
"@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg=="],
"@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.2", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA=="],
"@radix-ui/react-id": ["@radix-ui/react-id@1.1.0", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA=="],
"@radix-ui/react-label": ["@radix-ui/react-label@2.1.2", "", { "dependencies": { "@radix-ui/react-primitive": "2.0.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-zo1uGMTaNlHehDyFQcDZXRJhUPDuukcnHz0/jnrup0JA6qL+AFpAnty+7VKa9esuU5xTblAZzTGYJKSKaBxBhw=="],
"@radix-ui/react-navigation-menu": ["@radix-ui/react-navigation-menu@1.2.14", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w=="],
"@radix-ui/react-popover": ["@radix-ui/react-popover@1.1.6", "", { "dependencies": { "@radix-ui/primitive": "1.1.1", "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.5", "@radix-ui/react-focus-guards": "1.1.1", "@radix-ui/react-focus-scope": "1.1.2", "@radix-ui/react-id": "1.1.0", "@radix-ui/react-popper": "1.2.2", "@radix-ui/react-portal": "1.1.4", "@radix-ui/react-presence": "1.1.2", "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-slot": "1.1.2", "@radix-ui/react-use-controllable-state": "1.1.0", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-NQouW0x4/GnkFJ/pRqsIS3rM/k97VzKnVb2jB7Gq7VEGPy5g7uNV1ykySFt7eWSp3i2uSGFwaJcvIRJBAHmmFg=="],
"@radix-ui/react-popper": ["@radix-ui/react-popper@1.2.2", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.2", "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-use-callback-ref": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0", "@radix-ui/react-use-rect": "1.1.0", "@radix-ui/react-use-size": "1.1.0", "@radix-ui/rect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA=="],
"@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.4", "", { "dependencies": { "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA=="],
"@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.2", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg=="],
"@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.0.2", "", { "dependencies": { "@radix-ui/react-slot": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w=="],
"@radix-ui/react-radio-group": ["@radix-ui/react-radio-group@1.2.3", "", { "dependencies": { "@radix-ui/primitive": "1.1.1", "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", "@radix-ui/react-presence": "1.1.2", "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-roving-focus": "1.1.2", "@radix-ui/react-use-controllable-state": "1.1.0", "@radix-ui/react-use-previous": "1.1.0", "@radix-ui/react-use-size": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-xtCsqt8Rp09FK50ItqEqTJ7Sxanz8EM8dnkVIhJrc/wkMMomSmXHvYbhv3E7Zx4oXh98aaLt9W679SUYXg4IDA=="],
"@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.2", "", { "dependencies": { "@radix-ui/primitive": "1.1.1", "@radix-ui/react-collection": "1.1.2", "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", "@radix-ui/react-id": "1.1.0", "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-use-callback-ref": "1.1.0", "@radix-ui/react-use-controllable-state": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw=="],
"@radix-ui/react-slot": ["@radix-ui/react-slot@1.1.2", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ=="],
"@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="],
"@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.1.0", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw=="],
"@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="],
"@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.0", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw=="],
"@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="],
"@radix-ui/react-use-previous": ["@radix-ui/react-use-previous@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ=="],
"@radix-ui/react-use-rect": ["@radix-ui/react-use-rect@1.1.0", "", { "dependencies": { "@radix-ui/rect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ=="],
"@radix-ui/react-use-size": ["@radix-ui/react-use-size@1.1.0", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw=="],
"@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.3", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug=="],
"@radix-ui/rect": ["@radix-ui/rect@1.1.0", "", {}, "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg=="],
"@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.34.5", "", { "os": "android", "cpu": "arm" }, "sha512-JXmmQcKQtpf3Z6lvA8akkrHDZ5AEfgc2hLMix1/X5BhQbezBQ0AP5GYLdU8jsQRme8qr2sscCe3wizp7UT0L9g=="],
"@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.34.5", "", { "os": "android", "cpu": "arm64" }, "sha512-9/A8/ZBOprUjkrJoP9BBEq2vdSud6BPd3LChw09bJQiEZH5oN4kWIkHu90cA0Cj0cSF5cIaD76+0lA+d5KHmpQ=="],
"@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.34.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-b9oCfgHKfc1AJEQ5sEpE8Kf6s7aeygj5bZAsl1hTpZc1V9cfZASFSXzzNj7o/BQNPbjmVkVxpCCLRhBfLXhJ5g=="],
"@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.34.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-Gz42gKBQPoFdMYdsVqkcpttYOO/0aP7f+1CgMaeZEz0gss7dop1TsO3hT77Iroz/TV7PdPUG/RYlj9EA39L4dw=="],
"@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.34.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-JPkafjkOFaupd8VQYsXfGFKC2pfMr7hwSYGkVGNwhbW0k0lHHyIdhCSNBendJ4O7YlT4yRyKXoms1TL7saO7SQ=="],
"@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.34.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-j6Q8VFqyI8hZM33h1JC6DZK2w8ejkXqEMozTrtIEGfRVMpVZL3GrLOOYEUkAgUSpJ9sb2w+FEpjGj7IHRcQfdw=="],
"@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.34.5", "", { "os": "linux", "cpu": "arm" }, "sha512-6jyiXKF9Xq6x9yQjct5xrRT0VghJk5VzAfed3o0hgncwacZkzOdR0TXLRNjexsEXWN8tG7jWWwsVk7WeFi//gw=="],
"@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.34.5", "", { "os": "linux", "cpu": "arm" }, "sha512-cOTYe5tLcGAvGztRLIqx87LE7j/qjaAqFrrHsPFlnuhhhFO5LSr2AzvdQYuxomJMzMBrXkMRNl9bQEpDZ5bjLQ=="],
"@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.34.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-KHlrd+YqmS7rriW+LBb1kQNYmd5w1sAIG3z7HEpnQOrg/skeYYv9DAcclGL9gpFdpnzmiAEkzsTT74kZWUtChQ=="],
"@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.34.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-uOb6hzDqym4Sw+qw3+svS3SmwQGVUhyTdPKyHDdlYg1Z0aHjdNmjwRY7zw/90/UfBe/yD7Mv2mYKhQpOfy4RYA=="],
"@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.34.5", "", { "os": "linux", "cpu": "none" }, "sha512-pARu8ZKANZH4wINLdHLKG69EPwJswM6A+Ox1a9LpiclRQoyjacFFTtXN3akKQ2ufJXDasO/pWvxKN9ZfCgEoFA=="],
"@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.34.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-crUWn12NRmCdao2YwS1GvlPCVypMBMJlexTaantaP2+dAMd2eZBErFcKG8hZYEHjSbbk2UoH1aTlyeA4iKLqSA=="],
"@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.34.5", "", { "os": "linux", "cpu": "none" }, "sha512-XtD/oMhCdixi3x8rCNyDRMUsLo1Z+1UQcK+oR7AsjglGov9ETiT3TNFhUPzaGC1jH+uaMtPhxrVRUub+pnAKTg=="],
"@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.34.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-V3+BvgyHb21aF7lw0sc78Tv0+xLp4lm2OM7CKFVrBuppsMvtl/9O5y2OX4tdDT0EhIsDP/ObJPqDuEg1ZoTwSQ=="],
"@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.34.5", "", { "os": "linux", "cpu": "x64" }, "sha512-SkCIXLGk42yldTcH8UXh++m0snVxp9DLf4meb1mWm0lC8jzxjFBwSLGtUSeLgQDsC05iBaIhyjNX46DlByrApQ=="],
"@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.34.5", "", { "os": "linux", "cpu": "x64" }, "sha512-iUcH3FBtBN2/Ce0rI84suRhD0+bB5BVEffqOwsGaX5py5TuYLOQa7S7oVBP0NKtB5rub3i9IvZtMXiD96l5v0A=="],
"@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-PUbWd+h/h6rUowalDYIdc9S9LJXbQDMcJe0BjABl3oT3efYRgZ8aUe8ZZDSie7y+fz6Z+rueNfdorIbkWv5Eqg=="],
"@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-3vncGhOJiAUR85fnAXJyvSp2GaDWYByIQmW68ZAr+e8kIxgvJ1VaZbfHD5BO5X6hwRQdY6Um/XfA3l5c2lV+OQ=="],
"@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-Mi8yVUlQOoeBpY72n75VLATptPGvj2lHa47rQdK9kZ4MoG5Ve86aVIU+PO3tBklTCBtILtdRfXS0EvIbXgmCAg=="],
"@swc/core": ["@swc/core@1.10.14", "", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.17" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.10.14", "@swc/core-darwin-x64": "1.10.14", "@swc/core-linux-arm-gnueabihf": "1.10.14", "@swc/core-linux-arm64-gnu": "1.10.14", "@swc/core-linux-arm64-musl": "1.10.14", "@swc/core-linux-x64-gnu": "1.10.14", "@swc/core-linux-x64-musl": "1.10.14", "@swc/core-win32-arm64-msvc": "1.10.14", "@swc/core-win32-ia32-msvc": "1.10.14", "@swc/core-win32-x64-msvc": "1.10.14" }, "peerDependencies": { "@swc/helpers": "*" }, "optionalPeers": ["@swc/helpers"] }, "sha512-WSrnE6JRnH20ZYjOOgSS4aOaPv9gxlkI2KRkN24kagbZnPZMnN8bZZyzw1rrLvwgpuRGv17Uz+hflosbR+SP6w=="],
"@swc/core-darwin-arm64": ["@swc/core-darwin-arm64@1.10.14", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Dh4VyrhDDb05tdRmqJ/MucOPMTnrB4pRJol18HVyLlqu1HOT5EzonUniNTCdQbUXjgdv5UVJSTE1lYTzrp+myA=="],
"@swc/core-darwin-x64": ["@swc/core-darwin-x64@1.10.14", "", { "os": "darwin", "cpu": "x64" }, "sha512-KpzotL/I0O12RE3tF8NmQErINv0cQe/0mnN/Q50ESFzB5kU6bLgp2HMnnwDTm/XEZZRJCNe0oc9WJ5rKbAJFRQ=="],
"@swc/core-linux-arm-gnueabihf": ["@swc/core-linux-arm-gnueabihf@1.10.14", "", { "os": "linux", "cpu": "arm" }, "sha512-20yRXZjMJVz1wp1TcscKiGTVXistG+saIaxOmxSNQia1Qun3hSWLL+u6+5kXbfYGr7R2N6kqSwtZbIfJI25r9Q=="],
"@swc/core-linux-arm64-gnu": ["@swc/core-linux-arm64-gnu@1.10.14", "", { "os": "linux", "cpu": "arm64" }, "sha512-Gy7cGrNkiMfPxQyLGxdgXPwyWzNzbHuWycJFcoKBihxZKZIW8hkPBttkGivuLC+0qOgsV2/U+S7tlvAju7FtmQ=="],
"@swc/core-linux-arm64-musl": ["@swc/core-linux-arm64-musl@1.10.14", "", { "os": "linux", "cpu": "arm64" }, "sha512-+oYVqJvFw62InZ8PIy1rBACJPC2WTe4vbVb9kM1jJj2D7dKLm9acnnYIVIDsM5Wo7Uab8RvPHXVbs19IBurzuw=="],
"@swc/core-linux-x64-gnu": ["@swc/core-linux-x64-gnu@1.10.14", "", { "os": "linux", "cpu": "x64" }, "sha512-OmEbVEKQFLQVHwo4EJl9osmlulURy46k232Opfpn/1ji0t2KcNCci3POsnfMuoZjLkGJv8vGNJdPQxX+CP+wSA=="],
"@swc/core-linux-x64-musl": ["@swc/core-linux-x64-musl@1.10.14", "", { "os": "linux", "cpu": "x64" }, "sha512-OZW+Icm8DMPqHbhdxplkuG8qrNnPk5i7xJOZWYi1y5bTjgGFI4nEzrsmmeHKMdQTaWwsFrm3uK1rlyQ48MmXmg=="],
"@swc/core-win32-arm64-msvc": ["@swc/core-win32-arm64-msvc@1.10.14", "", { "os": "win32", "cpu": "arm64" }, "sha512-sTvc+xrDQXy3HXZFtTEClY35Efvuc3D+busYm0+rb1+Thau4HLRY9WP+sOKeGwH9/16rzfzYEqD7Ds8A9ykrHw=="],
"@swc/core-win32-ia32-msvc": ["@swc/core-win32-ia32-msvc@1.10.14", "", { "os": "win32", "cpu": "ia32" }, "sha512-j2iQ4y9GWTKtES5eMU0sDsFdYni7IxME7ejFej25Tv3Fq4B+U9tgtYWlJwh1858nIWDXelHiKcSh/UICAyVMdQ=="],
"@swc/core-win32-x64-msvc": ["@swc/core-win32-x64-msvc@1.10.14", "", { "os": "win32", "cpu": "x64" }, "sha512-TYtWkUSMkjs0jGPeWdtWbex4B+DlQZmN/ySVLiPI+EltYCLEXsFMkVFq6aWn48dqFHggFK0UYfvDrJUR2c3Qxg=="],
"@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="],
"@swc/types": ["@swc/types@0.1.17", "", { "dependencies": { "@swc/counter": "^0.1.3" } }, "sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ=="],
"@tanstack/query-core": ["@tanstack/query-core@5.90.20", "", {}, "sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg=="],
"@tanstack/react-query": ["@tanstack/react-query@5.90.21", "", { "dependencies": { "@tanstack/query-core": "5.90.20" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-0Lu6y5t+tvlTJMTO7oh5NSpJfpg/5D41LlThfepTixPYkJ0sE2Jj0m0f6yYqujBwIXlId87e234+MxG3D3g7kg=="],
"@types/cookie": ["@types/cookie@0.6.0", "", {}, "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="],
"@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="],
"@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
"@types/locomotive-scroll": ["@types/locomotive-scroll@4.1.4", "", {}, "sha512-G8GUr/ML/Ssxxl83VYbtFHMFoPNOQh/glzPWi5Z3Jk7Hng26Sl0ckAV11uq1AGKEq40jFMPhyAIuQ6fGPiBmHQ=="],
"@types/node": ["@types/node@22.13.1", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew=="],
"@types/prop-types": ["@types/prop-types@15.7.14", "", {}, "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ=="],
"@types/react": ["@types/react@18.3.18", "", { "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ=="],
"@types/react-dom": ["@types/react-dom@18.3.5", "", { "peerDependencies": { "@types/react": "^18.0.0" } }, "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q=="],
"@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.23.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.23.0", "@typescript-eslint/type-utils": "8.23.0", "@typescript-eslint/utils": "8.23.0", "@typescript-eslint/visitor-keys": "8.23.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", "ts-api-utils": "^2.0.1" }, "peerDependencies": { "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" } }, "sha512-vBz65tJgRrA1Q5gWlRfvoH+w943dq9K1p1yDBY2pc+a1nbBLZp7fB9+Hk8DaALUbzjqlMfgaqlVPT1REJdkt/w=="],
"@typescript-eslint/parser": ["@typescript-eslint/parser@8.23.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.23.0", "@typescript-eslint/types": "8.23.0", "@typescript-eslint/typescript-estree": "8.23.0", "@typescript-eslint/visitor-keys": "8.23.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" } }, "sha512-h2lUByouOXFAlMec2mILeELUbME5SZRN/7R9Cw2RD2lRQQY08MWMM+PmVVKKJNK1aIwqTo9t/0CvOxwPbRIE2Q=="],
"@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.23.0", "", { "dependencies": { "@typescript-eslint/types": "8.23.0", "@typescript-eslint/visitor-keys": "8.23.0" } }, "sha512-OGqo7+dXHqI7Hfm+WqkZjKjsiRtFUQHPdGMXzk5mYXhJUedO7e/Y7i8AK3MyLMgZR93TX4bIzYrfyVjLC+0VSw=="],
"@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.23.0", "", { "dependencies": { "@typescript-eslint/typescript-estree": "8.23.0", "@typescript-eslint/utils": "8.23.0", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" } }, "sha512-iIuLdYpQWZKbiH+RkCGc6iu+VwscP5rCtQ1lyQ7TYuKLrcZoeJVpcLiG8DliXVkUxirW/PWlmS+d6yD51L9jvA=="],
"@typescript-eslint/types": ["@typescript-eslint/types@8.23.0", "", {}, "sha512-1sK4ILJbCmZOTt9k4vkoulT6/y5CHJ1qUYxqpF1K/DBAd8+ZUL4LlSCxOssuH5m4rUaaN0uS0HlVPvd45zjduQ=="],
"@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.23.0", "", { "dependencies": { "@typescript-eslint/types": "8.23.0", "@typescript-eslint/visitor-keys": "8.23.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.0.1" }, "peerDependencies": { "typescript": ">=4.8.4 <5.8.0" } }, "sha512-LcqzfipsB8RTvH8FX24W4UUFk1bl+0yTOf9ZA08XngFwMg4Kj8A+9hwz8Cr/ZS4KwHrmo9PJiLZkOt49vPnuvQ=="],
"@typescript-eslint/utils": ["@typescript-eslint/utils@8.23.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "8.23.0", "@typescript-eslint/types": "8.23.0", "@typescript-eslint/typescript-estree": "8.23.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" } }, "sha512-uB/+PSo6Exu02b5ZEiVtmY6RVYO7YU5xqgzTIVZwTHvvK3HsL8tZZHFaTLFtRG3CsV4A5mhOv+NZx5BlhXPyIA=="],
"@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.23.0", "", { "dependencies": { "@typescript-eslint/types": "8.23.0", "eslint-visitor-keys": "^4.2.0" } }, "sha512-oWWhcWDLwDfu++BGTZcmXWqpwtkwb5o7fxUIGksMQQDSdPW9prsSnfIOZMlsj4vBOSrcnjIUZMiIjODgGosFhQ=="],
"@vitejs/plugin-react-swc": ["@vitejs/plugin-react-swc@3.7.2", "", { "dependencies": { "@swc/core": "^1.7.26" }, "peerDependencies": { "vite": "^4 || ^5 || ^6" } }, "sha512-y0byko2b2tSVVf5Gpng1eEhX1OvPC7x8yns1Fx8jDzlJp4LS6CMkCPfLw47cjyoMrshQDoQw4qcgjsU9VvlCew=="],
"acorn": ["acorn@8.14.0", "", { "bin": "bin/acorn" }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="],
"acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="],
"ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="],
"ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="],
"ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
"any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="],
"anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="],
"arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="],
"argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
"aria-hidden": ["aria-hidden@1.2.4", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A=="],
"asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="],
"autoprefixer": ["autoprefixer@10.4.20", "", { "dependencies": { "browserslist": "^4.23.3", "caniuse-lite": "^1.0.30001646", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": "bin/autoprefixer" }, "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g=="],
"axios": ["axios@1.7.9", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw=="],
"balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
"bezier-easing": ["bezier-easing@2.1.0", "", {}, "sha512-gbIqZ/eslnUFC1tjEvtz0sgx+xTK20wDnYMIA27VA04R7w6xxXQPZDbibjA9DTWZRA2CXtwHykkVzlCaAJAZig=="],
"binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="],
"bindall-standalone": ["bindall-standalone@1.0.5", "", {}, "sha512-HDI7YBWXVJk/eoGz+e4lYQQJnYp1ZHcUvAY71lVptLMhQnDm86vD73AGPw2qIlgYR3P0bjmoAcXiA8qhFejBhA=="],
"brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="],
"braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
"browserslist": ["browserslist@4.24.4", "", { "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": "cli.js" }, "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A=="],
"callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="],
"camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="],
"caniuse-lite": ["caniuse-lite@1.0.30001698", "", {}, "sha512-xJ3km2oiG/MbNU8G6zIq6XRZ6HtAOVXsbOrP/blGazi52kc5Yy7b6sDA5O+FbROzRrV7BSTllLHuNvmawYUJjw=="],
"chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
"chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="],
"class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="],
"clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="],
"color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
"color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
"combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="],
"commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="],
"concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="],
"cookie": ["cookie@1.0.2", "", {}, "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="],
"cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
"cssesc": ["cssesc@3.0.0", "", { "bin": "bin/cssesc" }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="],
"csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
"debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="],
"deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="],
"delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="],
"detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="],
"didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="],
"dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="],
"eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="],
"electron-to-chromium": ["electron-to-chromium@1.5.96", "", {}, "sha512-8AJUW6dh75Fm/ny8+kZKJzI1pgoE8bKLZlzDU2W1ENd+DXKJrx7I7l9hb8UWR4ojlnb5OlixMt00QWiYJoVw1w=="],
"embla-carousel": ["embla-carousel@8.5.2", "", {}, "sha512-xQ9oVLrun/eCG/7ru3R+I5bJ7shsD8fFwLEY7yPe27/+fDHCNj0OT5EoG5ZbFyOxOcG6yTwW8oTz/dWyFnyGpg=="],
"embla-carousel-autoplay": ["embla-carousel-autoplay@8.6.0", "", { "peerDependencies": { "embla-carousel": "8.6.0" } }, "sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA=="],
"embla-carousel-react": ["embla-carousel-react@8.5.2", "", { "dependencies": { "embla-carousel": "8.5.2", "embla-carousel-reactive-utils": "8.5.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-Tmx+uY3MqseIGdwp0ScyUuxpBgx5jX1f7od4Cm5mDwg/dptEiTKf9xp6tw0lZN2VA9JbnVMl/aikmbc53c6QFA=="],
"embla-carousel-reactive-utils": ["embla-carousel-reactive-utils@8.5.2", "", { "peerDependencies": { "embla-carousel": "8.5.2" } }, "sha512-QC8/hYSK/pEmqEdU1IO5O+XNc/Ptmmq7uCB44vKplgLKhB/l0+yvYx0+Cv0sF6Ena8Srld5vUErZkT+yTahtDg=="],
"emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="],
"esbuild": ["esbuild@0.24.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.24.2", "@esbuild/android-arm": "0.24.2", "@esbuild/android-arm64": "0.24.2", "@esbuild/android-x64": "0.24.2", "@esbuild/darwin-arm64": "0.24.2", "@esbuild/darwin-x64": "0.24.2", "@esbuild/freebsd-arm64": "0.24.2", "@esbuild/freebsd-x64": "0.24.2", "@esbuild/linux-arm": "0.24.2", "@esbuild/linux-arm64": "0.24.2", "@esbuild/linux-ia32": "0.24.2", "@esbuild/linux-loong64": "0.24.2", "@esbuild/linux-mips64el": "0.24.2", "@esbuild/linux-ppc64": "0.24.2", "@esbuild/linux-riscv64": "0.24.2", "@esbuild/linux-s390x": "0.24.2", "@esbuild/linux-x64": "0.24.2", "@esbuild/netbsd-arm64": "0.24.2", "@esbuild/netbsd-x64": "0.24.2", "@esbuild/openbsd-arm64": "0.24.2", "@esbuild/openbsd-x64": "0.24.2", "@esbuild/sunos-x64": "0.24.2", "@esbuild/win32-arm64": "0.24.2", "@esbuild/win32-ia32": "0.24.2", "@esbuild/win32-x64": "0.24.2" }, "bin": "bin/esbuild" }, "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA=="],
"escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="],
"escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="],
"eslint": ["eslint@9.19.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.19.0", "@eslint/core": "^0.10.0", "@eslint/eslintrc": "^3.2.0", "@eslint/js": "9.19.0", "@eslint/plugin-kit": "^0.2.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.1", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.2.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "bin": "bin/eslint.js" }, "sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA=="],
"eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@5.1.0", "", { "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw=="],
"eslint-plugin-react-refresh": ["eslint-plugin-react-refresh@0.4.18", "", { "peerDependencies": { "eslint": ">=8.40" } }, "sha512-IRGEoFn3OKalm3hjfolEWGqoF/jPqeEYFp+C8B0WMzwGwBMvlRDQd06kghDhF0C61uJ6WfSDhEZE/sAQjduKgw=="],
"eslint-scope": ["eslint-scope@8.2.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A=="],
"eslint-visitor-keys": ["eslint-visitor-keys@4.2.0", "", {}, "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw=="],
"espree": ["espree@10.3.0", "", { "dependencies": { "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.0" } }, "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg=="],
"esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="],
"esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="],
"estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="],
"esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="],
"fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="],
"fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="],
"fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="],
"fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="],
"fastq": ["fastq@1.19.0", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA=="],
"file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="],
"fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
"find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="],
"flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="],
"flatted": ["flatted@3.3.2", "", {}, "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA=="],
"follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="],
"foreground-child": ["foreground-child@3.3.0", "", { "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" } }, "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg=="],
"form-data": ["form-data@4.0.1", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw=="],
"fraction.js": ["fraction.js@4.3.7", "", {}, "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="],
"framer-motion": ["framer-motion@12.4.1", "", { "dependencies": { "motion-dom": "^12.0.0", "motion-utils": "^12.0.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid"] }, "sha512-5Ijbea3topSZjadQ0hgc/TcWj2ldMZmNREM7RvAhvsThYOA1HHOA8TT1yKvMu1YXP3jWaFwoZ6Vo9Nw+DUZrzA=="],
"fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
"function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
"get-nonce": ["get-nonce@1.0.1", "", {}, "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="],
"glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": "dist/esm/bin.mjs" }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="],
"glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="],
"globals": ["globals@15.14.0", "", {}, "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig=="],
"graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="],
"has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="],
"hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="],
"html-parse-stringify": ["html-parse-stringify@3.0.1", "", { "dependencies": { "void-elements": "3.1.0" } }, "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg=="],
"i18next": ["i18next@24.2.2", "", { "dependencies": { "@babel/runtime": "^7.23.2" }, "peerDependencies": { "typescript": "^5" } }, "sha512-NE6i86lBCKRYZa5TaUDkU5S4HFgLIEJRLr3Whf2psgaxBleQ2LC1YW1Vc+SCgkAW7VEzndT6al6+CzegSUHcTQ=="],
"ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="],
"import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="],
"imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="],
"is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="],
"is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="],
"is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
"is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
"is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
"is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
"isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
"jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="],
"jiti": ["jiti@1.21.7", "", { "bin": "bin/jiti.js" }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="],
"js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
"js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": "bin/js-yaml.js" }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="],
"json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="],
"json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="],
"json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="],
"keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="],
"lenis": ["lenis@1.3.17", "", { "peerDependencies": { "@nuxt/kit": ">=3.0.0", "react": ">=17.0.0", "vue": ">=3.0.0" }, "optionalPeers": ["@nuxt/kit", "react", "vue"] }, "sha512-k9T9rgcxne49ggJOvXCraWn5dt7u2mO+BNkhyu6yxuEnm9c092kAW5Bus5SO211zUvx7aCCEtzy9UWr0RB+oJw=="],
"lethargy": ["lethargy@1.0.9", "", {}, "sha512-nFM8blpCF9rqIL5mRAaTGc78W8oQixVtsD86jbEPvcI13+lDUYJf3R7DZQQL7tCiBpbGpGKMX2gwJFO9hiaOkg=="],
"levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="],
"lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="],
"lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="],
"locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="],
"locomotive-scroll": ["locomotive-scroll@4.1.4", "", { "dependencies": { "bezier-easing": "^2.1.0", "smoothscroll-polyfill": "^0.4.4", "virtual-scroll": "^1.5.2" } }, "sha512-6i98cFF2SKg6wIPpwVPuo2FG8qL3USsdDeew78TEYZyLoqleMWNfkSDpWA6mPym4dOfTIBXc678VmGlkgx3fTA=="],
"lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="],
"lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="],
"loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": "cli.js" }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="],
"lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
"lucide-react": ["lucide-react@0.473.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-KW6u5AKeIjkvrxXZ6WuCu9zHE/gEYSXCay+Gre2ZoInD0Je/e3RBtP4OHpJVJ40nDklSvjVKjgH7VU8/e2dzRw=="],
"merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="],
"micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="],
"mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="],
"mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="],
"minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="],
"minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="],
"motion": ["motion@12.4.1", "", { "dependencies": { "framer-motion": "^12.4.1", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid"] }, "sha512-TBnf5NyZVZFOHOc87fyC6qTSU+6LUe09LwxA1Sna35YL7qgOv1EZv96mu6o7uQ2Rl1GvTSQLeyfrQAEG+zlh+w=="],
"motion-dom": ["motion-dom@12.0.0", "", { "dependencies": { "motion-utils": "^12.0.0" } }, "sha512-CvYd15OeIR6kHgMdonCc1ihsaUG4MYh/wrkz8gZ3hBX/uamyZCXN9S9qJoYF03GqfTt7thTV/dxnHYX4+55vDg=="],
"motion-utils": ["motion-utils@12.0.0", "", {}, "sha512-MNFiBKbbqnmvOjkPyOKgHUp3Q6oiokLkI1bEwm5QA28cxMZrv0CbbBGDNmhF6DIXsi1pCQBSs0dX8xjeER1tmA=="],
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
"mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="],
"nanoid": ["nanoid@3.3.8", "", { "bin": "bin/nanoid.cjs" }, "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="],
"natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="],
"node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="],
"normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="],
"normalize-range": ["normalize-range@0.1.2", "", {}, "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="],
"object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="],
"object-hash": ["object-hash@3.0.0", "", {}, "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="],
"optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="],
"p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="],
"p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="],
"package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="],
"parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="],
"path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="],
"path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
"path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="],
"path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="],
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
"picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
"pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="],
"pirates": ["pirates@4.0.6", "", {}, "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg=="],
"postcss": ["postcss@8.5.1", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ=="],
"postcss-import": ["postcss-import@15.1.0", "", { "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew=="],
"postcss-js": ["postcss-js@4.0.1", "", { "dependencies": { "camelcase-css": "^2.0.1" }, "peerDependencies": { "postcss": "^8.4.21" } }, "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw=="],
"postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="],
"postcss-nested": ["postcss-nested@6.2.0", "", { "dependencies": { "postcss-selector-parser": "^6.1.1" }, "peerDependencies": { "postcss": "^8.2.14" } }, "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ=="],
"postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="],
"postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="],
"prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="],
"proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="],
"punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
"queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
"react": ["react@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ=="],
"react-dom": ["react-dom@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" }, "peerDependencies": { "react": "^18.3.1" } }, "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw=="],
"react-hook-form": ["react-hook-form@7.54.2", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg=="],
"react-i18next": ["react-i18next@15.4.0", "", { "dependencies": { "@babel/runtime": "^7.25.0", "html-parse-stringify": "^3.0.1" }, "peerDependencies": { "i18next": ">= 23.2.3", "react": ">= 16.8.0" } }, "sha512-Py6UkX3zV08RTvL6ZANRoBh9sL/ne6rQq79XlkHEdd82cZr2H9usbWpUNVadJntIZP2pu3M2rL1CN+5rQYfYFw=="],
"react-remove-scroll": ["react-remove-scroll@2.6.3", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ=="],
"react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="],
"react-router": ["react-router@7.1.5", "", { "dependencies": { "@types/cookie": "^0.6.0", "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0", "turbo-stream": "2.4.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" } }, "sha512-8BUF+hZEU4/z/JD201yK6S+UYhsf58bzYIDq2NS1iGpwxSXDu7F+DeGSkIXMFBuHZB21FSiCzEcUb18cQNdRkA=="],
"react-router-dom": ["react-router-dom@7.1.5", "", { "dependencies": { "react-router": "7.1.5" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" } }, "sha512-/4f9+up0Qv92D3bB8iN5P1s3oHAepSGa9h5k6tpTFlixTTskJZwKGhJ6vRJ277tLD1zuaZTt95hyGWV1Z37csQ=="],
"react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="],
"read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="],
"readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="],
"regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="],
"resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": "bin/resolve" }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="],
"resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="],
"reusify": ["reusify@1.0.4", "", {}, "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="],
"rollup": ["rollup@4.34.5", "", { "dependencies": { "@types/estree": "1.0.6" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.34.5", "@rollup/rollup-android-arm64": "4.34.5", "@rollup/rollup-darwin-arm64": "4.34.5", "@rollup/rollup-darwin-x64": "4.34.5", "@rollup/rollup-freebsd-arm64": "4.34.5", "@rollup/rollup-freebsd-x64": "4.34.5", "@rollup/rollup-linux-arm-gnueabihf": "4.34.5", "@rollup/rollup-linux-arm-musleabihf": "4.34.5", "@rollup/rollup-linux-arm64-gnu": "4.34.5", "@rollup/rollup-linux-arm64-musl": "4.34.5", "@rollup/rollup-linux-loongarch64-gnu": "4.34.5", "@rollup/rollup-linux-powerpc64le-gnu": "4.34.5", "@rollup/rollup-linux-riscv64-gnu": "4.34.5", "@rollup/rollup-linux-s390x-gnu": "4.34.5", "@rollup/rollup-linux-x64-gnu": "4.34.5", "@rollup/rollup-linux-x64-musl": "4.34.5", "@rollup/rollup-win32-arm64-msvc": "4.34.5", "@rollup/rollup-win32-ia32-msvc": "4.34.5", "@rollup/rollup-win32-x64-msvc": "4.34.5", "fsevents": "~2.3.2" }, "bin": "dist/bin/rollup" }, "sha512-GyVCmpo9z/HYqFD8QWoBUnz1Q9xC22t8tPAZm/AvAcUg2U2/+DkboEvSioMwv042zE4I9N3FEhx7fiCT2YHzKQ=="],
"run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
"scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="],
"semver": ["semver@7.7.1", "", { "bin": "bin/semver.js" }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="],
"set-cookie-parser": ["set-cookie-parser@2.7.1", "", {}, "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ=="],
"shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
"shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
"signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
"smoothscroll-polyfill": ["smoothscroll-polyfill@0.4.4", "", {}, "sha512-TK5ZA9U5RqCwMpfoMq/l1mrH0JAR7y7KRvOBx0n2869aLxch+gT9GhN3yUfjiw+d/DiF1mKo14+hd62JyMmoBg=="],
"source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
"string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="],
"string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
"strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="],
"strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
"strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="],
"sucrase": ["sucrase@3.35.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA=="],
"supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
"supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="],
"tailwind-merge": ["tailwind-merge@2.6.0", "", {}, "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA=="],
"tailwindcss": ["tailwindcss@3.4.17", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "jiti": "^1.21.6", "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", "postcss-load-config": "^4.0.2", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" } }, "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og=="],
"tailwindcss-animate": ["tailwindcss-animate@1.0.7", "", { "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } }, "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA=="],
"thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="],
"thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="],
"tiny-emitter": ["tiny-emitter@1.2.0", "", {}, "sha512-rWjF00inHeWtT5UbQYAXoMI4hL6TRMqohuKCsODyPYYmfAxqfMnXLsIeNrbdPEkNxlk++rojVilTnI9IVmEBtA=="],
"to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
"ts-api-utils": ["ts-api-utils@2.0.1", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w=="],
"ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="],
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
"turbo-stream": ["turbo-stream@2.4.0", "", {}, "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g=="],
"type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="],
"typescript": ["typescript@5.6.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw=="],
"typescript-eslint": ["typescript-eslint@8.23.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.23.0", "@typescript-eslint/parser": "8.23.0", "@typescript-eslint/utils": "8.23.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" } }, "sha512-/LBRo3HrXr5LxmrdYSOCvoAMm7p2jNizNfbIpCgvG4HMsnoprRUOce/+8VJ9BDYWW68rqIENE/haVLWPeFZBVQ=="],
"undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="],
"update-browserslist-db": ["update-browserslist-db@1.1.2", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": "cli.js" }, "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg=="],
"uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="],
"use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="],
"use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="],
"usehooks-ts": ["usehooks-ts@3.1.1", "", { "dependencies": { "lodash.debounce": "^4.0.8" }, "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA=="],
"util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
"virtual-scroll": ["virtual-scroll@1.5.2", "", { "dependencies": { "bindall-standalone": "^1.0.5", "lethargy": "^1.0.2", "object-assign": "^4.0.1", "tiny-emitter": "^1.0.0" } }, "sha512-7jDHwlKbHUho7CYU/HojE/VKFH8GV9P5fVWP2HCa7dRUOpVvwl93OBOKIIcb2mKd+vqsbVR/0zl0X70+3sUZqA=="],
"vite": ["vite@6.1.0", "", { "dependencies": { "esbuild": "^0.24.2", "postcss": "^8.5.1", "rollup": "^4.30.1" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx"], "bin": "bin/vite.js" }, "sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ=="],
"void-elements": ["void-elements@3.1.0", "", {}, "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w=="],
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
"word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="],
"wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="],
"wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="],
"yaml": ["yaml@2.7.0", "", { "bin": "bin.mjs" }, "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA=="],
"yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="],
"zod": ["zod@3.24.1", "", {}, "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A=="],
"zustand": ["zustand@5.0.3", "", { "peerDependencies": { "@types/react": ">=18.0.0", "immer": ">=9.0.6", "react": ">=18.0.0", "use-sync-external-store": ">=1.2.0" }, "optionalPeers": ["immer", "use-sync-external-store"] }, "sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg=="],
"@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="],
"@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="],
"@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="],
"@radix-ui/react-collection/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="],
"@radix-ui/react-collection/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="],
"@radix-ui/react-collection/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="],
"@radix-ui/react-collection/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="],
"@radix-ui/react-dismissable-layer/@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw=="],
"@radix-ui/react-focus-scope/@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw=="],
"@radix-ui/react-id/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w=="],
"@radix-ui/react-navigation-menu/@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="],
"@radix-ui/react-navigation-menu/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="],
"@radix-ui/react-navigation-menu/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="],
"@radix-ui/react-navigation-menu/@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="],
"@radix-ui/react-navigation-menu/@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="],
"@radix-ui/react-navigation-menu/@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="],
"@radix-ui/react-navigation-menu/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="],
"@radix-ui/react-navigation-menu/@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="],
"@radix-ui/react-popper/@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw=="],
"@radix-ui/react-popper/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w=="],
"@radix-ui/react-portal/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w=="],
"@radix-ui/react-presence/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w=="],
"@radix-ui/react-radio-group/@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg=="],
"@radix-ui/react-radio-group/@radix-ui/react-use-previous": ["@radix-ui/react-use-previous@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og=="],
"@radix-ui/react-roving-focus/@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.2", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-primitive": "2.0.2", "@radix-ui/react-slot": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw=="],
"@radix-ui/react-roving-focus/@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg=="],
"@radix-ui/react-roving-focus/@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw=="],
"@radix-ui/react-use-controllable-state/@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw=="],
"@radix-ui/react-use-escape-keydown/@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw=="],
"@radix-ui/react-use-size/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w=="],
"@radix-ui/react-visually-hidden/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="],
"@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="],
"chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
"fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
"glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="],
"string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
"string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
"strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
"wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="],
"wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
"wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
"@radix-ui/react-navigation-menu/@radix-ui/react-dismissable-layer/@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.1", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g=="],
"@radix-ui/react-navigation-menu/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="],
"@radix-ui/react-visually-hidden/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="],
"@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="],
"glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="],
"string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
"wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
"wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
"@radix-ui/react-visually-hidden/@radix-ui/react-primitive/@radix-ui/react-slot/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="],
}
}

File diff suppressed because one or more lines are too long

1
dist/assets/index-BNWWHLDD.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/assets/index-BOfvbFOj.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

53
dist/assets/react-vendor-CJoWVsUG.js vendored Normal file

File diff suppressed because one or more lines are too long

163
dist/assets/ui-library-DV79vey3.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

BIN
dist/example-2.jpeg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 KiB

BIN
dist/example.jpeg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

190
dist/index.html vendored
View File

@ -1,95 +1,95 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/logo-icon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script type="text/javascript">
(function (m, e, t, r, i, k, a) {
m[i] =
m[i] ||
function () {
(m[i].a = m[i].a || []).push(arguments);
};
m[i].l = 1 * new Date();
for (var j = 0; j < document.scripts.length; j++) {
if (document.scripts[j].src === r) {
return;
}
}
(k = e.createElement(t)),
(a = e.getElementsByTagName(t)[0]),
(k.async = 1),
(k.src = r),
a.parentNode.insertBefore(k, a);
})(
window,
document,
"script",
"https://mc.yandex.ru/metrika/tag.js",
"ym"
);
ym(99918113, "init", {
clickmap: true,
trackLinks: true,
accurateTrackBounce: true,
webvisor: true,
});
</script>
<script
async
src="https://www.googletagmanager.com/gtag/js?id=G-M2M3HKL8ZR"
></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "G-M2M3HKL8ZR");
</script>
<script>
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" });
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != "dataLayer" ? "&l=" + l : "";
j.async = true;
j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, "script", "dataLayer", "GTM-NK394LVK");
</script>
<title>Turkmen Textile</title>
<script type="module" crossorigin src="/assets/index-pRBEmDgx.js"></script>
<link rel="modulepreload" crossorigin href="/assets/react-vendor-CE_Ks92h.js">
<link rel="modulepreload" crossorigin href="/assets/ui-library-vY3V3zoX.js">
<link rel="stylesheet" crossorigin href="/assets/index--gnBA1VZ.css">
</head>
<body>
<div id="root"></div>
<noscript
><div>
<img
src="https://mc.yandex.ru/watch/99918113"
style="position: absolute; left: -9999px"
alt=""
/></div
></noscript>
<noscript
><iframe
src="https://www.googletagmanager.com/ns.html?id=GTM-NK394LVK"
height="0"
width="0"
style="display: none; visibility: hidden"
></iframe
></noscript>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/logo-icon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script type="text/javascript">
(function (m, e, t, r, i, k, a) {
m[i] =
m[i] ||
function () {
(m[i].a = m[i].a || []).push(arguments);
};
m[i].l = 1 * new Date();
for (var j = 0; j < document.scripts.length; j++) {
if (document.scripts[j].src === r) {
return;
}
}
(k = e.createElement(t)),
(a = e.getElementsByTagName(t)[0]),
(k.async = 1),
(k.src = r),
a.parentNode.insertBefore(k, a);
})(
window,
document,
"script",
"https://mc.yandex.ru/metrika/tag.js",
"ym"
);
ym(99918113, "init", {
clickmap: true,
trackLinks: true,
accurateTrackBounce: true,
webvisor: true,
});
</script>
<script
async
src="https://www.googletagmanager.com/gtag/js?id=G-M2M3HKL8ZR"
></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "G-M2M3HKL8ZR");
</script>
<script>
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" });
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != "dataLayer" ? "&l=" + l : "";
j.async = true;
j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, "script", "dataLayer", "GTM-NK394LVK");
</script>
<title>Turkmen Textile</title>
<script type="module" crossorigin src="/assets/index-BNWWHLDD.js"></script>
<link rel="modulepreload" crossorigin href="/assets/react-vendor-CJoWVsUG.js">
<link rel="modulepreload" crossorigin href="/assets/ui-library-DV79vey3.js">
<link rel="stylesheet" crossorigin href="/assets/index-BOfvbFOj.css">
</head>
<body>
<div id="root"></div>
<noscript
><div>
<img
src="https://mc.yandex.ru/watch/99918113"
style="position: absolute; left: -9999px"
alt=""
/></div
></noscript>
<noscript
><iframe
src="https://www.googletagmanager.com/ns.html?id=GTM-NK394LVK"
height="0"
width="0"
style="display: none; visibility: hidden"
></iframe
></noscript>
</body>
</html>

BIN
dist/tm.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 896 B

648
package-lock.json generated

File diff suppressed because it is too large Load Diff

BIN
public/example-2.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 KiB

BIN
public/example.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

BIN
public/tm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 896 B

View File

@ -8,7 +8,7 @@ function App() {
<ReactLenis
root
options={{
lerp: 0.07,
lerp: 0.1,
}}
>
<Header />

View File

@ -53,7 +53,7 @@ export const Burger: FC<Props> = () => {
size={"sm"}
className="bg-teritary w-full text-on_teritary hover:bg-teritary/90"
>
{lang === "ru" ? "Официальная поддержка" : "Official Support"}
{{ ru: "Официальная поддержка", en: "Official Support", tm: "Resmi goldaw" }[lang]}
</Button>
</Link>
@ -63,7 +63,7 @@ export const Burger: FC<Props> = () => {
size={"sm"}
className="bg-primary w-full text-white hover:bg-primary/90"
>
{lang === "ru" ? "Стать спонсором" : "Become a sponsor"}
{{ ru: "Стать спонсором", en: "Become a sponsor", tm: "Hemaýatkär bolmak" }[lang]}
</Button>
</Link>
</SheetHeader>

View File

@ -1,7 +1,7 @@
import { FC } from "react";
import { Container } from "./";
import { Logo } from "../shared";
import { Language, useLangStore } from "@/store/lang";
import { useLangStore } from "@/store/lang";
import { SubscribeForm } from "../shared/forms/subscribe-form";
import { Facebook } from "lucide-react";
import { Link } from "react-router-dom";
@ -51,9 +51,7 @@ export const Footer: FC = () => {
<hr className="border-white/50" />
<h5 className="text-base text-center normal text-white">
{lang === Language.RU
? "©2025 Все права защищены"
: "All rights reserved"}
{{ ru: "©2025 Все права защищены", en: "All rights reserved", tm: "Ähli hukuklar goralan" }[lang]}
</h5>
</Container>
</div>

View File

@ -24,9 +24,7 @@ export const Header: FC = () => {
<div className="flex items-center gap-2">
<MapPin />
<h4 className="text-sm">
{lang === "ru"
? "Ашхабад, Туркменистан"
: "Ashgabat, Turkmenistan"}
{{ ru: "Ашхабад, Туркменистан", en: "Ashgabat, Turkmenistan", tm: "Aşgabat, Türkmenistan" }[lang]}
</h4>
</div>
@ -112,7 +110,7 @@ export const Header: FC = () => {
size={"sm"}
className="bg-white text-primary hover:bg-white/90 h-12 w-fit"
>
{lang === "ru" ? "Официальная поддержка" : "Official Support"}
{{ ru: "Официальная поддержка", en: "Official Support", tm: "Resmi goldaw" }[lang]}
</Button>
</Link>
@ -122,7 +120,7 @@ export const Header: FC = () => {
size={"sm"}
className="bg-teritary text-white hover:bg-teritary/90 h-12 w-fit"
>
{lang === "ru" ? "Стать спонсором" : "Become a sponsor"}
{{ ru: "Стать спонсором", en: "Become a sponsor", tm: "Hemaýatkär bolmak" }[lang]}
</Button>
</Link>
</div>

View File

@ -13,7 +13,7 @@ import { Button } from "@/components/ui/button";
import { Field } from "../field";
import { b2bStage1 } from "@/data/b2b.data";
import { useTranslate } from "@/hooks/use-translate";
import { Language, useLangStore } from "@/store/lang";
import { useLangStore } from "@/store/lang";
import { useScrollTop } from "@/hooks/use-scroll-top";
interface Props {
@ -43,7 +43,7 @@ export const Stage1: FC<Props> = ({ handleNext }) => {
render={({ field }) => (
<FormItem className="space-y-3">
<FormLabel className="text-xl">
{lang === Language.RU ? "Тип:" : "Type:"}
{{ ru: "Тип:", en: "Type:", tm: "Görnüşi:" }[lang]}
</FormLabel>
<FormControl>
@ -140,7 +140,7 @@ export const Stage1: FC<Props> = ({ handleNext }) => {
onClick={handleNext}
className="w-full mt-10"
>
{lang === Language.RU ? "Далее" : "Next"}
{{ ru: "Далее", en: "Next", tm: "Indiki" }[lang]}
</Button>
</motion.div>
);

View File

@ -3,7 +3,7 @@ import { FieldError, useFormContext } from "react-hook-form";
import { Field } from "../";
import { motion } from "motion/react";
import { Button } from "@/components/ui/button";
import { Language, useLangStore } from "@/store/lang";
import { useLangStore } from "@/store/lang";
import { useTranslate } from "@/hooks/use-translate";
import { b2bStage2 } from "@/data/b2b.data";
import { useScrollTop } from "@/hooks/use-scroll-top";
@ -83,7 +83,7 @@ export const Stage2: FC<Props> = ({ handleNext, handlePrev }) => {
variant={"outline"}
className="text-on_surface"
>
{lang === Language.RU ? "Назад" : "Back"}
{{ ru: "Назад", en: "Back", tm: "Yza" }[lang]}
</Button>
<Button
@ -92,7 +92,7 @@ export const Stage2: FC<Props> = ({ handleNext, handlePrev }) => {
onClick={handleNext}
className="w-full"
>
{lang === Language.RU ? "Далее" : "Next"}
{{ ru: "Далее", en: "Next", tm: "Indiki" }[lang]}
</Button>
</div>
</motion.div>

View File

@ -6,7 +6,7 @@ import { Button } from "@/components/ui/button";
import { Loader } from "lucide-react";
import { b2bStage3 } from "@/data/b2b.data";
import { useTranslate } from "@/hooks/use-translate";
import { Language, useLangStore } from "@/store/lang";
import { useLangStore } from "@/store/lang";
import { useScrollTop } from "@/hooks/use-scroll-top";
interface Props {
@ -98,7 +98,7 @@ export const Stage3: FC<Props> = ({ handlePrev }) => {
variant={"outline"}
className="text-on_surface"
>
{lang === Language.RU ? "Назад" : "Back"}
{{ ru: "Назад", en: "Back", tm: "Yza" }[lang]}
</Button>
<Button

View File

@ -52,7 +52,9 @@ export const DesignerCard: FC<Props> = ({
return (
<div className={cn("", className)}>
<h3 className="text-xl mb-2.5">Работы дизайнера</h3>
<h3 className="text-xl mb-2.5">
{{ ru: "Работы дизайнера", en: "Designer works", tm: "Dizaýneriň işleri" }[lang]}
</h3>
<div ref={emblaRef} className="embla overflow-hidden">
<div className="embla__container items-center flex gap-4">
{canScrollPrev && (
@ -164,7 +166,7 @@ export const DesignerCard: FC<Props> = ({
className="flex items-center gap-2 mb-4"
>
<ChevronLeftIcon />
Вернуться назад
{{ ru: "Вернуться назад", en: "Go back", tm: "Yza gaýdyň" }[lang]}
</button>
<div className="2xl:h-[50vh] h-[40vh] bg-[#f4f4f4]">

View File

@ -10,6 +10,7 @@ import { Input } from "../ui/input";
import { cn } from "@/lib/utils";
import { LegacyRef } from "react";
import { Textarea } from "../ui/textarea";
import { useLangStore } from "@/store/lang";
type Props = {
control: any;
@ -45,6 +46,8 @@ export const Field = ({
onPrimary = false,
}: Props) => {
const lang = useLangStore((state) => state.lang);
return (
<FormField
control={control}
@ -101,7 +104,7 @@ export const Field = ({
/>
{field.value && (
<div className="text-sm mt-2 text-gray-500 absolute top-8">
Выбранный файл: {field.value.name}
{{ ru: "Выбранный файл:", en: "Selected file:", tm: "Saýlanan faýl:" }[lang]} {field.value.name}
</div>
)}
</div>

View File

@ -3,6 +3,7 @@ import { motion } from "motion/react";
import { Link } from "react-router-dom";
import { Button } from "../ui/button";
import { cn } from "@/lib/utils";
import { useLangStore } from "@/store/lang";
interface Props {
className?: string;
@ -10,16 +11,22 @@ interface Props {
}
export const FormSuccesStatus: FC<Props> = ({ className, delay = 0.15 }) => {
const lang = useLangStore((state) => state.lang);
return (
<motion.div
initial={{ opacity: 0, y: 50 }}
animate={{ opacity: 1, y: 0, transition: { delay: delay } }}
className={cn("flex flex-col gap-8 my-16", className)}
>
<h3 className="text-3xl text-center">Форма успешно отправлена!</h3>
<h3 className="text-3xl text-center">
{{ ru: "Форма успешно отправлена!", en: "Form submitted successfully!", tm: "Forma üstünlikli ugradyldy!" }[lang]}
</h3>
<Link className="w-fit mx-auto" to="/">
<Button variant={"outline"}>Вернуться на главную</Button>
<Button variant={"outline"}>
{{ ru: "Вернуться на главную", en: "Back to home", tm: "Baş sahypa gaýdyp barmak" }[lang]}
</Button>
</Link>
</motion.div>
);

View File

@ -1,16 +1,17 @@
import { AnimatePresence } from "motion/react";
import { FC } from "react";
import { FC, useMemo } from "react";
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import axios from "axios";
import {
defaultValuesOfB2b,
formSchema,
createFormSchema,
FormType,
} from "@/lib/get-b2b-form-details";
import { Form } from "@/components/ui/form";
import { FormSuccesStatus } from "../form-succes-status";
import { Stage1, Stage2, Stage3 } from "../b2b";
import { useLangStore } from "@/store/lang";
interface Props {
stage: number;
@ -26,6 +27,8 @@ export const B2bForm: FC<Props> = ({
success,
setSuccess,
}) => {
const lang = useLangStore((state) => state.lang);
const formSchema = useMemo(() => createFormSchema(lang), [lang]);
const form = useForm<FormType>({
resolver: zodResolver(formSchema),
defaultValues: defaultValuesOfB2b,

View File

@ -55,7 +55,7 @@ export const SubscribeForm: FC<Props> = ({ modal = false }) => {
)}
>
<h2 className="h2 !text-left">
{useLang("Подпишитесь на новости:", "Subscribe to the news:")}
{useLang("Подпишитесь на новости:", "Subscribe to the news:", "Täzeliklere ýazylyşyň:")}
</h2>
<div className="relative">
@ -81,8 +81,8 @@ export const SubscribeForm: FC<Props> = ({ modal = false }) => {
})}
>
{success
? useLang("Отправлено", "Submitted")
: useLang("Подписаться", "Subscribe")}
? useLang("Отправлено", "Submitted", "Ugradyldy")
: useLang("Подписаться", "Subscribe", "Ýazylmak")}
</Button>
</Container>
</form>

View File

@ -41,7 +41,7 @@ export const HomeAbout: FC = () => {
<div className="flex w-full gap-8">
<Link to={t("reportLink")} target="_blank" className="w-fit">
<Button variant={"outline"}>
<Button>
{homeAbout[translate].button}
</Button>
</Link>
@ -49,7 +49,7 @@ export const HomeAbout: FC = () => {
target="_blank"
to="https://turkmentextile.turkmenexpo.com/app/storage/app/media/Catalogue/catalogue.pdf"
>
<Button variant={"outline"} className="px-16">
<Button className="px-16">
{homeAbout[translate].button2}
</Button>
</Link>

View File

@ -52,6 +52,7 @@ export const HomeHero: FC = () => {
autoPlay
controls={false}
muted
loop
src={item.path}
className="size-full object-cover"
/>

View File

@ -17,7 +17,7 @@ export const HomeNews: FC = () => {
<section className={cn("md:mb-[120px] mb-20")}>
<Container>
<h2 className="h2 text-center md:mb-8 mb-6">
{lang === "en" ? "News" : "Новости"}
{{ ru: "Новости", en: "News", tm: "Täzelikler" }[lang]}
</h2>
<div className="grid md:grid-cols-3 grid-cols-1 gap-6">
{data?.slice(0, 3).map((item) => (

View File

@ -15,7 +15,7 @@ export const HomeTheme: FC = () => {
if (isPending) return <Loader />;
return (
<section className="">
<section id="themes" className="">
<Container>
<h2 className="h2 mb-10 text-center">
{homeTheme[useTranslate(lang)].title}

View File

@ -5,7 +5,7 @@ import { Link } from "react-router-dom";
import { Container } from "@/components/layout";
import { ContactCard, Loader, TimeCard } from "../";
import { useTranslate } from "@/hooks/use-translate";
import { Language, useLangStore } from "@/store/lang";
import { useLangStore } from "@/store/lang";
import { times } from "@/data/home/home-time.data";
import { useExhibitionTime } from "@/hooks/tanstack/use-exhibition-time";
import { useHomeContacts } from "@/hooks/tanstack/use-home-contacts";
@ -44,7 +44,7 @@ export const HomeTime: FC<Props> = ({ className }) => {
<Link to="/stend-form" className="md:w-fit w-full mx-auto">
<Button className="w-full">
{lang === Language.RU ? "Забронируйте стенд" : "Book a stand"}
{{ ru: "Забронируйте стенд", en: "Book a stand", tm: "Stend bronlaň" }[lang]}
</Button>
</Link>
</div>

View File

@ -43,7 +43,7 @@ const Hero = () => {
else return value2;
};
const banners = {
const banners: Record<string, string[]> = {
en: [
"https://turkmentextile.turkmenexpo.com/app/storage/app/media/new2/web_eng1.jpg",
"https://turkmentextile.turkmenexpo.com/app/storage/app/media/new2/web_eng2.jpg",
@ -52,9 +52,13 @@ const Hero = () => {
"https://turkmentextile.turkmenexpo.com/app/storage/app/media/new2/web_ru1.jpg",
"https://turkmentextile.turkmenexpo.com/app/storage/app/media/new2/web_ru2.jpg",
],
tm: [
"https://turkmentextile.turkmenexpo.com/app/storage/app/media/new2/web_eng1.jpg",
"https://turkmentextile.turkmenexpo.com/app/storage/app/media/new2/web_eng2.jpg",
],
};
const getBanners = () => (lang === "ru" ? banners.ru : banners.en);
const getBanners = () => banners[lang] ?? banners.en;
return (
<section className="">
@ -74,7 +78,9 @@ const Hero = () => {
) : (
<img src={t("impressions.banner")} />
)}
<h1 className="absolute opacity-0 top-0 left-0">Модные показы</h1>
<h1 className="absolute opacity-0 top-0 left-0">
{{ ru: "Модные показы", en: "Fashion shows", tm: "Moda görkezişler" }[lang]}
</h1>
<div className="bg-[url('/impressions-bg.png')]">
<Container className="md:py-20 py-10">

View File

@ -15,8 +15,29 @@ export const langs = [
{
lang: Language.EN,
},
{
lang: Language.TM,
},
];
const flagMap: Record<string, string> = {
[Language.RU]: "/ru.svg",
[Language.EN]: "/english.svg",
[Language.TM]: "/tm.png",
};
const labelMap: Record<string, string> = {
[Language.RU]: "Ру",
[Language.EN]: "En",
[Language.TM]: "Tm",
};
const nameMap: Record<string, string> = {
[Language.RU]: "Русский",
[Language.EN]: "English",
[Language.TM]: "Türkmen",
};
export const LangMenu: FC<Props> = ({ className, light = false }) => {
const lang = useLangStore((state) => state.lang);
const setLang = useLangStore((state) => state.setLang);
@ -32,8 +53,8 @@ export const LangMenu: FC<Props> = ({ className, light = false }) => {
className
)}
>
<img src={lang === Language.RU ? "/ru.svg" : "/english.svg"} alt="" />
{lang === Language.RU ? "Ру" : "En"}
<img src={flagMap[lang]} alt="" />
{labelMap[lang]}
<svg
width="20"
height="20"
@ -63,10 +84,10 @@ export const LangMenu: FC<Props> = ({ className, light = false }) => {
className="flex gap-3 py-2 items-center cursor-pointer"
>
<img
src={item.lang === Language.RU ? "/ru.svg" : "/english.svg"}
src={flagMap[item.lang]}
alt="flag"
/>
<h5>{item.lang === Language.RU ? "Русский" : "English"}</h5>
<h5>{nameMap[item.lang]}</h5>
</div>
))}
</PopoverContent>

View File

@ -1,11 +1,12 @@
import { FC, PropsWithChildren, useState } from "react";
import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover";
import { Chevron, HoverMenu } from "./";
import { Link } from "react-router-dom";
import { Link, useLocation } from "react-router-dom";
import { Modal } from "./modal";
import { DropDownContent } from "@/locales/types/nav.type";
import { cn } from "@/lib/utils";
import { useUiStore } from "@/store/ui";
import { useLenis } from "lenis/react";
interface Props {
className?: string;
@ -25,6 +26,8 @@ export const Menu: FC<PropsWithChildren<Props>> = ({
}) => {
const [isOpen, setIsOpen] = useState(false);
const setSheet = useUiStore((state) => state.setSheet);
const lenis = useLenis();
const location = useLocation();
return (
<Popover open={isOpen} onOpenChange={() => setIsOpen(!isOpen)}>
@ -53,6 +56,15 @@ export const Menu: FC<PropsWithChildren<Props>> = ({
onClick={() => {
setIsOpen(false);
setSheet(false);
const hash = item.link?.split("#")[1];
const path = item.link?.split("#")[0] || "/";
if (hash && location.pathname === path) {
const el = document.getElementById(hash);
if (el && lenis) {
lenis.scrollTo(el, { offset: -140, duration: 0.8 });
}
}
}}
className="h-14 px-3 flex gap-3 relative justify-between cursor-pointer items-center hover:bg-slate-300/50 transition-all"
target={item.blank ? "_blank" : undefined}

View File

@ -43,7 +43,7 @@ export const ParticipantItem: FC<Props> = ({
<div className="flex items-center w-full">
<div className="flex items-center flex-[0_0_80%] gap-3">
<h3 className="text-xs normal flex-[0_0_90px]">
{lang === "ru" ? "Название" : "Company"}:
{{ ru: "Название", en: "Company", tm: "Kompaniýa" }[lang]}:
</h3>
<h4 className="text-xs flex-[0_0_70%]">{name}</h4>
</div>
@ -53,7 +53,7 @@ export const ParticipantItem: FC<Props> = ({
<div className="flex items-center w-full">
<div className="flex items-center flex-[0_0_80%] gap-3">
<h3 className="text-xs normal flex-[0_0_90px]">
{lang === "ru" ? "Страна" : "Country"}:
{{ ru: "Страна", en: "Country", tm: "Ýurt" }[lang]}:
</h3>
<div className="flex items-center flex-[0_0_50%] gap-2">
@ -71,7 +71,7 @@ export const ParticipantItem: FC<Props> = ({
<div className="flex items-center ">
<div className="flex items-center flex-[0_0_80%] gap-3">
<h3 className="text-xs normal flex-[0_0_90px]">
{lang === "ru" ? "Сфера" : "Industry"}:
{{ ru: "Сфера", en: "Industry", tm: "Pudak" }[lang]}:
</h3>
<h4 className="text-xs flex-1">{about}</h4>
</div>

View File

@ -5,21 +5,24 @@ import { useMediaQuery } from "usehooks-ts";
import { useLangStore } from "@/store/lang";
const tabs = [
{ id: 0, title: "Все компании", titleEn: "All companies" },
{ id: 0, title: "Все компании", titleEn: "All companies", titleTm: "Ähli kompaniýalar" },
{
id: 3,
title: "Государственные учреждения ",
titleEn: "Government Institutions",
titleTm: "Döwlet edaralary",
},
{
id: 1,
title: "Местные компании",
titleEn: "Local companies",
titleTm: "Ýerli kompaniýalar",
},
{
id: 2,
title: "Иностранные компании",
titleEn: "Foreign companies",
titleTm: "Daşary ýurt kompaniýalary",
},
];
@ -126,7 +129,7 @@ export const Tabs: FC<Props> = ({
)}
onClick={() => handleTabClick(index)}
>
{lang === "ru" ? tab.title : tab.titleEn}
{lang === "ru" ? tab.title : lang === "tm" ? tab.titleTm ?? tab.titleEn : tab.titleEn}
</button>
))}
</div>
@ -147,7 +150,7 @@ export const Tabs: FC<Props> = ({
)}
onClick={() => handleTabClick(index)}
>
{lang === "ru" ? tab.title : tab.titleEn}
{lang === "ru" ? tab.title : lang === "tm" ? tab.titleTm ?? tab.titleEn : tab.titleEn}
</button>
))}
</div>

View File

@ -14,7 +14,8 @@ const buttonVariants = cva(
teritary: "bg-teritary hover:bg-teritary/90 text-on_surface",
destructive:
"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
outline: "border border-outline text-on_surface",
outline:
"border border-outline text-on_surface hover:bg-primary hover:text-white duration-300",
secondary:
"bg-secondary_container hover:bg-secondary_container/80 text-on_secondary_container",
ghost: "hover:bg-accent hover:text-accent-foreground",

View File

@ -8,8 +8,15 @@ export const aboutBron = [
{
title: "Invitation to Participate",
p: `Ministry of Textile Industry of Turkmenistan invites the global business community to join this unique event, which will be a significant step toward strengthening Turkmenistans position on the global economic stage`,
p: `Ministry of Textile Industry of Turkmenistan invites the global business community to join this unique event, which will be a significant step toward strengthening Turkmenistan's position on the global economic stage`,
button1: "Book a stand",
button2: "B2B | B2G meetings",
},
{
title: "Gatnaşmaga çakylyk",
p: `Türkmenistanyň dokma senagaty Ministrligi Türkmenistanyň halkara ykdysady arenada orunlaryny berkitmekde wajyp ädim boljak bu uly waka gatnaşmaga bütin dünýäniň biznes-bileleşiklerini çagyrýar.`,
button1: "Stend bronlamak",
button2: "B2B | B2G duşuşyklar",
},
];

View File

@ -66,4 +66,38 @@ export const aboutInfo = [
`Contribution to industry development — support for innovations, sustainable practices, and cultural heritage.`,
],
},
{
title: "«TurkmenTextile Expo-2025» sergi-ýarmarkasy",
p: [
`Pudagyň dünýä liderlerini, innowasion önümçileri we döredijilikli dizaýnerleri birleşdirjek halkara sergi-ýarmarka. Ol dokma we moda pudagynda işiňizi ösdürmek üçin özboluşly platformadyr.`,
`Bu serginiň maksady Türkmenistany halkara dokma we moda senagatynda esasy merkez hökmünde görkezmek, ýurduň baý dokma mirasyny tanyşdyrmak, pudaga innowasiýalary ornaşdyrmaga ýardam etmek we halkara hyzmatdaşlygy berkitmek.`,
`Siz bu ýerde pudagyň öňdebaryjy oýunçylary bilen gatnaşyk gurup bilersiňiz, öz önümleriňizi ýa-da hyzmatlaryňyzy görkezip bilersiňiz, bazardaky soňky tendensiýalar bilen tanyşarsyňyz, şeýle hem täze hyzmatdaşlary we müşderileri taparsyňyz.`,
],
title_2: "Siz näme üçin barmaly?",
subtitle_2:
"TurkmenTextile Expo-2025 gatnaşyjylar üçin giň perspektiwalary açýar:",
p_2: [
`Türkmenistanyň dokma pudagynyň ýolbaşçylary bilen işewür duşuşyklar.`,
`Eksport ugurlaryny ösdürmek üçin Türkmenistanyň dokma senagatynyň kärhanalary we fabrikleri bilen işewür gatnaşyklary ýola goýmak mümkinçilikleri.`,
`Işewür gatnaşyklary giňeltmek B2B we B2G duşuşyklary, söwda ylalaşyklaryny baglaşmak we strategiki hyzmatdaşlygy ýola goýmak üçin uly mümkinçilik.`,
`Öwrenmek we ösmek öňdebaryjy dünýä ekspertleriniň master-klaslary we leksiýalary gatnaşyjylara bilimlerini çuňlaşdyrmaga we dokma senagatynda täze çemeleşmeleri özleşdirmäge kömek eder.`,
`Medeni alyş-çalyş Türkmenistanyň baý dokma mirasynyň mümkinçiliklerini görkezmek we başga ýurtlaryň baý dokma mirasyndan ruhlanmak mümkinçiligi.`,
],
title_3: "Hyzmatdaşlyk we hemaýatkärlik",
subtitle_3: `
TurkmenTextile Expo-2025 halkara guramalaryny, assosiasiýalary we brendleri öz önümlerini we hyzmatlaryny öňe sürmek üçin hyzmatdaşlyga çagyrýar.
`,
subtitle_4: "Hyzmatdaşlar şulary alarlar:",
p_3: [
`Halkara arenasynda ykrar edilmek dokma we moda industriýasynyň belli oýunçylaryny özüne çekýän uly waka gatnaşmak.`,
`Reklama mümkinçilikleri brendiň serginiň marketing kampaniýasyna integrasiýasy, şol sanda dijital we oflaýn-kanallar.`,
`Auditoriýa göni rugsat öndürijiler, dizaýnerler, enjamlary üpjün edijiler bilen bilelikdäki hereket.`,
`Senagatyň ösüşine goşant innowasiýalaryň, durnukly praktikalaryň we medeni mirasyň goldawy.`,
],
},
];

View File

@ -15,4 +15,13 @@ export const aboutPlace = [
`The centre is equipped with cutting-edge technical solutions, including multimedia equipment, sound and lighting systems, conference rooms with simultaneous translation, and comfortable areas for negotiations. Spacious exhibition pavilions provide ideal conditions for showcasing products and services.`,
],
},
{
title: "Geçirilýän ýeri",
data: [
`Türkmenistanyň Söwda-senagat edarasynyň Sergi merkezi bu halkara sergileri, konferensiýalary, forumlary we işewür duşuşyklary geçirmek üçin häzirkizaman meýdançasydyr.`,
`Merkez öňdebaryjy tehniki çözgütler, şol sanda multimedia enjamlary, sesgüýçlendiriji we yşyklandyryjy sistemalar, sinhron terjimeli konferens-zallary, şeýle hem gepleşikler üçin oňaýly zonalar bilen abzallaşdyrylandyr. Giň sergi pawilýonlary önümleri görkezmek we hyzmatlar üçin rahat şertleri üpjün edýärler.`,
],
},
];

View File

@ -2,60 +2,42 @@ export const b2bStage1 = [
{
h2: "Информация об экспоненте:",
data: [
{
label: "Название компании/организации",
},
{
label: "Имя представителя",
},
{
label: "Название должности/позиция",
},
{
label: "Количество участников",
},
{
label: "Страна",
},
{
label: "Email адрес",
},
{
label: "Номер телефона",
},
{
label: "Веб-сайт",
},
{ label: "Название компании/организации" },
{ label: "Имя представителя" },
{ label: "Название должности/позиция" },
{ label: "Количество участников" },
{ label: "Страна" },
{ label: "Email адрес" },
{ label: "Номер телефона" },
{ label: "Веб-сайт" },
],
},
{
h2: "Applicant Information:",
data: [
{
label: "Company/Organization Name",
},
{
label: "Name of Representative",
},
{
label: "Job title/Position",
},
{
label: "Number of the participants",
},
{
label: "Country",
},
{
label: "Email",
},
{
label: "Phone number",
},
{
label: "Website",
},
{ label: "Company/Organization Name" },
{ label: "Name of Representative" },
{ label: "Job title/Position" },
{ label: "Number of the participants" },
{ label: "Country" },
{ label: "Email" },
{ label: "Phone number" },
{ label: "Website" },
],
},
{
h2: "Eksponent barada maglumat:",
data: [
{ label: "Kompaniýanyň/guramanyň ady" },
{ label: "Wekiliniň ady" },
{ label: "Wezipesi" },
{ label: "Gatnaşyjylaryň sany" },
{ label: "Ýurt" },
{ label: "Email salgysy" },
{ label: "Telefon belgisi" },
{ label: "Web-saýt" },
],
},
];
@ -63,57 +45,40 @@ export const b2bStage1 = [
export const b2bStage2 = [
{
h2: "Цели встречи:",
secondH2: "Информация о компании/организации:",
data: [
{
label: "Основная цель встречи",
},
{
label: "Краткое описание вашего предложения/проекта/запроса",
},
{
label: "Соответствующее государственное учреждение/департамент",
},
{
label: "Отраслевая промышленность",
},
{
label: "Ключевые услуги/продукты",
},
{
label: "Предыдущий опыт работы с правительствами (если применимо)",
},
{ label: "Основная цель встречи" },
{ label: "Краткое описание вашего предложения/проекта/запроса" },
{ label: "Соответствующее государственное учреждение/департамент" },
{ label: "Отраслевая промышленность" },
{ label: "Ключевые услуги/продукты" },
{ label: "Предыдущий опыт работы с правительствами (если применимо)" },
],
},
{
h2: "Meeting Purpose: ",
secondH2: "Company/Organization Profile:",
data: [
{
label: "Primary objective of the meeting",
},
{
label: "Brief description of your proposal/project/request",
},
{
label: "Relevant government agency/department",
},
{ label: "Primary objective of the meeting" },
{ label: "Brief description of your proposal/project/request" },
{ label: "Relevant government agency/department" },
{ label: "Sector Industry " },
{ label: "Key Services/Products" },
{ label: "Previous Experience working with Governments (if applicable)" },
],
},
{
label: "Sector Industry ",
},
{
label: "Key Services/Products",
},
{
label: "Previous Experience working with Governments (if applicable)",
},
{
h2: "Duşuşygyň maksady:",
secondH2: "Kompaniýa/gurama barada maglumat:",
data: [
{ label: "Duşuşygyň esasy maksady" },
{ label: "Teklibiňiziň/taslamaňyzyň/islegiňiziň gysgaça beýany" },
{ label: "Degişli döwlet edarasy/bölümi" },
{ label: "Pudak senagaty" },
{ label: "Esasy hyzmatlar/önümler" },
{ label: "Hökümetler bilen ozalky iş tejribesi (eger bar bolsa)" },
],
},
];
@ -159,31 +124,33 @@ export const b2bStage3 = [
subtitle: "(Please attach the following documents as applicable)",
data: [
{
label: "Preferred date and time for the meeting",
},
{
label:
"Preferred mode of meeting (in-person, virtual (via zoom/teams/other), hybrid)",
},
{
label: "Language preference (English, turkmen, Russian, other)",
},
{
label:
"Additional technical or logistical requirements (e.g. AV equipment, interpreters, etc)",
},
{
label: "Company/organization profile",
},
{
label: "Proposal presentation",
},
{
label: "Relevant certification/licenses",
},
{ label: "Preferred date and time for the meeting" },
{ label: "Preferred mode of meeting (in-person, virtual (via zoom/teams/other), hybrid)" },
{ label: "Language preference (English, turkmen, Russian, other)" },
{ label: "Additional technical or logistical requirements (e.g. AV equipment, interpreters, etc)" },
{ label: "Company/organization profile" },
{ label: "Proposal presentation" },
{ label: "Relevant certification/licenses" },
],
button: "Send",
},
{
h2: "Duşuşygyň logistikasy:",
secondH2: "Goşmaçalar",
subtitle: "(Zerur bolsa aşakdaky resminamalary goşuň)",
data: [
{ label: "Duşuşyk üçin islenýän sene we wagt" },
{ label: "Duşuşygyň islenýän görnüşi (ýüzbe-ýüz, wirtual (zoom/teams/başga), gibrid)" },
{ label: "Dil saýlamasy (iňlis, türkmen, rus, başga)" },
{ label: "Goşmaça tehniki ýa-da logistik talaplar (meselem, AW enjamlar, terjimeçiler we ş.m.)" },
{ label: "Kompaniýanyň/guramanyň profili" },
{ label: "Teklip/prezentasiýa" },
{ label: "Degişli şahadatnama/ygtyýarnama" },
],
button: "Ugratmak",
},
];

View File

@ -38,4 +38,24 @@ export const contacts = [
},
],
},
{
data: [
{
title: "contact@turkmenexpo.com",
subtitle: "Elektron poçtanyň salgysy",
img: "/contacts/home/mail.svg",
},
{
title: "Türkmenistanyň SSE-nyň binasy",
subtitle: "Serginiň salgysy",
img: "/contacts/home/location.svg",
},
{
title: "+99371871812; 99363719588",
subtitle: "Habarlaşmak üçin belgiler",
img: "/contacts/home/mobile.svg",
},
],
},
];

View File

@ -166,4 +166,81 @@ export const navData = [
},
],
},
{
data: [
{
title: "Ýol görkeziji",
link: "https://turkmentextile.turkmenexpo.com/app/storage/app/media/travel_guide/Travel_guide_eng.pdf",
blank: true,
},
{
title: "Täzelikler",
dropDown: true,
dropDownContent: [
{ text: "Täzelikler", link: "" },
{ text: "Täzeliklere ýazylmak", modal: true },
],
},
{
title: "Aragatnaşyk",
link: "/contacts",
},
{
title: "Sergi hakynda",
dropDown: true,
dropDownContent: [
{
text: "Sergi hakynda",
link: "/about",
},
{
text: "Media",
link: "",
},
],
},
{
title: "Gelýänlere",
dropDown: true,
dropDownContent: [
{
text: "Gatnaşanyňa näme üçin degýär?",
link: "",
},
{
text: "Gatnasyjylaryň sanawy",
link: "",
blank: true,
},
{
text: "Ýol görkeziji",
link: "https://turkmentextile.turkmenexpo.com/app/storage/app/media/travel_guide/Travel_guide_eng.pdf",
blank: true,
},
],
},
{
title: "Gatnasyjylara",
dropDown: true,
dropDownContent: [
{
text: "Stend bronlamak",
link: "/stend-form",
},
{
text: "Näme sebäpli gatnaşanyňa degýär?",
link: "",
},
{
text: "Tematiki bölümler",
link: "",
},
],
},
],
},
];

View File

@ -58,4 +58,33 @@ export const homeAbout = [
button: "Report",
button2: "Catalog",
},
{
h2: "Aşgabatda «TurkmenTextile Expo-2025» sergi-ýarmarkasy",
p: `Pudagyň dünýä liderlerini, innowasion önümçileri we döredijilikli dizaýnerleri birleşdirjek halkara sergi-ýarmarka.
Biziň maksadymyz Türkmenistany dokma we moda senagatynyň esasy merkezi hökmünde berkitmek.
`,
p_2: `Sergi durnukly praktikalary, häzirkizaman tilsimatlary we dizaýn çözgütlerini öwrenmek üçin platforma bolar.
«TurkmenTextile Expo-2025» bu däp-dessurlary we innowasiýalary, önüm öndürijileri we sarp edijileri, Türkmenistany we dünýäni birleşdirýän platformadyr!`,
data: [
{
nums: "10,000 m²",
text: "Sergi meýdanyňky",
},
{
nums: "10000+",
text: "Geljek adamlaryň garaşylýan sany",
},
{
nums: "100+",
text: "30 ýurtdan gowurak eksponentler",
},
{
nums: "80%",
text: "Top-menejmentden gatnaşyjylar",
},
],
button: "Hasabat",
button2: "Katalog",
},
];

View File

@ -46,4 +46,27 @@ export const btns = [
},
],
},
{
lang: Language.TM,
data: [
{
title: "Serginiň meýilnamasy",
link: "https://turkmentextile.turkmenexpo.com/app/storage/app/media/Floor%20plan/floor%20plan.pdf",
blank: true,
},
{
title: "Stend bronlamak",
link: "/stend-form",
},
{
title: "Gatnasyjylaryň sanawy",
link: "/participants",
},
{
title: "B2B | B2G duşuşyklar",
link: "/B2B-B2G",
},
],
},
];

View File

@ -29,11 +29,30 @@ export const offersData = [
},
{
img: "/offer-2.png",
title: "Explore “TurkmenTextile Expo-2025” plan;",
title: "Explore \u201CTurkmenTextile Expo-2025\u201D plan;",
btnText: "Download exhibition plan.",
text: `How to choose the best location at the exhibition? A prime spot increases your chances to attract potential clients;`,
link: "https://turkmentextile.turkmenexpo.com/app/storage/app/media/Floor%20plan/floor%20plan.pdf",
},
],
},
{
data: [
{
img: "/offer-1.png",
title: "Myhmanhanalar, transfer, wizalar",
btnText: "Ýol görkezijini ýüklemek",
text: "Myhmanhanalara ýerleşmek, wiza goldawy, ulag we ekskursiýa meseleleri boýunça Siz ýol görkezijiden tanyşyp bilersiňiz",
link: "https://turkmentextile.turkmenexpo.com/app/storage/app/media/travel_guide/Travel_guide_eng.pdf",
},
{
img: "/offer-2.png",
title: "TurkmenTextile Expo 2026 serginiň meýilnamasy bilen tanyşmak",
btnText: "Serginiň meýilnamasyny ýüklemeli",
text: `Sergide oňat ýeri nädip saýlamaly? Sergi ekspozisiýasyny şowly ýerleşdirmegiň Siziň potensial müşderileriňizi çekmek boýunça mümkinçilikleriňizi has-da artdyrýandygyny Siz hemişe ýatda saklamalysyňyz.`,
link: "https://turkmentextile.turkmenexpo.com/app/storage/app/media/Floor%20plan/floor%20plan.pdf",
},
],
},
];

View File

@ -80,4 +80,45 @@ export const homeTheme = [
},
],
},
{
title: "Serginiň tematiki ugurlary",
bottom_text: `
Gatnaşyjylar innowasion çözgütleri görkezip, özara peýdaly hyzmatdaşlyklary ýola goýup we täze bazarlara çykyp bilerler.`,
data: [
{
title: "Dokma maşynlary we enjamlary",
img: "/theme/1.svg",
},
{
title: "Eşik, aýakgap, deri önümleri",
img: "/theme/2.svg",
},
{
title: "Tebigy süýümleri gaýtadan işlemek",
img: "/theme/3.svg",
},
{
title: "Öý dokmasy we eko-dokma",
img: "/theme/4.svg",
},
{
title: "Ätiýaçlyk şaýlar we kömekçi materiallar",
img: "/theme/5.svg",
},
{
title: "Himiki serişdeler we boýaglar",
img: "/theme/6.svg",
},
{
title: "Aksessuarlar we tikin furniturasy",
img: "/theme/7.svg",
},
{
title: "Moda we bezeg (dizaýn)",
img: "/theme/8.svg",
},
],
},
];

View File

@ -34,4 +34,22 @@ export const times = [
},
],
},
{
title: "Serginiň wagty",
data: [
{
name: "Sergini gurnamaklyk",
date: "2026-njy ýylyň 30 Maýy 3 iýuny",
},
{
name: "Işi",
date: "4-6 iýun 2026-njy ýyl",
},
{
name: "Sökmek",
date: "7 iýun 2026 ýyl",
},
],
},
];

View File

@ -44,4 +44,27 @@ export const stendData = [
button: "Send",
},
{
cover: "Stend bronlamak",
h2: "Wariantlaryň birini saýlaň:",
radio: "Enjamlaşdyrylmadyk meýdan",
radio_2: "Enjamlaşdyrylan meýdan",
label_1: "Kompaniýanyň/guramanyň ady",
label_2: "Wekiliniň ady",
label_3: "Wezipesi",
number_of_participants: "Gatnaşyjylaryň sany",
label_4: "Ýurt",
label_5: "Email salgysy",
label_6: "Telefon belgisi",
label_7: "Web-saýt",
visa: "Wiza goldawy:",
visa_radio: "Hawa",
visa_radio_2: "Ýok",
button: "Ugratmak",
},
];

View File

@ -1,7 +1,7 @@
import { getNews } from "@/services/service";
import { useQuery } from "@tanstack/react-query";
export const useNews = (lang: "ru" | "en") => {
export const useNews = (lang: "ru" | "en" | "tm") => {
const { data, isPending } = useQuery({
queryKey: ["news", lang],
queryFn: () => getNews(lang),

View File

@ -1,7 +1,8 @@
import { useLangStore } from "@/store/lang";
export const useLang = (data: string, data_2: string) => {
export const useLang = (data: string, data_2: string, data_3?: string) => {
const lang = useLangStore((state) => state.lang);
if (lang === "ru") return data;
else return data_2;
if (lang === "tm") return data_3 ?? data_2;
return data_2;
};

View File

@ -1,14 +1,29 @@
import { useLenis } from "lenis/react";
import { useEffect } from "react";
import { useLocation } from "react-router-dom";
export const useScrollTop = (arg?: string | number) => {
const lenis = useLenis();
const { hash } = useLocation();
useEffect(() => {
if (!lenis) return;
if (hash) {
const el = document.querySelector(hash);
if (el) {
lenis.scrollTo(el as HTMLElement, {
lerp: 0.3,
duration: 0.8,
offset: -140,
});
return;
}
}
lenis.scrollTo(0, {
lerp: 0.3,
duration: 0.3,
});
}, [lenis, arg]);
}, [lenis, arg, hash]);
};

View File

@ -1,5 +1,7 @@
import { Language } from "@/store/lang";
export const useTranslate = (lang: "en" | "ru"): number => {
return lang === Language.RU ? 0 : 1;
export const useTranslate = (lang: "en" | "ru" | "tm"): number => {
if (lang === Language.RU) return 0;
if (lang === Language.TM) return 2;
return 1;
};

View File

@ -19,6 +19,13 @@ import mainRu from "./locales/ru/main.json";
import contactsEn from "./locales/en/contacts.json";
import contactsRu from "./locales/ru/contacts.json";
import headerTm from "./locales/tm/header.json";
import navTm from "./locales/tm/nav.json";
import homeTm from "./locales/tm/home.json";
import aboutTm from "./locales/tm/about.json";
import mainTm from "./locales/tm/main.json";
import contactsTm from "./locales/tm/contacts.json";
import { useLangStore } from "./store/lang";
const initialLanguage = useLangStore.getState().lang;
@ -41,6 +48,14 @@ i18n.use(initReactI18next).init({
contacts: contactsRu,
main: mainRu,
},
tm: {
nav: navTm,
header: headerTm,
home: homeTm,
about: aboutTm,
contacts: contactsTm,
main: mainTm,
},
},
lng: initialLanguage, // Язык по умолчанию
fallbackLng: "en",

View File

@ -2,85 +2,173 @@ import { z } from "zod";
export const MAX_FILE_SIZE = 2 * 1024 * 1024; // 2 МБ
export const formSchema = z.object({
type: z.string(),
company_name: z
.string()
.min(3, { message: "Название компании должно быть не менее 3 символов" }),
representative_name: z
.string()
.min(3, { message: "Имя представителя должно быть не менее 3 символов" }),
job_title: z
.string()
.min(3, { message: "Должность должна быть не менее 3 символов" }),
participants_number: z
.string()
.min(1, { message: "Укажите количество участников" }),
country: z
.string()
.min(3, { message: "Название страны должно быть не менее 3 символов" }),
email_address: z.string().email({ message: "Укажите корректный email" }),
phone_number: z
.string()
.min(8, { message: "Номер телефона должен быть не менее 8 символов" }),
website: z.string().optional(),
const msg = (ru: string, en: string, tm: string, lang: string) =>
lang === "ru" ? ru : lang === "tm" ? tm : en;
meeting_objective: z.string().min(3, { message: "Укажите цель встречи" }),
proposal_description: z.string().optional(),
government_agency: z.string().optional(),
sector_industry: z.string().optional(),
key_services: z.string().optional(),
government_experience: z.string().optional(),
export const createFormSchema = (lang: string) =>
z.object({
type: z.string(),
company_name: z
.string()
.min(3, {
message: msg(
"Название компании должно быть не менее 3 символов",
"Company name must be at least 3 characters",
"Kompaniýanyň ady azyndan 3 simwoldan ybarat bolmaly",
lang
),
}),
representative_name: z
.string()
.min(3, {
message: msg(
"Имя представителя должно быть не менее 3 символов",
"Representative name must be at least 3 characters",
"Wekiliniň ady azyndan 3 simwoldan ybarat bolmaly",
lang
),
}),
job_title: z
.string()
.min(3, {
message: msg(
"Должность должна быть не менее 3 символов",
"Job title must be at least 3 characters",
"Wezipesi azyndan 3 simwoldan ybarat bolmaly",
lang
),
}),
participants_number: z
.string()
.min(1, {
message: msg(
"Укажите количество участников",
"Specify the number of participants",
"Gatnaşyjylaryň sanyny görkeziň",
lang
),
}),
country: z
.string()
.min(3, {
message: msg(
"Название страны должно быть не менее 3 символов",
"Country must be at least 3 characters",
"Ýurduň ady azyndan 3 simwoldan ybarat bolmaly",
lang
),
}),
email_address: z.string().email({
message: msg(
"Укажите корректный email",
"Enter a valid email",
"Dogry email salgysyny giriziň",
lang
),
}),
phone_number: z
.string()
.min(8, {
message: msg(
"Номер телефона должен быть не менее 8 символов",
"Phone number must be at least 8 characters",
"Telefon belgisi azyndan 8 simwoldan ybarat bolmaly",
lang
),
}),
website: z.string().optional(),
preferred_meeting_datetime: z.string().optional(),
meeting_mode: z.string().optional(),
language_preference: z.string().optional(),
technical_requirements: z.string().optional(),
company_profile: z
.custom<File>((value) => value instanceof File, {
message: "Выберите корректный файл",
})
.refine(
(file) =>
file &&
["image/jpeg", "image/png", "application/pdf"].includes(file.type),
{
message: "Допускаются только файлы JPG, PNG и PDF",
}
)
.optional(),
proposal_presentation: z
.custom<File>((value) => value instanceof File, {
message: "Выберите корректный файл",
})
.refine(
(file) =>
file &&
["image/jpeg", "image/png", "application/pdf"].includes(file.type),
{
message: "Допускаются только файлы JPG, PNG и PDF",
}
)
.optional(),
relevant_certification: z
.custom<File>((value) => value instanceof File, {
message: "Выберите корректный файл",
})
.refine(
(file) =>
file &&
["image/jpeg", "image/png", "application/pdf"].includes(file.type),
{
message: "Допускаются только файлы JPG, PNG и PDF",
}
)
.optional(),
});
meeting_objective: z.string().min(3, {
message: msg(
"Укажите цель встречи",
"Specify the meeting objective",
"Duşuşygyň maksadyny görkeziň",
lang
),
}),
proposal_description: z.string().optional(),
government_agency: z.string().optional(),
sector_industry: z.string().optional(),
key_services: z.string().optional(),
government_experience: z.string().optional(),
// Тип для формы
export type FormType = z.infer<typeof formSchema>;
preferred_meeting_datetime: z.string().optional(),
meeting_mode: z.string().optional(),
language_preference: z.string().optional(),
technical_requirements: z.string().optional(),
company_profile: z
.custom<File>((value) => value instanceof File, {
message: msg(
"Выберите корректный файл",
"Select a valid file",
"Dogry faýly saýlaň",
lang
),
})
.refine(
(file) =>
file &&
["image/jpeg", "image/png", "application/pdf"].includes(file.type),
{
message: msg(
"Допускаются только файлы JPG, PNG и PDF",
"Only JPG, PNG and PDF files are allowed",
"Diňe JPG, PNG we PDF faýllary kabul edilýär",
lang
),
}
)
.optional(),
proposal_presentation: z
.custom<File>((value) => value instanceof File, {
message: msg(
"Выберите корректный файл",
"Select a valid file",
"Dogry faýly saýlaň",
lang
),
})
.refine(
(file) =>
file &&
["image/jpeg", "image/png", "application/pdf"].includes(file.type),
{
message: msg(
"Допускаются только файлы JPG, PNG и PDF",
"Only JPG, PNG and PDF files are allowed",
"Diňe JPG, PNG we PDF faýllary kabul edilýär",
lang
),
}
)
.optional(),
relevant_certification: z
.custom<File>((value) => value instanceof File, {
message: msg(
"Выберите корректный файл",
"Select a valid file",
"Dogry faýly saýlaň",
lang
),
})
.refine(
(file) =>
file &&
["image/jpeg", "image/png", "application/pdf"].includes(file.type),
{
message: msg(
"Допускаются только файлы JPG, PNG и PDF",
"Only JPG, PNG and PDF files are allowed",
"Diňe JPG, PNG we PDF faýllary kabul edilýär",
lang
),
}
)
.optional(),
});
export type FormType = z.infer<ReturnType<typeof createFormSchema>>;
// Значения по умолчанию
export const defaultValuesOfB2b = {
type: "B2B",
company_name: "",

View File

@ -1,34 +1,80 @@
import { z } from "zod";
export type SponsorFormType = z.infer<typeof sponsorFormSchema>;
const msg = (ru: string, en: string, tm: string, lang: string) =>
lang === "ru" ? ru : lang === "tm" ? tm : en;
export const sponsorFormSchema = z.object({
company_name: z
.string()
.min(3, { message: "Название компании должно быть не менее 3 символов" }),
export const createSponsorFormSchema = (lang: string) =>
z.object({
company_name: z
.string()
.min(3, {
message: msg(
"Название компании должно быть не менее 3 символов",
"Company name must be at least 3 characters",
"Kompaniýanyň ady azyndan 3 simwoldan ybarat bolmaly",
lang
),
}),
rep_name: z
.string()
.min(3, { message: "Имя представителя должно быть не менее 3 символов" }),
rep_name: z
.string()
.min(3, {
message: msg(
"Имя представителя должно быть не менее 3 символов",
"Representative name must be at least 3 characters",
"Wekiliniň ady azyndan 3 simwoldan ybarat bolmaly",
lang
),
}),
job_title: z
.string()
.min(3, { message: "Должность должна быть не менее 3 символов" }),
job_title: z
.string()
.min(3, {
message: msg(
"Должность должна быть не менее 3 символов",
"Job title must be at least 3 characters",
"Wezipesi azyndan 3 simwoldan ybarat bolmaly",
lang
),
}),
country: z
.string()
.min(3, { message: "Название страны должно быть не менее 3 символов" }),
country: z
.string()
.min(3, {
message: msg(
"Название страны должно быть не менее 3 символов",
"Country must be at least 3 characters",
"Ýurduň ady azyndan 3 simwoldan ybarat bolmaly",
lang
),
}),
email: z.string().email({ message: "Укажите корректный email" }),
email: z.string().email({
message: msg(
"Укажите корректный email",
"Enter a valid email",
"Dogry email salgysyny giriziň",
lang
),
}),
phone: z
.string()
.min(8, { message: "Номер телефона должен быть не менее 8 символов" }),
phone: z
.string()
.min(8, {
message: msg(
"Номер телефона должен быть не менее 8 символов",
"Phone number must be at least 8 characters",
"Telefon belgisi azyndan 8 simwoldan ybarat bolmaly",
lang
),
}),
website: z.string().optional(),
website: z.string().optional(),
visa_support: z.string().optional(),
});
visa_support: z.string().optional(),
});
export type SponsorFormType = z.infer<ReturnType<typeof createSponsorFormSchema>>;
export const sponsorDefaultValues = {
company_name: "",

View File

@ -1,41 +1,92 @@
import { z } from "zod";
export type StandFormType = z.infer<typeof standFormSchema>;
const msg = (ru: string, en: string, tm: string, lang: string) =>
lang === "ru" ? ru : lang === "tm" ? tm : en;
export const standFormSchema = z.object({
space_package: z.string(),
export const createStandFormSchema = (lang: string) =>
z.object({
space_package: z.string(),
company_name: z
.string()
.min(3, { message: "Название компании должно быть не менее 3 символов" }),
company_name: z
.string()
.min(3, {
message: msg(
"Название компании должно быть не менее 3 символов",
"Company name must be at least 3 characters",
"Kompaniýanyň ady azyndan 3 simwoldan ybarat bolmaly",
lang
),
}),
rep_name: z
.string()
.min(3, { message: "Имя представителя должно быть не менее 3 символов" }),
rep_name: z
.string()
.min(3, {
message: msg(
"Имя представителя должно быть не менее 3 символов",
"Representative name must be at least 3 characters",
"Wekiliniň ady azyndan 3 simwoldan ybarat bolmaly",
lang
),
}),
job_title: z
.string()
.min(3, { message: "Должность должна быть не менее 3 символов" }),
job_title: z
.string()
.min(3, {
message: msg(
"Должность должна быть не менее 3 символов",
"Job title must be at least 3 characters",
"Wezipesi azyndan 3 simwoldan ybarat bolmaly",
lang
),
}),
participants_number: z.preprocess(
(val) => Number(val),
z.number().min(1, "Укажите количество участников")
),
participants_number: z.preprocess(
(val) => Number(val),
z.number().min(1, msg(
"Укажите количество участников",
"Specify the number of participants",
"Gatnaşyjylaryň sanyny görkeziň",
lang
))
),
country: z
.string()
.min(3, { message: "Название страны должно быть не менее 3 символов" }),
country: z
.string()
.min(3, {
message: msg(
"Название страны должно быть не менее 3 символов",
"Country must be at least 3 characters",
"Ýurduň ady azyndan 3 simwoldan ybarat bolmaly",
lang
),
}),
email: z.string().email({ message: "Укажите корректный email" }),
email: z.string().email({
message: msg(
"Укажите корректный email",
"Enter a valid email",
"Dogry email salgysyny giriziň",
lang
),
}),
phone: z
.string()
.min(8, { message: "Номер телефона должен быть не менее 8 символов" }),
phone: z
.string()
.min(8, {
message: msg(
"Номер телефона должен быть не менее 8 символов",
"Phone number must be at least 8 characters",
"Telefon belgisi azyndan 8 simwoldan ybarat bolmaly",
lang
),
}),
website: z.string().optional(),
website: z.string().optional(),
visa_support: z.string().optional(),
});
visa_support: z.string().optional(),
});
export type StandFormType = z.infer<ReturnType<typeof createStandFormSchema>>;
export const standDefaultValues = {
space_package: "space",

View File

@ -8,13 +8,13 @@
],
"md": [
{
"path": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/surat/05112025/EN_m.jpg",
"path": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/surat/05112025/1920x600_TEXTILE_WebBanners_eng.mp4",
"link": "/stend-form"
}
],
"sm": [
{
"path": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/surat/05112025/EN_s.jpg",
"path": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/surat/05112025/1920x600_TEXTILE_WebBanners_eng.mp4",
"link": "/stend-form"
}
]

View File

@ -84,6 +84,14 @@
"title": "Exhibitors",
"drop": true,
"dropDownContent": [
{
"text": "Participation Options",
"link": "/participation-options"
},
{
"text": "Partnership Opportunities",
"link": "/partner-opportunities"
},
{
"text": "Book a stand",
"link": "/stend-form"
@ -94,7 +102,7 @@
},
{
"text": "Themtic areas of the exhibition",
"link": ""
"link": "/#themes"
}
]
}

View File

@ -8,13 +8,13 @@
],
"md": [
{
"path": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/surat/05112025/RUS_m.jpg",
"path": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/surat/05112025/1920x600_TEXTILE_WebBanners_ru.mp4",
"link": "/stend-form"
}
],
"sm": [
{
"path": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/surat/05112025/RUS_s.jpg",
"path": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/surat/05112025/1920x600_TEXTILE_WebBanners_ru.mp4",
"link": "/stend-form"
}
]

View File

@ -83,6 +83,15 @@
"title": "Участникам",
"drop": true,
"dropDownContent": [
{
"text": "Варианты участия",
"link": "/participation-options"
},
{
"text": "Партнерские возможности",
"link": "/partner-opportunities"
},
{ "text": "Забронировать стенд", "link": "/stend-form" },
{
"text": "Почему стоит учатсвовать",
@ -90,7 +99,7 @@
},
{
"text": "Тематические разделы",
"link": ""
"link": "/#themes"
}
]
}

44
src/locales/tm/about.json Normal file
View File

@ -0,0 +1,44 @@
{
"main": {
"block": {
"title": "Aşgabatda «TurkmenTextile Expo-2025» sergi-ýarmarkasy",
"texts": [
"Pudagyň dünýä liderlerini, innowasion önümçileri we döredijilikli dizaýnerleri birleşdirjek halkara sergi-ýarmarka. Ol dokma we moda pudagynda işiňizi ösdürmek üçin özboluşly platformadyr.",
"Bu serginiň maksady Türkmenistany halkara dokma we moda senagatynda esasy merkez hökmünde görkezmek, ýurduň baý dokma mirasyny tanyşdyrmak, pudaga innowasiýalary ornaşdyrmaga ýardam etmek we halkara hyzmatdaşlygy berkitmek.",
"«TurkmenTextile Expo-2025» bu däp-dessurlary we innowasiýalary, önüm öndürijileri we sarp edijileri, Türkmenistany we dünýäni birleşdirýän platformadyr!",
"Siz bu ýerde pudagyň öňdebaryjy oýunçylary bilen gatnaşyk gurup bilersiňiz, öz önümleriňizi ýa-da hyzmatlaryňyzy görkezip bilersiňiz, bazardaky soňky tendensiýalar bilen tanyşarsyňyz, şeýle hem täze hyzmatdaşlary we müşderileri taparsyňyz.",
"Biziň maksadymyz Türkmenistanyň dokma we moda senagatynyň esasy merkezi hökmünde pozisiýasyny berkitmek. Sergi durnukly praktikalary, häzirkizaman tilsimatlary we täze dizaýn çözgütlerini öwrenmek üçin platforma bolup hyzmat eder."
]
},
"block_2": {
"title": "Siz näme üçin barmaly?",
"subtitle": "TurkmenTextile Expo-2025 gatnaşyjylar üçin giň perspektiwalary açýar:",
"texts": [
"Türkmenistanyň dokma pudagynyň ýolbaşçylary bilen işewür duşuşyklar.",
"Eksport ugurlaryny ösdürmek üçin Türkmenistanyň dokma senagatynyň kärhanalary we fabrikleri bilen işewür gatnaşyklary ýola goýmak mümkinçilikleri.",
"Işewür gatnaşyklary giňeltmek B2B we B2G duşuşyklary, söwda ylalaşyklaryny baglaşmak we strategiki hyzmatdaşlygy ýola goýmak üçin uly mümkinçilik.",
"Öwrenmek we ösmek öňdebaryjy dünýä ekspertleriniň master-klaslary we leksiýalary gatnaşyjylara bilimlerini çuňlaşdyrmaga we dokma senagatynda täze çemeleşmeleri özleşdirmäge kömek eder.",
"Medeni alyş-çalyş Türkmenistanyň baý dokma mirasynyň mümkinçiliklerini görkezmek we başga ýurtlaryň baý dokma mirasyndan ruhlanmak mümkinçiligi."
]
},
"block_3": {
"title": "Hyzmatdaşlyk we hemaýatkärlik",
"subtitle": "TurkmenTextile Expo-2025 halkara guramalaryny, assosiasiýalary we brendleri öz önümlerini we hyzmatlaryny öňe sürmek üçin hyzmatdaşlyga çagyrýar. Hyzmatdaşlar şulary alarlar:",
"texts": [
"Halkara arenasynda ykrar edilmek dokma we moda industriýasynyň belli oýunçylaryny özüne çekýän uly waka gatnaşmak.",
"Reklama mümkinçilikleri brendiň serginiň marketing kampaniýasyna integrasiýasy, şol sanda dijital we oflaýn-kanallar.",
"Auditoriýa göni rugsat öndürijiler, dizaýnerler, enjamlary üpjün edijiler bilen bilelikdäki hereket.",
"Senagatyň ösüşine goşant innowasiýalaryň, durnukly praktikalaryň we medeni mirasyň goldawy."
]
},
"button": "Hemaýatkär bolmak"
},
"invataion": {
"title": "Gatnaşmaga çakylyk",
"text": "Türkmenistanyň dokma senagaty Ministrligi Türkmenistanyň halkara ykdysady arenada orunlaryny berkitmekde wajyp ädim boljak bu uly waka gatnaşmaga bütin dünýäniň biznes-bileleşiklerini çagyrýar."
}
}

View File

@ -0,0 +1,13 @@
{
"title": "Biziň bilen habarlaşmak",
"name": "Ady",
"phone": "Telefon",
"company": "Kompaniýanyň ady",
"message": "Habar",
"button": "Ugratmak",
"title_2": "Kontaktlar",
"address": "Salgy:",
"venue": "744000, Aşgabat ş., Bitarap Türkmenistan şaýoly, 183",
"submitted": "Habaryňyz ugradyldy"
}

View File

@ -0,0 +1,71 @@
{
"venue": "Aşgabat, Türkmenistan",
"guide": {
"title": "Ýol görkeziji"
},
"contacts": {
"title": "Aragatnaşyk",
"link": "/contacts"
},
"support": {
"text": "Resmi goldaw",
"link": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/official_support/official_support_eng.pdf"
},
"news": {
"trigger": "Täzelikler",
"item": ["Täzeliklere ýazylmak"]
},
"": "",
"about": {
"trigger": "Sergi hakynda"
},
"visitors": {
"trigger": "Gelýänlere",
"items": [
{
"title": "Gatnaşanyňa näme üçin degýär?",
"link": ""
},
{
"title": "Gatnasyjylaryň sanawy",
"link": ""
},
{
"title": "Meýilnama",
"link": ""
}
]
},
"exhibitors": {
"trigger": "Gatnasyjylara"
},
"participants": {
"trigger": "Gatnasyjylaryň sanawy",
"items": [
{
"title": "Stend bronlamak",
"link": "/stend-form"
},
{
"title": "Näme sebäpli gatnaşanyňa degýär?",
"link": "/stend-form"
},
{
"title": "Tematiki bölümler",
"link": ""
}
]
}
}

144
src/locales/tm/home.json Normal file
View File

@ -0,0 +1,144 @@
{
"banners": {
"lg": [
{
"path": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/surat/05112025/1920x600_TEXTILE_WebBanners_eng.mp4",
"link": "/stend-form"
}
],
"md": [
{
"path": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/surat/05112025/1920x600_TEXTILE_WebBanners_eng.mp4",
"link": "/stend-form"
}
],
"sm": [
{
"path": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/surat/05112025/1920x600_TEXTILE_WebBanners_eng.mp4",
"link": "/stend-form"
}
]
},
"timer": {
"title": "Çärä çenli:",
"days": "gün",
"hours": "sagat",
"minutes": "minut",
"seconds": "sekunt"
},
"reportLink": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/Report/Post-Event%202025%20TurkmenTextile.pdf",
"buttons": {
"title": "Çalt hereketler",
"items": [
{
"text": "Serginiň meýilnamasy",
"link": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/Floor%20plan/floor%20plan.pdf",
"blank": true
},
{
"text": "Stend bronlamak",
"link": "/stend-form"
},
{
"text": "Gatnasyjylaryň sanawy",
"link": "/participants"
},
{
"text": "B2B | B2G duşuşyklar",
"link": "/B2B-B2G"
},
{
"text": "Moda görkezişler",
"dropdown": true,
"items": [
{
"text": "Daşary ýurt dizaýnerleri",
"link": "/impressions"
},
{
"text": "Türkmen dizaýnerleri",
"link": "/impressions-tm"
}
]
},
{
"text": "Master-klasslar",
"dropdown": true,
"items": [
{
"text": "Dizaýnerler üçin",
"link": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/Masterclasses_d/Masterclasses_eng.pdf",
"blank": true
},
{
"text": "Gelýänler üçin",
"link": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/Masterclasses_v/Masterclasses_eng.pdf",
"blank": true
}
]
}
]
},
"partners": {
"title": "Hyzmatdaşlar",
"button": ""
},
"about": {
"buttons": [
{
"title": "Serginiň meýilnamasy",
"link": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/Floor%20plan/floor%20plan.pdf",
"blank": true
},
{
"title": "Stend bronlamak",
"link": "/stend-form"
},
{
"title": "Gatnasyjylaryň sanawy",
"link": "/participants"
},
{
"title": "B2B | B2G duşuşyklar",
"link": "/B2B-B2G"
}
],
"title": "Aşgabatda «TurkmenTextile Expo-2025» sergi-ýarmarkasy",
"paragraphs": [
"Pudagyň dünýä liderlerini, innowasion önümçileri we döredijilikli dizaýnerleri birleşdirjek sergi-ýarmarka. Sergi pudagy ösdürmäge hyjuw bermek bilen, durnukly praktikalary, häzirkizaman tilsimatlary we täze dizaýn çözgütlerini öwrenmek üçin platforma bolar.",
"Serginiň esasy maksady Türkmenistany halkara dokma we moda senagatynyň esasy merkezi hökmünde görkezmek, milli dokma mirasyny tanyşdyrmak, pudaga innowasiýalary ornaşdyrmaga ýardam etmek we halkara hyzmatdaşlygy berkitmek."
],
"cards": [
{
"nums": "10,000 m²",
"text": "Sergi meýdanyňky"
},
{
"nums": "10000+",
"text": "Geljek adamlaryň garaşylýan sany"
},
{
"nums": "100+",
"text": "30 ýurtdan gowurak eksponentler"
},
{
"nums": "80%",
"text": "Top-menejmentden gatnaşyjylar"
}
],
"button": "Köpräk"
},
"sponsors": {
"title": "Hemaýatkärler we hyzmatdaşlar"
}
}

32
src/locales/tm/main.json Normal file
View File

@ -0,0 +1,32 @@
{
"impressions": {
"banner": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/surat/new/web_eng.jpg",
"hero": {
"title": "TurkmenTextile Expo-2025 Ýüpek Ýolunda stiliň çatrygy!",
"texts": [
"Beýik Ýüpek ýolunyň ýüreginden dünýä modasynyň şöhle saçýan belentliklerine tarap!",
"TurkmenTextile Expo-2025 sizi syýahata çagyrýar, bu ýerde asyrlyk däpler, iň aktual trendler we tutuş dünýäden çäksiz talantly dizaýnerler duşuşýarlar. Bu joşgun we ussatlyk bilen döredilen owazly sazlaşykdyr.",
"Bu ägirt uly wakanyň bölegi bolmak mümkinçiligini elden bermäň! 11-13-nji iýunda Türkmenistanyň Söwda-senagat edarasynda bize goşulyň, Aşgabat ş."
],
"button": "Senenama goşmaly",
"button2": "Meýilnamany almaly",
"title2": "TurkmenTextile Expo-2025 Ýüpek Ýolunda stiliň çatrygy!",
"texts2": [
"TurkmenTextile Expo-2025 sizi gyzykly syýahata çagyrýar, bu ýerde asyrlyk däpler, iň täze trendler we tutuş dünýäden çäksiz talantly dizaýnerler duşuşýarlar. Bu joşgunyň we ussatlygyň hakyky sazlaşygydyr.",
"Bu ägirt uly wakanyň bölegi bolmak mümkinçiligini elden bermäň! 11-13-nji iýunda Türkmenistanyň Söwda-senagat edarasynda bize goşulyň, Aşgabat ş."
]
},
"designers": {
"title": "Stil ussatlary bilen tanyşlyk: TurkmenTextile Expo-2025 türkmen dizaýnerlerini tanyşdyrýar!",
"text": "Biz Türkmenistanyň talantly dizaýnerlerini buýsanç bilen tanyşdyrýarys, olaryň batyrgaý toplumlary ýokary ussatlyk, birkemsiz biçüw we jikme-jikliklere üns bermek bilen tapawutlanýar. Olaryň geljege bolan batyrgaý garaýyşlary baý medeni miras bilen sazlaşykly birleşip, giň auditoriýany eýelemäge we türkmen moda dizaýnerleriniň dünýä derejesindäki ussatlygyny görkezmäge taýýar özboluşly eserleri döredýär.",
"title2": "Moda ussatlary bilen tanyşlyk: TurkmenTextile Expo-2025 dünýä dizaýnerlerini tanyşdyrýar!",
"text2": "TurkmenTextile Expo-2025 halkara sergisi aýratyn buýsanç bilen dünýä belli atly dizaýnerleri garşy alar. Olaryň gatnaşmagy çärä diňe bir täze tendensiýalary we innowasion tilsimatlary getirmän, eýsem moda industriýasynyň geljegine ajaýyp göz ýetirişi getirer. Biz uly höwes bilen bu görnükli dizaýnerleriň işlerini we portretlerini siziň dykgatyňyza ýetireris."
},
"videosTitle": "TurkmenTextile Expo-2025 podiumynda dizaýnerleriň triumfyna aralaşyň",
"videosTitle2": "Dünýä modasynyň elitasy: halkara dizaýnerleriň eksklýuziw toplumlary TurkmenTextile Expo-2025-de"
},
"media": {
"button": "Köpüräk görkezmek"
}
}

110
src/locales/tm/nav.json Normal file
View File

@ -0,0 +1,110 @@
{
"navigation": [
{
"title": "Ýol görkeziji",
"link": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/travel_guide/Travel_guide_eng.pdf",
"blank": "blank"
},
{
"title": "Täzelikler",
"drop": true,
"dropDownContent": [
{ "text": "Täzelikler", "link": "/news" },
{
"text": "Täzeliklere ýazylmak",
"modal": true
}
]
},
{ "title": "Aragatnaşyk", "link": "/contacts" },
{
"title": "Sergi hakynda",
"drop": true,
"dropDownContent": [
{ "text": "Sergi hakynda", "link": "/about" },
{
"text": "Media",
"link": "/media"
},
{
"text": "Moda görkezişler",
"hover": true,
"hoverItems": [
{
"text": "Daşary ýurt dizaýnerleri",
"link": "/impressions"
},
{
"text": "Türkmen dizaýnerleri",
"link": "/impressions-tm"
}
]
}
]
},
{
"title": "Gelýänlere",
"drop": true,
"dropDownContent": [
{ "text": "Gatnaşanyňa näme üçin degýär?", "link": "" },
{
"text": "Gatnasyjylaryň sanawy",
"link": "/participants"
},
{
"text": "Meýilnama",
"link": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/agenda/agenda_en.pdf",
"blank": "blank"
},
{
"text": "Ýol görkeziji",
"link": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/travel_guide/Travel_guide_eng.pdf",
"blank": "blank"
},
{
"text": "Master-klasslar",
"hover": true,
"hoverItems": [
{
"text": "Dizaýnerler üçin",
"link": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/Masterclasses_d/Masterclasses_eng.pdf",
"blank": true
},
{
"text": "Gelýänler üçin",
"link": "https://turkmentextile.turkmenexpo.com/app/storage/app/media/Masterclasses_v/Masterclasses_eng.pdf",
"blank": true
}
]
}
]
},
{
"title": "Gatnasyjylara",
"drop": true,
"dropDownContent": [
{
"text": "Gatnaşmagyň görnüşleri",
"link": "/participation-options"
},
{
"text": "Hyzmatdaşlyk mümkinçilikleri",
"link": "/partner-opportunities"
},
{
"text": "Stend bronlamak",
"link": "/stend-form"
},
{
"text": "Näme sebäpli gatnaşanyňa degýär?",
"link": ""
},
{
"text": "Tematiki bölümler",
"link": "/#themes"
}
]
}
]
}

View File

@ -8,7 +8,7 @@ import {
} from "@/components/shared";
import { useScrollTop } from "@/hooks/use-scroll-top";
import { cn } from "@/lib/utils";
import { Language, useLangStore } from "@/store/lang";
import { useLangStore } from "@/store/lang";
export default function About() {
useScrollTop();
@ -17,7 +17,7 @@ export default function About() {
return (
<div className={cn("")}>
<Cover title={lang === Language.RU ? "О выставке" : "About exhibition"} />
<Cover title={{ ru: "О выставке", en: "About exhibition", tm: "Sergi hakynda" }[lang]} />
<AboutInfo />
<AboutThemes />

View File

@ -3,7 +3,7 @@ import { B2bFormProgress } from "@/components/shared";
import { B2bForm } from "@/components/shared/forms/b2b-form";
import { useScrollTop } from "@/hooks/use-scroll-top";
import { Language, useLangStore } from "@/store/lang";
import { useLangStore } from "@/store/lang";
import { useState } from "react";
export default function B2b() {
@ -18,7 +18,7 @@ export default function B2b() {
<div className={"pb-[120px]"}>
<Cover
title={
lang === Language.RU ? "B2B | B2G встречи" : "B2B | B2G meetings"
{ ru: "B2B | B2G встречи", en: "B2B | B2G meetings", tm: "B2B | B2G duşuşyklar" }[lang]
}
/>

View File

@ -12,17 +12,17 @@ import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group";
import { AnimatePresence, motion } from "motion/react";
import {
sponsorDefaultValues,
sponsorFormSchema,
createSponsorFormSchema,
SponsorFormType,
} from "@/lib/get-sponsor-form-details";
import { zodResolver } from "@hookform/resolvers/zod";
import { useState } from "react";
import { useMemo, useState } from "react";
import { useForm } from "react-hook-form";
import { Loader } from "lucide-react";
import { postSponsor } from "@/services/service";
import { Cover } from "@/components/layout";
import { Language, useLangStore } from "@/store/lang";
import { useLangStore } from "@/store/lang";
import { stendData } from "@/data/stend.data";
import { useTranslate } from "@/hooks/use-translate";
import { useScrollTop } from "@/hooks/use-scroll-top";
@ -32,6 +32,7 @@ export default function BecomeSponsor() {
const lang = useLangStore((state) => state.lang);
const [success, setSuccess] = useState(false);
const sponsorFormSchema = useMemo(() => createSponsorFormSchema(lang), [lang]);
const form = useForm<SponsorFormType>({
resolver: zodResolver(sponsorFormSchema),
defaultValues: sponsorDefaultValues,
@ -52,7 +53,7 @@ export default function BecomeSponsor() {
return (
<div>
<Cover
title={lang === Language.RU ? "Стать спонсором" : "Become a sponsor"}
title={{ ru: "Стать спонсором", en: "Become a sponsor", tm: "Hemaýatkär bolmak" }[lang]}
/>
<AnimatePresence>

View File

@ -10,3 +10,5 @@ export { default as Participants } from "./participants";
export { default as StendForm } from "./stend-form";
export { default as Impressions } from "./impressions";
export { default as ImpressionsTm } from "./impressions-tm";
export { default as ParticipationOptions } from "./participation-options";
export { default as PartnerOpportunities } from "./partner-opportunities";

View File

@ -20,11 +20,13 @@ const momentsTabs = [
id: 0,
title: "Фото",
titleEn: "Photo",
titleTm: "Surat",
},
{
id: 1,
title: "Видео",
titleEn: "Video",
titleTm: "Wideo",
},
];
@ -68,7 +70,7 @@ const Media: FC<Props> = ({ className }) => {
</AnimatePresence>
<section className={cn("md:mb-[120px] mb-20", className)}>
<Cover title={lang === "ru" ? "Моменты" : "Moments"} />
<Cover title={{ ru: "Моменты", en: "Moments", tm: "Pursatlar" }[lang]} />
<Container className="page-bottom md:pt-10 pt-6">
<div className="flex justify-center flex-col">

View File

@ -50,7 +50,7 @@ export default function NewsInner() {
<section>
<h2 className="h2 mb-6">
{lang === "ru" ? "Читайте также:" : "Read more:"}
{{ ru: "Читайте также:", en: "Read more:", tm: "Şeýle hem okaň:" }[lang]}
</h2>
<div className="grid md:grid-cols-3 grid-cols-1 gap-6">
{news

View File

@ -18,7 +18,7 @@ export default function News() {
return (
<Container className="page-padding">
<h1 className="text-center md:text-5xl text-3xl mb-10">
{lang === "ru" ? "Новости" : "News"}
{{ ru: "Новости", en: "News", tm: "Täzelikler" }[lang]}
</h1>
<div className="grid md:grid-cols-3 grid-cols-1 gap-6">

View File

@ -17,9 +17,9 @@ const Participants: FC<Props> = ({ className }) => {
const { data, isPending } = useParticipants();
const dataHeader = {
company: lang === "ru" ? "Название компании" : "Company name",
country: lang === "ru" ? "Страна" : "Country",
industry: lang === "ru" ? "Сфера деятельности" : "Industry",
company: { ru: "Название компании", en: "Company name", tm: "Kompaniýanyň ady" }[lang] as string,
country: { ru: "Страна", en: "Country", tm: "Ýurt" }[lang] as string,
industry: { ru: "Сфера деятельности", en: "Industry", tm: "Pudak" }[lang] as string,
};
const [activeTab, setActiveTab] = useState(0);
@ -43,7 +43,7 @@ const Participants: FC<Props> = ({ className }) => {
<Container>
<section className={cn("page-padding overflow-x-hidden", className)}>
<h1 className="text-center md:text-5xl text-3xl mb-4">
{lang === "ru" ? "Список участников" : "List of participants"}
{{ ru: "Список участников", en: "List of participants", tm: "Gatnasyjylaryň sanawy" }[lang]}
</h1>
<Tabs
state={activeTab}

View File

@ -0,0 +1,260 @@
import { Cover, Container } from "@/components/layout";
import { Button } from "@/components/ui/button";
import { useScrollTop } from "@/hooks/use-scroll-top";
import { useLangStore } from "@/store/lang";
const exampleImage = "/about-place.jpg";
const participationOptionsContent = {
title: {
ruText: "Варианты участия",
enText: "Participation Options",
tmText: "Gatnaşmagyň görnüşleri",
},
exhibitionSpace: {
ruText: "Аренда выставочной площади",
enText: "Exhibition Space Rental",
tmText: "Sergi meýdanyny kärendesine almak",
},
spaceOnly: {
ruText: "Необорудованная площадь",
enText: "Space Only",
tmText: "Enjamlaşdyrylmadyk meýdan",
},
example: {
ruText: "Пример",
enText: "Example",
tmText: "Mysal",
},
spaceOnlyDescription: {
ruText:
"Чистая площадь для последующей застройки (стандартная застройка или по индивидуальному дизайну). Включает: общую уборку и охрану павильона. Электричество в стоимость не включено.",
enText:
"Raw exhibition space for subsequent construction (standard booth or customized design). Includes general cleaning and pavilion security. Electricity is not included in the price.",
tmText:
"Soňky gurluşyk üçin arassa meýdan (standart gurluşyk ýa-da indiwidual dizaýn). Öz içine alýar: umumy arassaçylyk we pawilýonyň goragy. Elektrik energiýasy bahasynyň içine girenok.",
},
standardBooth: {
ruText: "Стандартная застройка",
enText: "Standard Booth Construction",
tmText: "Standart gurluşyk",
},
customBooth: {
ruText: "Индивидуальный дизайн",
enText: "Custom Booth Design",
tmText: "Indiwidual dizaýn",
},
boothExampleDescription: {
ruText:
"Включает: базовое электроподключение (220V - 2 кВт), стены (стандартные или индивидуальный дизайн). Общую уборку и охрану павильона.",
enText:
"Includes: basic electrical connection (220V - 2 kW), walls (standard or customized design), general cleaning, and pavilion security.",
tmText:
"Öz içine alýar: esasy elektrik birikdirmesi (220V - 2 kWt), diwarlar (standart ýa-da indiwidual dizaýn). Umumy arassaçylyk we pawilýonyň goragy.",
},
registrationFee: {
ruText: "Участие со стендом включает регистрационную оплату.",
enText: "Participation with a booth includes a registration fee.",
tmText: "Stend bilen gatnaşmak hasaba alyş tölegini öz içine alýar.",
},
pricingNote: {
ruText: "Пожалуйста уточните стоимость у менеджера проекта.",
enText: "Please check the pricing with the project manager.",
tmText: "Bahany taslamanyň menejeri bilen anyklaň.",
},
partnershipTitle: {
ruText: "Партнёрские возможности",
enText: "Partnership Opportunities",
tmText: "Hyzmatdaşlyk mümkinçilikleri",
},
partnershipIntro: {
ruText:
'Если Вы заинтересованы в более активном выходе на рынок или целью Вашей компании является максимальное продвижение на рынок, используйте пакет "Партнерство выставки". Приобретая данную опцию, Вы получаете:',
enText:
'If your company is interested in a more active market presence or aims to maximize market promotion, we recommend the "Exhibition Partnership" package. By choosing this option, you will receive:',
tmText:
'Eger siziň kompaniýaňyz bazara has işjeň çykmaga gyzyklanýan bolsa, "Serginiň hyzmatdaşlygy" paketini ulanyň. Bu opsiýany alyp, siz şulary alarsyňyz:',
},
partnershipItems: [
{
ruText: "Статус Партнера выставки, в зависимости от выбранного пакета",
enText: "Exhibition Partner status, depending on the selected package",
tmText: "Saýlanan pakete baglylykda Serginiň hyzmatdaşy statusy",
},
{
ruText:
"Масштабную рекламную кампанию (размещение логотипа компании на всей рекламной продукции выставки)",
enText:
"A large-scale advertising campaign (placement of your company logo on all exhibition promotional materials)",
tmText:
"Uly gerimli reklama kampaniýasy (kompaniýanyň logotipini serginiň ähli reklama önümlerinde ýerleşdirmek)",
},
{
ruText: "Широкую узнаваемость",
enText: "Wide recognition",
tmText: "Giň tanalmaklyk",
},
{
ruText: "Ассоциирование выставки с именем Вашей компании и др.",
enText:
"Association of the exhibition with your company's name, and more",
tmText: "Serginiň siziň kompaniýaňyzyň ady bilen assosiasiýasy we ş.m.",
},
],
partnershipNote: {
ruText: "Пожалуйста, уточните стоимость у менеджера проекта.",
enText: "Please contact the project manager to clarify the cost.",
tmText: "Bahany taslamanyň menejeri bilen anyklaň.",
},
exampleImageAlt: {
ruText: "Пример площадки",
enText: "Example space",
tmText: "Meýdançanyň mysaly",
},
standardExampleAlt: {
ruText: "Пример стандартной застройки",
enText: "Standard booth example",
tmText: "Standart gurluşygyň mysaly",
},
customExampleAlt: {
ruText: "Пример индивидуального дизайна",
enText: "Custom booth example",
tmText: "Indiwidual dizaýnyň mysaly",
},
};
const ArrowIcon = () => (
<svg
width="14"
height="20"
viewBox="0 0 14 20"
fill="none"
xmlns="http://www.w3.org/2000/svg"
aria-hidden="true"
>
<path
d="M7 1V15M7 15L2 10M7 15L12 10"
stroke="currentColor"
strokeWidth="1.5"
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
);
export default function ParticipationOptions() {
useScrollTop();
const lang = useLangStore((state) => state.lang);
const getText = (item: { ruText: string; enText: string; tmText?: string }) =>
lang === "ru" ? item.ruText : lang === "tm" ? (item.tmText ?? item.enText) : item.enText;
return (
<div>
<Cover title={getText(participationOptionsContent.title)} />
<Container className="page-padding">
<div className="mx-auto max-w-[900px] text-on_surface">
<p className="mb-10 text-3xl font-medium">
{getText(participationOptionsContent.title)}
</p>
<Button className="mb-2 bg-primary md:text-base w-full">
1. {getText(participationOptionsContent.exhibitionSpace)}
</Button>
<Button
variant={"outline"}
className="w-full mb-10 border border-primary py-1 text-center text-base text-primary md:text-base"
>
{getText(participationOptionsContent.spaceOnly)}
</Button>
<p className="mb-5 text-center text-lg">
{getText(participationOptionsContent.example)}
</p>
<div className="mx-auto h-[180px] w-full max-w-[754px] md:h-[377px]">
<img
src={exampleImage}
alt={getText(participationOptionsContent.exampleImageAlt)}
className="size-full rounded-sm object-cover"
/>
</div>
<div className="mt-5 text-center text-base leading-relaxed">
<p>{getText(participationOptionsContent.spaceOnlyDescription)}</p>
</div>
<div className="mt-10 grid grid-cols-1 gap-6 md:grid-cols-2">
<div className="w-full flex flex-col items-center gap-2 text-primary">
<ArrowIcon />
<div className="w-full border border-primary py-1 text-center text-base text-primary md:text-base">
{getText(participationOptionsContent.standardBooth)}
</div>
</div>
<div className="flex flex-col items-center gap-2 text-primary">
<ArrowIcon />
<div className="w-full border border-primary py-1 text-center text-base text-primary md:text-base">
{getText(participationOptionsContent.customBooth)}
</div>
</div>
</div>
<div className="mt-10 grid grid-cols-1 gap-6 md:grid-cols-2">
<div>
<p className="mb-5 text-base">
{getText(participationOptionsContent.example)}:
</p>
<img
src={"/example.jpeg"}
alt={getText(participationOptionsContent.standardExampleAlt)}
className="h-[160px] w-full rounded-sm object-cover md:h-[190px]"
/>
<p className="mt-2 text-base leading-relaxed">
{getText(participationOptionsContent.boothExampleDescription)}
</p>
</div>
<div>
<p className="mb-5 text-base">
{getText(participationOptionsContent.example)}:
</p>
<img
src={"/example-2.jpeg"}
alt={getText(participationOptionsContent.customExampleAlt)}
className="h-[160px] w-full rounded-sm object-cover md:h-[190px]"
/>
<p className="mt-2 text-base leading-relaxed">
{getText(participationOptionsContent.boothExampleDescription)}
</p>
</div>
</div>
<p className="mt-6 text-2xl">
{getText(participationOptionsContent.registrationFee)}
</p>
<p className="text-base mt-3">
{getText(participationOptionsContent.pricingNote)}
</p>
<div className="mt-6 bg-primary py-3 text-center text-xs font-medium text-on_primary md:text-base">
2. {getText(participationOptionsContent.partnershipTitle)}
</div>
<div className="mt-3 text-base leading-relaxed font-normal">
<p className="mb-2">
{getText(participationOptionsContent.partnershipIntro)}
</p>
<ul className="list-disc pl-5">
{participationOptionsContent.partnershipItems.map((item) => (
<li key={item.enText}>{getText(item)}</li>
))}
</ul>
<p className="mt-2">
{getText(participationOptionsContent.partnershipNote)}
</p>
</div>
</div>
</Container>
</div>
);
}

View File

@ -0,0 +1,207 @@
import { Cover, Container } from "@/components/layout";
import { useScrollTop } from "@/hooks/use-scroll-top";
import { useLangStore } from "@/store/lang";
const partnerOpportunitiesContent = {
title: {
ruText: "Партнерские возможности",
enText: "Partner opportunities",
tmText: "Hyzmatdaşlyk mümkinçilikleri",
},
intro: {
ruText:
"Предлагаем Вам воспользоваться комплексными возможностями - партнерскими пакетами, разработанными под различные маркетинговые задачи компании-участника, которые позволят максимально использовать коммерческий потенциал выставки для усиления бренда Вашей компании и бесспорно повысят эффективность продвижения Вашей компании.",
enText:
"We invite you to take advantage of integrated opportunities - partnership packages designed for various marketing objectives of the exhibiting company. They allow you to maximize the exhibition's commercial potential, strengthen your brand, and significantly increase the effectiveness of your promotion.",
tmText:
"Size dürli marketing wezipelerine gönükdirilen hyzmatdaşlyk paketlerinden peýdalanmagy teklip edýäris. Olar serginiň söwda potensialyny iň ýokary derejede ulanmaga, brendiňizi güýçlendirmäge we kompaniýaňyzy öňe sürmegiň netijeliligini ep-esli artdyrmaga mümkinçilik berýär.",
},
partnership: {
ruText:
"Партнерство выставки - это всегда больше, чем просто участие. Это прекрасная возможность выгодно подать Вашу продукцию широкой публике в соответствии с Вашими основными целями и задачами. В каждом партнерском пакете предоставлены уникальные позиции, специально сформированные таким образом, что Вы наиболее точно и эффективно передаете обращение к целевой аудитории.",
enText:
"Exhibition partnership is always more than just participation. It is a great opportunity to present your products to a wide audience in line with your goals and objectives. Each partnership package includes unique placements structured so you can communicate your message to the target audience as precisely and effectively as possible.",
tmText:
"Serginiň hyzmatdaşlygy bu diňe bir gatnaşmakdan has köp zatdyr. Bu öz önümleriňizi giň köpçülige hödürlemek üçin ajaýyp mümkinçilikdir. Her hyzmatdaşlyk paketinde maksatly auditoriýa iň takyk we netijeli ýol bilen ýüzlenmegiňiz üçin ýörite düzülen özboluşly orunlar bar.",
},
benefitsTitle: {
ruText: "Партнерство выставки Turkmen Textile позволит:",
enText: "Partnership with Turkmen Textile will allow you:",
tmText: "Turkmen Textile sergisiniň hyzmatdaşlygy mümkinçilik berer:",
},
benefits: [
{
ruText: "Укрепить позиции Вашей компании на рынке.",
enText: "Strengthen your company's position in the market.",
tmText: "Kompaniýaňyzyň bazardaky pozisiýasyny berkitmek.",
},
{
ruText: "Обеспечить существенное преимущество в конкурентной среде.",
enText: "Gain a significant advantage in the competitive environment.",
tmText: "Bäsdeşlik gurşawynda ep-esli artykmaçlyk gazanmak.",
},
{
ruText: "Закрепить имидж успешного бренда Вашей компании.",
enText: "Reinforce the image of your company as a successful brand.",
tmText: "Kompaniýaňyzyň üstünlikli brend hökmünde abraýyny berkitmek.",
},
{
ruText:
"Сделать Вашу торговую марку узнаваемой для широкого круга участников и посетителей выставки.",
enText:
"Make your trademark recognizable to a wide range of exhibition participants and visitors.",
tmText:
"Söwda belgiňizi serginiň gatnaşyjylarynyň we gelýänleriniň giň topary üçin tanalýan etmek.",
},
{
ruText: "Выделить Вашу компанию среди других участников.",
enText: "Stand out among other exhibitors.",
tmText: "Kompaniýaňyzy beýleki gatnaşyjylaryň arasynda tapawutlandyrmak.",
},
],
highlight: {
ruText:
"Вы хотите, чтобы в профессиональной среде именно Вашу компанию считали ключевым игроком на рынке? Тогда заявите о себе громче всех!",
enText:
"Do you want your company to be seen as a key player in the professional community? Then make yourself heard louder than anyone else!",
tmText:
"Siz professional gurşawda kompaniýaňyzyň bazardaky esasy oýunçy hökmünde tanalmagyny isleýärsiňizmi? Onda hemmelerden has gaty sesleniniň!",
},
packagesTitle: {
ruText: "Варианты партнерских пакетов:",
enText: "Partnership package options:",
tmText: "Hyzmatdaşlyk paketleriniň görnüşleri:",
},
packages: [
{
ruText: "Генеральный партнер выставки",
enText: "General partner of the exhibition.",
tmText: "Serginiň baş hyzmatdaşy",
},
{
ruText: "Партнер Ленты Ведущих Посетителей",
enText: "Lead visitor lanyard partner.",
tmText: "Öňdebaryjy gelýänleriň lentasynyň hyzmatdaşy",
},
{
ruText: "Партнер деловой программы",
enText: "Business program partner.",
tmText: "Işewür programmanyň hyzmatdaşy",
},
{
ruText: "Партнер вечернего приема",
enText: "Evening reception partner.",
tmText: "Agşamky kabul edişligiň hyzmatdaşy",
},
{
ruText: "Партнер пакетов посетителей",
enText: "Visitor package partner.",
tmText: "Gelýänleriň paketiniň hyzmatdaşy",
},
{
ruText: "Партнер каталога выставки",
enText: "Exhibition catalog partner.",
tmText: "Serginiň katalogynyň hyzmatdaşy",
},
{
ruText: "Партнер VIP делегации",
enText: "VIP delegation partner.",
tmText: "VIP delegasiýanyň hyzmatdaşy",
},
{
ruText: "Партнер выставки",
enText: "Exhibition partner.",
tmText: "Serginiň hyzmatdaşy",
},
],
optionsNote: {
ruText:
"Данные опции являются базовыми, но мы всегда готовы обсудить вопрос о специальных проектах в рамках партнерства выставки, которые будут соответствовать Вашему бюджету, потребностям и целям.",
enText:
"These options are basic, but we are always ready to discuss special projects within the exhibition partnership that match your budget, needs, and goals.",
tmText:
"Bu opsiýalar esasy opsiýalardyr, emma biz elmydama siziň býudjetiňize, zerurlyklarňyza we maksatlaryňyza laýyk gelýän ýörite taslamalary ara alyp maslahatlaşmaga taýýardyrys.",
},
contactNote: {
text: {
ruText:
"По вопросам цен и дополнительных опций партнерских пакетов выставки KIFT, пожалуйста, обращайтесь к ",
enText:
"For pricing and additional options of KIFT exhibition partnership packages, please contact the ",
tmText:
"Serginiň hyzmatdaşlyk paketleriniň bahalary we goşmaça opsiýalary boýunça haýyş edýäris, ýüz tutuň ",
},
linkText: {
ruText: "ОРГАНИЗАТОРАМ",
enText: "ORGANIZERS",
tmText: "GURAMAÇYLARA",
},
},
};
export default function PartnerOpportunities() {
useScrollTop();
const lang = useLangStore((state) => state.lang);
const getText = (item: { ruText: string; enText: string; tmText?: string }) =>
lang === "ru" ? item.ruText : lang === "tm" ? (item.tmText ?? item.enText) : item.enText;
return (
<div>
<Cover title={getText(partnerOpportunitiesContent.title)} />
<Container className="page-padding text-sm!">
<div className="mx-auto max-w-[900px]">
<h2 className="mb-3 text-2xl font-medium">
{getText(partnerOpportunitiesContent.title)}
</h2>
<div className="mb-4 rounded-sm bg-surface_container px-4 py-3 text-sm leading-relaxed text-on_surface_v">
{getText(partnerOpportunitiesContent.intro)}
</div>
<p className="mb-4 text-sm leading-relaxed text-on_surface_v">
{getText(partnerOpportunitiesContent.partnership)}
</p>
<h3 className="mb-2 text-base font-medium">
{getText(partnerOpportunitiesContent.benefitsTitle)}
</h3>
<ul className="mb-4 list-disc pl-5 text-sm leading-relaxed text-on_surface_v">
{partnerOpportunitiesContent.benefits.map((item) => (
<li key={item.enText}>{getText(item)}</li>
))}
</ul>
<div className="mb-6 rounded-sm border border-outline px-4 py-3 text-center text-[10px] uppercase text-on_surface_v">
{getText(partnerOpportunitiesContent.highlight)}
</div>
<h3 className="mb-2 text-base font-medium">
{getText(partnerOpportunitiesContent.packagesTitle)}
</h3>
<ul className="mb-4 border-t border-outline_v">
{partnerOpportunitiesContent.packages.map((item) => (
<li
key={item.enText}
className="flex items-center gap-2 border-b border-outline_v py-2 text-sm text-on_surface_v"
>
<span className="text-xs text-primary">&#10003;</span>
<span>{getText(item)}</span>
</li>
))}
</ul>
<p className="text-sm leading-relaxed text-on_surface_v">
{getText(partnerOpportunitiesContent.optionsNote)}
</p>
<p className="text-sm leading-relaxed text-on_surface_v">
{getText(partnerOpportunitiesContent.contactNote.text)}
<span className="text-primary underline">
{getText(partnerOpportunitiesContent.contactNote.linkText)}
</span>
</p>
</div>
</Container>
</div>
);
}

View File

@ -11,11 +11,11 @@ import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group";
import { AnimatePresence, motion } from "motion/react";
import {
standDefaultValues,
standFormSchema,
createStandFormSchema,
StandFormType,
} from "@/lib/get-stend-form-details";
import { zodResolver } from "@hookform/resolvers/zod";
import { useEffect, useState } from "react";
import { useEffect, useMemo, useState } from "react";
import { useForm } from "react-hook-form";
import { Loader } from "lucide-react";
import { Cover } from "@/components/layout";
@ -30,6 +30,7 @@ export default function StendForm() {
const lang = useLangStore((state) => state.lang);
const [success, setSuccess] = useState(false);
const standFormSchema = useMemo(() => createStandFormSchema(lang), [lang]);
const form = useForm<StandFormType>({
resolver: zodResolver(standFormSchema),
defaultValues: standDefaultValues,

View File

@ -12,6 +12,8 @@ import {
News,
NewsInner,
Participants,
ParticipationOptions,
PartnerOpportunities,
StendForm,
} from "./pages";
@ -48,6 +50,16 @@ export const routes = [
path: "impressions-tm",
errorElement: <Error />,
},
{
element: <ParticipationOptions />,
path: "participation-options",
errorElement: <Error />,
},
{
element: <PartnerOpportunities />,
path: "partner-opportunities",
errorElement: <Error />,
},
],
},
];

View File

@ -120,7 +120,7 @@ export const getExhibitionTime = async (lang: LangState["lang"]) => {
return data;
};
export const getNews = async (lang: "ru" | "en") => {
export const getNews = async (lang: "ru" | "en" | "tm") => {
const data = axios_url.get<NewsType>(`news?per_page=100`, {
headers: {
"Accept-Language": lang,

View File

@ -4,10 +4,11 @@ import { persist } from "zustand/middleware";
export enum Language {
EN = "en",
RU = "ru",
TM = "tm",
}
export interface LangState {
lang: "ru" | "en";
lang: "ru" | "en" | "tm";
setLang: (lang: Language) => void;
}