diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6807b830..4b892bd3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,10 +8,10 @@ catalogs: default: '@typescript-eslint/eslint-plugin': specifier: ^8.55.0 - version: 8.55.0 + version: 8.58.1 '@typescript-eslint/parser': specifier: ^8.55.0 - version: 8.55.0 + version: 8.58.1 dayjs: specifier: ^1.11.14 version: 1.11.18 @@ -74,13 +74,13 @@ importers: version: 7.7.1 '@typescript-eslint/eslint-plugin': specifier: 'catalog:' - version: 8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 'catalog:' - version: 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/coverage-v8': specifier: ^3.2.4 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2)) esbuild: specifier: ^0.21.5 version: 0.21.5 @@ -92,7 +92,7 @@ importers: version: 4.4.4(eslint-plugin-import@2.31.0)(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-import: specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.2(jiti@2.6.1)) + version: 2.31.0(@typescript-eslint/parser@8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: specifier: ^7.37.3 version: 7.37.3(eslint@9.39.2(jiti@2.6.1)) @@ -104,7 +104,7 @@ importers: version: 0.4.16(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-unused-imports: specifier: ^4.1.4 - version: 4.1.4(@typescript-eslint/eslint-plugin@8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) + version: 4.1.4(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) globals: specifier: ^15.0.0 version: 15.0.0 @@ -146,7 +146,7 @@ importers: version: 8.46.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2) server: dependencies: @@ -336,7 +336,7 @@ importers: version: 13.10.0 '@rollup/plugin-swc': specifier: ^0.4.0 - version: 0.4.0(@swc/core@1.13.5)(rollup@4.52.5) + version: 0.4.0(@swc/core@1.15.11)(rollup@4.52.5) '@types/archiver': specifier: ^6.0.3 version: 6.0.3 @@ -375,7 +375,7 @@ importers: version: 17.0.33 '@vitest/coverage-v8': specifier: ^3.2.4 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2)) '@yao-pkg/pkg': specifier: ^6.9.0 version: 6.9.0 @@ -456,7 +456,7 @@ importers: version: 8.46.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2) shared: dependencies: @@ -487,7 +487,7 @@ importers: devDependencies: '@rollup/plugin-swc': specifier: ^0.4.0 - version: 0.4.0(@swc/core@1.13.5)(rollup@4.52.5) + version: 0.4.0(@swc/core@1.15.11)(rollup@4.52.5) '@types/lodash-es': specifier: 4.17.9 version: 4.17.9 @@ -496,7 +496,7 @@ importers: version: 22.10.7 '@vitest/coverage-v8': specifier: ^3.2.4 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2)) rimraf: specifier: ^5.0.5 version: 5.0.5 @@ -505,7 +505,7 @@ importers: version: 9.4.2(typescript@5.9.3) tsup: specifier: ^8.0.2 - version: 8.0.2(@microsoft/api-extractor@7.43.0(@types/node@22.10.7))(@swc/core@1.13.5)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.10.7)(typescript@5.9.3))(typescript@5.9.3) + version: 8.0.2(@microsoft/api-extractor@7.43.0(@types/node@22.10.7))(@swc/core@1.15.11)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.15.11)(@types/node@22.10.7)(typescript@5.9.3))(typescript@5.9.3) tsx: specifier: ^4.20.5 version: 4.20.6 @@ -514,7 +514,7 @@ importers: version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2) types: dependencies: @@ -527,10 +527,10 @@ importers: version: 7.43.0(@types/node@22.10.7) '@typescript-eslint/eslint-plugin': specifier: 'catalog:' - version: 8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 'catalog:' - version: 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: specifier: 9.39.2 version: 9.39.2(jiti@2.6.1) @@ -539,7 +539,7 @@ importers: version: 5.0.5 tsup: specifier: ^8.0.2 - version: 8.0.2(@microsoft/api-extractor@7.43.0(@types/node@22.10.7))(@swc/core@1.13.5)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.10.7)(typescript@5.9.3))(typescript@5.9.3) + version: 8.0.2(@microsoft/api-extractor@7.43.0(@types/node@22.10.7))(@swc/core@1.15.11)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.15.11)(@types/node@22.10.7)(typescript@5.9.3))(typescript@5.9.3) typed-openapi: specifier: ^0.10.1 version: 0.10.1(openapi-types@12.1.3)(react@18.2.0) @@ -567,6 +567,12 @@ importers: '@hookform/resolvers': specifier: ^5.2.2 version: 5.2.2(react-hook-form@7.68.0(react@18.2.0)) + '@lingui/core': + specifier: ^5.9.0 + version: 5.9.0(@lingui/babel-plugin-lingui-macro@5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0) + '@lingui/react': + specifier: ^5.9.0 + version: 5.9.0(@lingui/babel-plugin-lingui-macro@5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0)(react@18.2.0) '@mui/icons-material': specifier: ^7.0.2 version: 7.0.2(@mui/material@7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.2.15)(react@18.2.0) @@ -575,10 +581,10 @@ importers: version: 7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@mui/x-date-pickers': specifier: ^8.4.0 - version: 8.4.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@mui/material@7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mui/system@7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(date-fns@2.30.0)(dayjs@1.11.18)(luxon@3.4.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 8.4.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@mui/material@7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mui/system@7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(date-fns@3.6.0)(dayjs@1.11.18)(luxon@3.4.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/react-form': specifier: ^1.28.0 - version: 1.28.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 1.29.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/react-query': specifier: ^5.18.1 version: 5.20.5(react@18.2.0) @@ -626,7 +632,7 @@ importers: version: 4.17.21 material-react-table: specifier: ^3.2.1 - version: 3.2.1(cc24eaa8a22bbc40cbc852c0c273529d) + version: 3.2.1(5dd6dbc4b306e295597a0d42ca4b3ce8) notistack: specifier: ^3.0.1 version: 3.0.1(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -685,15 +691,24 @@ importers: '@hey-api/openapi-ts': specifier: 0.80.16 version: 0.80.16(magicast@0.3.5)(typescript@5.9.3) + '@lingui/cli': + specifier: ^5.9.0 + version: 5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3) + '@lingui/swc-plugin': + specifier: ^5.10.1 + version: 5.10.1(@lingui/core@5.9.0(@lingui/babel-plugin-lingui-macro@5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0)) + '@lingui/vite-plugin': + specifier: ^5.9.0 + version: 5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3)(vite@7.1.10(@types/node@22.10.7)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2)) '@tanstack/react-devtools': specifier: ^0.9.4 - version: 0.9.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(solid-js@1.9.9) + version: 0.9.13(@types/react-dom@18.2.7)(@types/react@18.2.15)(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(solid-js@1.9.9) '@tanstack/react-form-devtools': specifier: ^0.2.13 - version: 0.2.13(@types/react@18.2.15)(csstype@3.1.3)(react@18.2.0)(solid-js@1.9.9) + version: 0.2.21(@types/react@18.2.15)(csstype@3.1.3)(react@18.2.0)(solid-js@1.9.9) '@tanstack/react-router-devtools': specifier: ^1.158.1 - version: 1.158.1(@tanstack/react-router@1.133.13(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@tanstack/router-core@1.133.13)(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 1.166.13(@tanstack/react-router@1.133.13(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@tanstack/router-core@1.133.13)(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/react-table': specifier: 8.19.3 version: 8.19.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -735,13 +750,13 @@ importers: version: 9.0.6 '@typescript-eslint/eslint-plugin': specifier: 'catalog:' - version: 8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 'catalog:' - version: 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitejs/plugin-react-swc': - specifier: ^3.11.0 - version: 3.11.0(vite@7.1.10(@types/node@22.10.7)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2)) + specifier: ^4.2.3 + version: 4.2.3(vite@7.1.10(@types/node@22.10.7)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2)) eslint: specifier: 9.39.2 version: 9.39.2(jiti@2.6.1) @@ -753,7 +768,7 @@ importers: version: 0.4.16(eslint@9.39.2(jiti@2.6.1)) jsdom: specifier: ^28.0.0 - version: 28.0.0(@noble/hashes@1.8.0) + version: 28.1.0(@noble/hashes@1.8.0) make-vfs: specifier: ^1.0.15 version: 1.0.15 @@ -777,7 +792,7 @@ importers: version: 4.5.0(rollup@4.52.5)(typescript@5.9.3)(vite@7.1.10(@types/node@22.10.7)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2)) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2) packages: @@ -822,11 +837,12 @@ packages: peerDependencies: openapi-types: '>=7' - '@asamuzakjp/css-color@4.1.2': - resolution: {integrity: sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==} + '@asamuzakjp/css-color@5.1.10': + resolution: {integrity: sha512-02OhhkKtgNRuicQ/nF3TRnGsxL9wp0r3Y7VlKWyOHHGmGyvXv03y+PnymU8FKFJMTjIr1Bk8U2g1HWSLrpAHww==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - '@asamuzakjp/dom-selector@6.7.8': - resolution: {integrity: sha512-stisC1nULNc9oH5lakAj8MH88ZxeGxzyWNDfbdCxvJSJIvDsHNZqYvscGTgy/ysgXWLJPt6K/4t0/GjvtKcFJQ==} + '@asamuzakjp/dom-selector@6.8.1': + resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} @@ -1070,6 +1086,10 @@ packages: '@borewit/text-codec@0.2.1': resolution: {integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==} + '@bramus/specificity@2.4.2': + resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} + hasBin: true + '@chevrotain/cst-dts-gen@11.0.3': resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==} @@ -1178,19 +1198,19 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@csstools/color-helpers@6.0.1': - resolution: {integrity: sha512-NmXRccUJMk2AWA5A7e5a//3bCIMyOu2hAtdRYrhPPHjDxINuCwX1w6rnIZ4xjLcp0ayv6h8Pc3X0eJUGiAAXHQ==} + '@csstools/color-helpers@6.0.2': + resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} engines: {node: '>=20.19.0'} - '@csstools/css-calc@3.0.0': - resolution: {integrity: sha512-q4d82GTl8BIlh/dTnVsWmxnbWJeb3kiU8eUH71UxlxnS+WIaALmtzTL8gR15PkYOexMQYVk0CO4qIG93C1IvPA==} + '@csstools/css-calc@3.1.1': + resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-color-parser@4.0.1': - resolution: {integrity: sha512-vYwO15eRBEkeF6xjAno/KQ61HacNhfQuuU/eGwH67DplL0zD5ZixUa563phQvUelA07yDczIXdtmYojCphKJcw==} + '@csstools/css-color-parser@4.0.2': + resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 @@ -1202,8 +1222,13 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.26': - resolution: {integrity: sha512-6boXK0KkzT5u5xOgF6TKB+CLq9SOpEGmkZw0g5n9/7yg85wab3UzSxB8TxhLJ31L4SGJ6BCFRw/iftTha1CJXA==} + '@csstools/css-syntax-patches-for-csstree@1.1.2': + resolution: {integrity: sha512-5GkLzz4prTIpoyeUiIu3iV6CSG3Plo7xRVOFPKI7FVEJ3mZ0A8SwK0XU3Gl7xAkiQ+mDyam+NNp875/C5y+jSA==} + peerDependencies: + css-tree: ^3.2.1 + peerDependenciesMeta: + css-tree: + optional: true '@csstools/css-tokenizer@4.0.0': resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} @@ -1917,8 +1942,8 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@exodus/bytes@1.11.0': - resolution: {integrity: sha512-wO3vd8nsEHdumsXrjGO/v4p6irbg7hy9kvIeR6i2AwylZSk4HJdWgL0FNaVquW1+AweJcdvU1IEpuIWk/WaPnA==} + '@exodus/bytes@1.15.0': + resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: '@noble/hashes': ^1.8.0 || ^2.0.0 @@ -2182,6 +2207,14 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -2281,6 +2314,79 @@ packages: peerDependencies: tslib: '2' + '@lingui/babel-plugin-extract-messages@5.9.0': + resolution: {integrity: sha512-1uLhq9u6zUoTMsNzaoHKi+PnySdeLMaxOHC9L5dbXotJim7eiUH5d3OiuXajN4sDW+xKSMg0/KE9Oo8ge6gzpA==} + engines: {node: '>=20.0.0'} + + '@lingui/babel-plugin-lingui-macro@5.9.0': + resolution: {integrity: sha512-TWpxsoG5R4km/5//mjT90a1cGXlljt9hLP6VJGDsO+31uYr8qQ4PN92DvXKrKicBDZTDxtH5K+TkaBTZhPNqzQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + babel-plugin-macros: 2 || 3 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + '@lingui/cli@5.9.0': + resolution: {integrity: sha512-c4fle6xGZAFxEWADE1rN22PbVRbNFiNK0LBtxbtGN4G6ziO/AVhXua+liMy/fFkRCyooSbM3J5hU35xih0jMMg==} + engines: {node: '>=20.0.0'} + hasBin: true + + '@lingui/conf@5.9.0': + resolution: {integrity: sha512-dtRUlz3IyG+XwFRDzA45vllJwiY5zY92Skb3GE1QtZxV28B3oP/8G16Z9vQvDn1WpupQbf8EsqfOvaPAraa2cw==} + engines: {node: '>=20.0.0'} + + '@lingui/core@5.9.0': + resolution: {integrity: sha512-TJFhRttwHdWpcYRT3KVXh4nT+Qc4yxvrpalV5Vrs/sQTyrQWbT1/Lc9qXNYSALb5BAglZq0XU46oRpJdt+PVMQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@lingui/babel-plugin-lingui-macro': 5.9.0 + babel-plugin-macros: 2 || 3 + peerDependenciesMeta: + '@lingui/babel-plugin-lingui-macro': + optional: true + babel-plugin-macros: + optional: true + + '@lingui/format-po@5.9.0': + resolution: {integrity: sha512-Umm2dt2TjiWl2kLSXk7+t5V3V/p9AaUUtRA7Ky3XHMYanKuxp0/Km/MTJfdSdCH6Rftefk/aQ3hJKuQORP8Bsw==} + engines: {node: '>=20.0.0'} + + '@lingui/message-utils@5.9.0': + resolution: {integrity: sha512-BL5MZt7yCLuyEbuIm+w0TZIZ/ctQOX5IO3yVOrWpM8L3rh2uP/MPDUKhGy8e/XPNMgBVFhlpos/tSzvdh03ErQ==} + engines: {node: '>=20.0.0'} + + '@lingui/react@5.9.0': + resolution: {integrity: sha512-3887EeVNwXZXWIMBpdziuNiSWtA1g2Kb8XLWOrIEJorAXOds3Oo+0NrTKWlBmIsUMmgw9SeK1e6RPZxeQk+B+g==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@lingui/babel-plugin-lingui-macro': 5.9.0 + babel-plugin-macros: 2 || 3 + react: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@lingui/babel-plugin-lingui-macro': + optional: true + babel-plugin-macros: + optional: true + + '@lingui/swc-plugin@5.10.1': + resolution: {integrity: sha512-3356mrBKeh+0H1JZzkkA3x0mMUHvkcPZB7QWIKcEZ7zYy+szOhth+4wbcufmOxNxmRdZnlGdVtg7BKZ/sb0ODw==} + peerDependencies: + '@lingui/core': '5' + '@swc/core': '*' + next: '*' + peerDependenciesMeta: + '@swc/core': + optional: true + next: + optional: true + + '@lingui/vite-plugin@5.9.0': + resolution: {integrity: sha512-qNr4UE/QZ36mo5+XVQ0hTWoQSIULoVQ2b1G+aNbGk6Z7olc8yYAtdytJyOCTEk9gCBeyMBTK7zonlxVngNsCfA==} + engines: {node: '>=20.0.0'} + peerDependencies: + vite: ^3 || ^4 || ^5.0.9 || ^6 || ^7 + '@liuli-util/fs-extra@0.1.0': resolution: {integrity: sha512-eaAyDyMGT23QuRGbITVY3SOJff3G9ekAAyGqB9joAnTBmqvFN+9a1FazOdO70G6IUqgpKV451eBHYSRcOJ/FNQ==} @@ -2292,6 +2398,9 @@ packages: resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} engines: {node: '>=8'} + '@messageformat/parser@5.1.1': + resolution: {integrity: sha512-3p0YRGCcTUCYvBKLIxtDDyrJ0YijGIwrTRu1DT8gIviIDZru8H23+FkY6MJBzM1n9n20CiM4VeDYuBsrrwnLjg==} + '@microsoft/api-extractor-model@7.28.13': resolution: {integrity: sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==} @@ -2599,8 +2708,8 @@ packages: peerDependencies: release-it: ^18.0.0 || ^19.0.0 - '@rolldown/pluginutils@1.0.0-beta.27': - resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + '@rolldown/pluginutils@1.0.0-rc.2': + resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} '@rollup/plugin-swc@0.4.0': resolution: {integrity: sha512-oAtqXa8rOl7BOK1Rz3rRxI+LIL53S9SqO2KSq2UUUzWgOgXg6492Jh5mL2mv/f9cpit8zFWdwILuVeozZ0C8mg==} @@ -2994,6 +3103,9 @@ packages: '@sinclair/typebox-codegen@0.10.5': resolution: {integrity: sha512-McGmpMd/UzIes5FElHeZcfir/E+6L6v6hAOtaNX9v6d8lhDfGSMCOqdDTLWJVuo1tladpxCchKTfP+98L0STAQ==} + '@sinclair/typebox@0.27.10': + resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} + '@sinclair/typebox@0.33.22': resolution: {integrity: sha512-auUj4k+f4pyrIVf4GW5UKquSZFHJWri06QgARy9C0t9ZTjJLIuNIrr1yl9bWcJWJ1Gz1vOvYN1D+QPaIlNMVkQ==} @@ -3005,33 +3117,33 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@solid-primitives/event-listener@2.4.3': - resolution: {integrity: sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg==} + '@solid-primitives/event-listener@2.4.5': + resolution: {integrity: sha512-nwRV558mIabl4yVAhZKY8cb6G+O1F0M6Z75ttTu5hk+SxdOnKSGj+eetDIu7Oax1P138ZdUU01qnBPR8rnxaEA==} peerDependencies: solid-js: ^1.6.12 - '@solid-primitives/keyboard@1.3.3': - resolution: {integrity: sha512-9dQHTTgLBqyAI7aavtO+HnpTVJgWQA1ghBSrmLtMu1SMxLPDuLfuNr+Tk5udb4AL4Ojg7h9JrKOGEEDqsJXWJA==} + '@solid-primitives/keyboard@1.3.5': + resolution: {integrity: sha512-sav+l+PL+74z3yaftVs7qd8c2SXkqzuxPOVibUe5wYMt+U5Hxp3V3XCPgBPN2I6cANjvoFtz0NiU8uHVLdi9FQ==} peerDependencies: solid-js: ^1.6.12 - '@solid-primitives/resize-observer@2.1.3': - resolution: {integrity: sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ==} + '@solid-primitives/resize-observer@2.1.5': + resolution: {integrity: sha512-AiyTknKcNBaKHbcSMuxtSNM8FjIuiSuFyFghdD0TcCMU9hKi9EmsC5pjfjDwxE+5EueB1a+T/34PLRI5vbBbKw==} peerDependencies: solid-js: ^1.6.12 - '@solid-primitives/rootless@1.5.2': - resolution: {integrity: sha512-9HULb0QAzL2r47CCad0M+NKFtQ+LrGGNHZfteX/ThdGvKIg2o2GYhBooZubTCd/RTu2l2+Nw4s+dEfiDGvdrrQ==} + '@solid-primitives/rootless@1.5.3': + resolution: {integrity: sha512-N8cIDAHbWcLahNRLr0knAAQvXyEdEMoAZvIMZKmhNb1mlx9e2UOv9BRD5YNwQUJwbNoYVhhLwFOEOcVXFx0HqA==} peerDependencies: solid-js: ^1.6.12 - '@solid-primitives/static-store@0.1.2': - resolution: {integrity: sha512-ReK+5O38lJ7fT+L6mUFvUr6igFwHBESZF+2Ug842s7fvlVeBdIVEdTCErygff6w7uR6+jrr7J8jQo+cYrEq4Iw==} + '@solid-primitives/static-store@0.1.3': + resolution: {integrity: sha512-uxez7SXnr5GiRnzqO2IEDjOJRIXaG+0LZLBizmUA1FwSi+hrpuMzVBwyk70m4prcl8X6FDDXUl9O8hSq8wHbBQ==} peerDependencies: solid-js: ^1.6.12 - '@solid-primitives/utils@6.3.2': - resolution: {integrity: sha512-hZ/M/qr25QOCcwDPOHtGjxTD8w2mNyVAYvcfgwzBHq2RwNqHNdDNsMZYap20+ruRwW4A3Cdkczyoz0TSxLCAPQ==} + '@solid-primitives/utils@6.4.0': + resolution: {integrity: sha512-AeGTBg8Wtkh/0s+evyLtP8piQoS4wyqqQaAFs2HJcFMMjYAtUgo+ZPduRXLjPlqKVc2ejeR544oeqpbn8Egn8A==} peerDependencies: solid-js: ^1.6.12 @@ -3106,68 +3218,68 @@ packages: peerDependencies: '@svgr/core': '*' - '@swc/core-darwin-arm64@1.13.5': - resolution: {integrity: sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==} + '@swc/core-darwin-arm64@1.15.11': + resolution: {integrity: sha512-QoIupRWVH8AF1TgxYyeA5nS18dtqMuxNwchjBIwJo3RdwLEFiJq6onOx9JAxHtuPwUkIVuU2Xbp+jCJ7Vzmgtg==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.13.5': - resolution: {integrity: sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==} + '@swc/core-darwin-x64@1.15.11': + resolution: {integrity: sha512-S52Gu1QtPSfBYDiejlcfp9GlN+NjTZBRRNsz8PNwBgSE626/FUf2PcllVUix7jqkoMC+t0rS8t+2/aSWlMuQtA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.13.5': - resolution: {integrity: sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==} + '@swc/core-linux-arm-gnueabihf@1.15.11': + resolution: {integrity: sha512-lXJs8oXo6Z4yCpimpQ8vPeCjkgoHu5NoMvmJZ8qxDyU99KVdg6KwU9H79vzrmB+HfH+dCZ7JGMqMF//f8Cfvdg==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.13.5': - resolution: {integrity: sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==} + '@swc/core-linux-arm64-gnu@1.15.11': + resolution: {integrity: sha512-chRsz1K52/vj8Mfq/QOugVphlKPWlMh10V99qfH41hbGvwAU6xSPd681upO4bKiOr9+mRIZZW+EfJqY42ZzRyA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.13.5': - resolution: {integrity: sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==} + '@swc/core-linux-arm64-musl@1.15.11': + resolution: {integrity: sha512-PYftgsTaGnfDK4m6/dty9ryK1FbLk+LosDJ/RJR2nkXGc8rd+WenXIlvHjWULiBVnS1RsjHHOXmTS4nDhe0v0w==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.13.5': - resolution: {integrity: sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==} + '@swc/core-linux-x64-gnu@1.15.11': + resolution: {integrity: sha512-DKtnJKIHiZdARyTKiX7zdRjiDS1KihkQWatQiCHMv+zc2sfwb4Glrodx2VLOX4rsa92NLR0Sw8WLcPEMFY1szQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.13.5': - resolution: {integrity: sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==} + '@swc/core-linux-x64-musl@1.15.11': + resolution: {integrity: sha512-mUjjntHj4+8WBaiDe5UwRNHuEzLjIWBTSGTw0JT9+C9/Yyuh4KQqlcEQ3ro6GkHmBGXBFpGIj/o5VMyRWfVfWw==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.13.5': - resolution: {integrity: sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==} + '@swc/core-win32-arm64-msvc@1.15.11': + resolution: {integrity: sha512-ZkNNG5zL49YpaFzfl6fskNOSxtcZ5uOYmWBkY4wVAvgbSAQzLRVBp+xArGWh2oXlY/WgL99zQSGTv7RI5E6nzA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.13.5': - resolution: {integrity: sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==} + '@swc/core-win32-ia32-msvc@1.15.11': + resolution: {integrity: sha512-6XnzORkZCQzvTQ6cPrU7iaT9+i145oLwnin8JrfsLG41wl26+5cNQ2XV3zcbrnFEV6esjOceom9YO1w9mGJByw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.13.5': - resolution: {integrity: sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==} + '@swc/core-win32-x64-msvc@1.15.11': + resolution: {integrity: sha512-IQ2n6af7XKLL6P1gIeZACskSxK8jWtoKpJWLZmdXTDj1MGzktUy4i+FvpdtxFmJWNavRWH1VmTr6kAubRDHeKw==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.13.5': - resolution: {integrity: sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==} + '@swc/core@1.15.11': + resolution: {integrity: sha512-iLmLTodbYxU39HhMPaMUooPwO/zqJWvsqkrXv1ZI38rMb048p6N7qtAtTp37sw9NzSrvH6oli8EdDygo09IZ/w==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -3181,27 +3293,35 @@ packages: '@swc/types@0.1.25': resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} - '@tanstack/devtools-client@0.0.5': - resolution: {integrity: sha512-hsNDE3iu4frt9cC2ppn1mNRnLKo2uc1/1hXAyY9z4UYb+o40M2clFAhiFoo4HngjfGJDV3x18KVVIq7W4Un+zA==} + '@tanstack/devtools-client@0.0.6': + resolution: {integrity: sha512-f85ZJXJnDIFOoykG/BFIixuAevJovCvJF391LPs6YjBAPhGYC50NWlx1y4iF/UmK5/cCMx+/JqI5SBOz7FanQQ==} engines: {node: '>=18'} - '@tanstack/devtools-event-bus@0.4.0': - resolution: {integrity: sha512-1t+/csFuDzi+miDxAOh6Xv7VDE80gJEItkTcAZLjV5MRulbO/W8ocjHLI2Do/p2r2/FBU0eKCRTpdqvXaYoHpQ==} + '@tanstack/devtools-event-bus@0.4.1': + resolution: {integrity: sha512-cNnJ89Q021Zf883rlbBTfsaxTfi2r73/qejGtyTa7ksErF3hyDyAq1aTbo5crK9dAL7zSHh9viKY1BtMls1QOA==} engines: {node: '>=18'} - '@tanstack/devtools-event-client@0.4.0': - resolution: {integrity: sha512-RPfGuk2bDZgcu9bAJodvO2lnZeHuz4/71HjZ0bGb/SPg8+lyTA+RLSKQvo7fSmPSi8/vcH3aKQ8EM9ywf1olaw==} + '@tanstack/devtools-event-client@0.4.3': + resolution: {integrity: sha512-OZI6QyULw0FI0wjgmeYzCIfbgPsOEzwJtCpa69XrfLMtNXLGnz3d/dIabk7frg0TmHo+Ah49w5I4KC7Tufwsvw==} engines: {node: '>=18'} + hasBin: true - '@tanstack/devtools-ui@0.4.4': - resolution: {integrity: sha512-5xHXFyX3nom0UaNfiOM92o6ziaHjGo3mcSGe2HD5Xs8dWRZNpdZ0Smd0B9ddEhy0oB+gXyMzZgUJb9DmrZV0Mg==} + '@tanstack/devtools-ui@0.5.0': + resolution: {integrity: sha512-nNZ14054n31fWB61jtWhZYLRdQ3yceCE3G/RINoINUB0RqIGZAIm9DnEDwOTAOfqt4/a/D8vNk8pJu6RQUp74g==} engines: {node: '>=18'} peerDependencies: solid-js: '>=1.9.7' - '@tanstack/devtools-utils@0.3.0': - resolution: {integrity: sha512-JgApXVrgtgSLIPrm/QWHx0u6c9Ji0MNMDWhwujapj8eMzux5aOfi+2Ycwzj0A0qITXA12SEPYV3HC568mDtYmQ==} + '@tanstack/devtools-ui@0.5.1': + resolution: {integrity: sha512-T9JjAdqMSnxsVO6AQykD5vhxPF4iFLKtbYxee/bU3OLlk446F5C1220GdCmhDSz7y4lx+m8AvIS0bq6zzvdDUA==} engines: {node: '>=18'} + peerDependencies: + solid-js: '>=1.9.7' + + '@tanstack/devtools-utils@0.4.0': + resolution: {integrity: sha512-KsGzYhA8L/fCNgyyMyoUy+TKtx+DjNbzWwqH6wXL48Llzo7kvV9RynYJlaO8Qkzwm+NdHXSgsljQNjQ3CKPpZA==} + engines: {node: '>=18'} + hasBin: true peerDependencies: '@types/react': '>=17.0.0' preact: '>=10.0.0' @@ -3220,17 +3340,18 @@ packages: vue: optional: true - '@tanstack/devtools@0.10.5': - resolution: {integrity: sha512-aptV4sMcdEn/zB8zqNqKSKi8pLzfB7BhdP2MuVmyfWgBDYNchqJjhviaxEXW3tJTolbWwc30o+jszwqxOIcIaA==} + '@tanstack/devtools@0.10.14': + resolution: {integrity: sha512-bg1e0PyjmMMsc9VSOGb9etu15CpFdAwlQ5DD2xS6N93iTPgCPWXiZQFZygrEDoKnnx1x7BM6QTaiukizaejgSA==} engines: {node: '>=18'} + hasBin: true peerDependencies: solid-js: '>=1.9.7' - '@tanstack/form-core@1.28.0': - resolution: {integrity: sha512-MX3YveB6SKHAJ2yUwp+Ca/PCguub8bVEnLcLUbFLwdkSRMkP0lMGdaZl+F0JuEgZw56c6iFoRyfILhS7OQpydA==} + '@tanstack/form-core@1.29.0': + resolution: {integrity: sha512-uyeKEdJBfbj0bkBSwvSYVRtWLOaXvfNX3CeVw1HqGOXVLxpBBGAqWdYLc+UoX/9xcoFwFXrjR9QqMPzvwm2yyQ==} - '@tanstack/form-devtools@0.2.13': - resolution: {integrity: sha512-1ulPyukzs28GFKuY5Qkic3MHCkLm6wG/4ofqgsruHe44VXeCBMqtlwgExaPHrBOdhtfcy26TSJVDvOVJ+igWBA==} + '@tanstack/form-devtools@0.2.21': + resolution: {integrity: sha512-8mxR1/QDw37mNVSFsr4ZN8+bdamH9LU1/iQ3I7/sfTzFmMsNzUOysX3OZf053eaS4Gaw44PT0pH7U0FWD98QKw==} peerDependencies: solid-js: '>=1.9.9' @@ -3252,8 +3373,8 @@ packages: '@tanstack/query-devtools@5.18.1': resolution: {integrity: sha512-U8bDnDGuwdVMT4ndegPTcjOHOmX/UOjjB7o7UalRIq3DMHLRf8Ufh4+xoAvk3LNK5GBmUBfFSw4osYe5l9n7Lw==} - '@tanstack/react-devtools@0.9.4': - resolution: {integrity: sha512-6wQf8gVKDks1VL+LI5SS4XWK8dQLIjcDF3iMZfidyesWJNmodWbWlRkdgCmK5SpDSbcygjbp3p+LG2nE/SZ1bQ==} + '@tanstack/react-devtools@0.9.13': + resolution: {integrity: sha512-O9YXTEe2dlnw2pPNKFZ4Wk7zC4qrDvc0SAALKfMVedeZ2Dyd0LEJUabYS6GPm+DmnrBhc7nJx6Zqc9aDjFrj4g==} engines: {node: '>=18'} peerDependencies: '@types/react': '>=16.8' @@ -3261,13 +3382,13 @@ packages: react: '>=16.8' react-dom: '>=16.8' - '@tanstack/react-form-devtools@0.2.13': - resolution: {integrity: sha512-ggDXw4Pyp5zkbz2j+wJqjTy462PvbHeY97az+cw2GDbtVM5VedpLH86QKAeZofnSgx5ZKPPPn0op4LSAYipDwQ==} + '@tanstack/react-form-devtools@0.2.21': + resolution: {integrity: sha512-WBQ7NOcb3FM9UA4juZVyWUyJkyl62vHFbEBybZuvBFw3wq/v9pDGS01Ye8kepGXDg1+LQsOOxyDR65AKsdqSYQ==} peerDependencies: react: ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/react-form@1.28.0': - resolution: {integrity: sha512-ibLcf5QkTogV0Ly944CuqGxWTpHyreNA4Cy8Wtky7zE9wtE3HVapQt4/hUuXo51zihfTkv5URiXpoTSKF5Xosg==} + '@tanstack/react-form@1.29.0': + resolution: {integrity: sha512-jj425NNX0QKqbUzqSNiYI3HCPHSk2df47acXCJyXczWOTmG81ECZGkgofgqamFsSU9kMiH6Di5RLUnftrlhWSw==} peerDependencies: '@tanstack/react-start': '*' react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -3286,12 +3407,12 @@ packages: peerDependencies: react: ^18.0.0 - '@tanstack/react-router-devtools@1.158.1': - resolution: {integrity: sha512-H0iTfsLNkadF/JhJnu/pUxlxOiLjE0866vFqXK/7EYVcyYwx2uWQuGxEkyF7a04oXXrbEImAOoXDRBQcZ9T5Zw==} - engines: {node: '>=12'} + '@tanstack/react-router-devtools@1.166.13': + resolution: {integrity: sha512-6yKRFFJrEEOiGp5RAAuGCYsl81M4XAhJmLcu9PKj+HZle4A3dsP60lwHoqQYWHMK9nKKFkdXR+D8qxzxqtQbEA==} + engines: {node: '>=20.19'} peerDependencies: - '@tanstack/react-router': ^1.158.1 - '@tanstack/router-core': ^1.158.1 + '@tanstack/react-router': ^1.168.15 + '@tanstack/router-core': ^1.168.11 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' peerDependenciesMeta: @@ -3311,8 +3432,8 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/react-store@0.8.0': - resolution: {integrity: sha512-1vG9beLIuB7q69skxK9r5xiLN3ztzIPfSQSs0GfeqWGO2tGIyInZx0x1COhpx97RKaONSoAb8C3dxacWksm1ow==} + '@tanstack/react-store@0.9.3': + resolution: {integrity: sha512-y2iHd/N9OkoQbFJLUX1T9vbc2O9tjH0pQRgTcx1/Nz4IlwLvkgpuglXUx+mXt0g5ZDFrEeDnONPqkbfxXJKwRg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -3346,11 +3467,11 @@ packages: resolution: {integrity: sha512-zZptdlS/wSkqozb07Y3zX5gas2OapJdjEG6/Id0e/twNefVdR4EY2TK/mgvyhHtKIpCxIcnZz/3opypgeQi9bg==} engines: {node: '>=12'} - '@tanstack/router-devtools-core@1.158.1': - resolution: {integrity: sha512-iGCqmIJ5NXMIuyFwJgfikEmRrceT3tmynMTMSuVxFiv9+Dlk1tsp8bsYS+UGhyY4beoASsRnlikAeNAMsCjhwA==} - engines: {node: '>=12'} + '@tanstack/router-devtools-core@1.167.3': + resolution: {integrity: sha512-fJ1VMhyQgnoashTrP763c2HRc9kofgF61L7Jb3F6eTHAmCKtGVx8BRtiFt37sr3U0P0jmaaiiSPGP6nT5JtVNg==} + engines: {node: '>=20.19'} peerDependencies: - '@tanstack/router-core': ^1.158.1 + '@tanstack/router-core': ^1.168.11 csstype: ^3.0.10 peerDependenciesMeta: csstype: @@ -3396,11 +3517,8 @@ packages: '@tanstack/store@0.7.0': resolution: {integrity: sha512-CNIhdoUsmD2NolYuaIs8VfWM467RK6oIBAW4nPEKZhg1smZ+/CwtCdpURgp7nxSqOaV9oKkzdWD80+bC66F/Jg==} - '@tanstack/store@0.7.7': - resolution: {integrity: sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ==} - - '@tanstack/store@0.8.0': - resolution: {integrity: sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==} + '@tanstack/store@0.9.3': + resolution: {integrity: sha512-8reSzl/qGWGGVKhBoxXPMWzATSbZLZFWhwBAFO9NAyp0TxzfBP0mIrGb8CP8KrQTmvzXlR/vFPPUrHTLBGyFyw==} '@tanstack/table-core@8.19.3': resolution: {integrity: sha512-IqREj9ADoml9zCAouIG/5kCGoyIxPFdqdyoxis9FisXFi5vT+iYfEfLosq4xkU/iDbMcEuAj+X8dWRLvKYDNoQ==} @@ -3523,6 +3641,15 @@ packages: '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -3630,13 +3757,13 @@ packages: eslint: 9.39.2 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/eslint-plugin@8.55.0': - resolution: {integrity: sha512-1y/MVSz0NglV1ijHC8OT49mPJ4qhPYjiK08YUQVbIOyu+5k862LKUHFkpKHWu//zmr7hDR2rhwUm6gnCGNmGBQ==} + '@typescript-eslint/eslint-plugin@8.58.1': + resolution: {integrity: sha512-eSkwoemjo76bdXl2MYqtxg51HNwUSkWfODUOQ3PaTLZGh9uIWWFZIjyjaJnex7wXDu+TRx+ATsnSxdN9YWfRTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.55.0 + '@typescript-eslint/parser': ^8.58.1 eslint: 9.39.2 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/parser@8.46.1': resolution: {integrity: sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==} @@ -3645,12 +3772,12 @@ packages: eslint: 9.39.2 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.55.0': - resolution: {integrity: sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw==} + '@typescript-eslint/parser@8.58.1': + resolution: {integrity: sha512-gGkiNMPqerb2cJSVcruigx9eHBlLG14fSdPdqMoOcBfh+vvn4iCq2C8MzUB89PrxOXk0y3GZ1yIWb9aOzL93bw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: 9.39.2 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/project-service@8.46.1': resolution: {integrity: sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==} @@ -3658,18 +3785,18 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.55.0': - resolution: {integrity: sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==} + '@typescript-eslint/project-service@8.58.1': + resolution: {integrity: sha512-gfQ8fk6cxhtptek+/8ZIqw8YrRW5048Gug8Ts5IYcMLCw18iUgrZAEY/D7s4hkI0FxEfGakKuPK/XUMPzPxi5g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/scope-manager@8.46.1': resolution: {integrity: sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.55.0': - resolution: {integrity: sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==} + '@typescript-eslint/scope-manager@8.58.1': + resolution: {integrity: sha512-TPYUEqJK6avLcEjumWsIuTpuYODTTDAtoMdt8ZZa93uWMTX13Nb8L5leSje1NluammvU+oI3QRr5lLXPgihX3w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/tsconfig-utils@8.46.1': @@ -3678,11 +3805,11 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.55.0': - resolution: {integrity: sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==} + '@typescript-eslint/tsconfig-utils@8.58.1': + resolution: {integrity: sha512-JAr2hOIct2Q+qk3G+8YFfqkqi7sC86uNryT+2i5HzMa2MPjw4qNFvtjnw1IiA1rP7QhNKVe21mSSLaSjwA1Olw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/type-utils@8.46.1': resolution: {integrity: sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw==} @@ -3691,19 +3818,19 @@ packages: eslint: 9.39.2 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.55.0': - resolution: {integrity: sha512-x1iH2unH4qAt6I37I2CGlsNs+B9WGxurP2uyZLRz6UJoZWDBx9cJL1xVN/FiOmHEONEg6RIufdvyT0TEYIgC5g==} + '@typescript-eslint/type-utils@8.58.1': + resolution: {integrity: sha512-HUFxvTJVroT+0rXVJC7eD5zol6ID+Sn5npVPWoFuHGg9Ncq5Q4EYstqR+UOqaNRFXi5TYkpXXkLhoCHe3G0+7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: 9.39.2 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/types@8.46.1': resolution: {integrity: sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.55.0': - resolution: {integrity: sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==} + '@typescript-eslint/types@8.58.1': + resolution: {integrity: sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.46.1': @@ -3712,11 +3839,11 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.55.0': - resolution: {integrity: sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==} + '@typescript-eslint/typescript-estree@8.58.1': + resolution: {integrity: sha512-w4w7WR7GHOjqqPnvAYbazq+Y5oS68b9CzasGtnd6jIeOIeKUzYzupGTB2T4LTPSv4d+WPeccbxuneTFHYgAAWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/utils@8.46.1': resolution: {integrity: sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==} @@ -3725,19 +3852,19 @@ packages: eslint: 9.39.2 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.55.0': - resolution: {integrity: sha512-BqZEsnPGdYpgyEIkDC1BadNY8oMwckftxBT+C8W0g1iKPdeqKZBtTfnvcq0nf60u7MkjFO8RBvpRGZBPw4L2ow==} + '@typescript-eslint/utils@8.58.1': + resolution: {integrity: sha512-Ln8R0tmWC7pTtLOzgJzYTXSCjJ9rDNHAqTaVONF4FEi2qwce8mD9iSOxOpLFFvWp/wBFlew0mjM1L1ihYWfBdQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: 9.39.2 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/visitor-keys@8.46.1': resolution: {integrity: sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.55.0': - resolution: {integrity: sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==} + '@typescript-eslint/visitor-keys@8.58.1': + resolution: {integrity: sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@uidotdev/usehooks@2.4.1': @@ -3842,8 +3969,9 @@ packages: cpu: [x64] os: [win32] - '@vitejs/plugin-react-swc@3.11.0': - resolution: {integrity: sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==} + '@vitejs/plugin-react-swc@4.2.3': + resolution: {integrity: sha512-QIluDil2prhY1gdA3GGwxZzTAmLdi8cQ2CcuMW4PB/Wu4e/1pzqrwhYWVd09LInCRlDUidQjd0B70QWbjWtLxA==} + engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^4 || ^5 || ^6 || ^7 @@ -4179,6 +4307,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + bare-events@2.3.1: resolution: {integrity: sha512-sJnSOTVESURZ61XgEleqmP255T6zTYwHPwE4r6SssIh0U9/uDvfpdoJYpVUerJJZH2fueO+CdT8ZT+OC/7aZDA==} @@ -4276,6 +4408,10 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} + braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -4444,6 +4580,10 @@ packages: chevrotain@11.0.3: resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==} + chokidar@3.5.1: + resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} + engines: {node: '>= 8.10.0'} + chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -4486,6 +4626,10 @@ packages: resolution: {integrity: sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==} engines: {node: '>=14.16'} + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4499,6 +4643,10 @@ packages: engines: {node: '>=8.0.0', npm: '>=5.0.0'} hasBin: true + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + cli-spinners@3.3.0: resolution: {integrity: sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ==} engines: {node: '>=18.20'} @@ -4507,6 +4655,10 @@ packages: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} + cli-table@0.3.11: + resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} + engines: {node: '>= 0.2.0'} + cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} @@ -4526,6 +4678,10 @@ packages: resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} engines: {node: '>=20'} + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + clone@2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} @@ -4577,10 +4733,18 @@ packages: colorjs.io@0.5.2: resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + colors@1.0.3: + resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} + engines: {node: '>=0.1.90'} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + commander@11.1.0: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} @@ -4775,8 +4939,8 @@ packages: css-select@5.2.2: resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - css-tree@3.1.0: - resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} css-what@6.2.2: @@ -4786,8 +4950,8 @@ packages: css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - cssstyle@5.3.7: - resolution: {integrity: sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==} + cssstyle@6.2.0: + resolution: {integrity: sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==} engines: {node: '>=20'} csstype@3.1.3: @@ -4829,9 +4993,8 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} - date-fns@2.30.0: - resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} - engines: {node: '>=0.11'} + date-fns@3.6.0: + resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} @@ -4839,6 +5002,9 @@ packages: dayjs@1.11.18: resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} + dayjs@1.11.20: + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} + debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -4912,6 +5078,9 @@ packages: resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} engines: {node: '>=18'} + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -5410,6 +5579,10 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + eslint@9.39.2: resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5420,6 +5593,10 @@ packages: jiti: optional: true + esm@3.2.25: + resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} + engines: {node: '>=6'} + espree@10.0.1: resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6301,6 +6478,10 @@ packages: engines: {node: '>=14.16'} hasBin: true + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + is-interactive@2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} @@ -6329,6 +6510,10 @@ packages: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} + is-observable@2.1.0: + resolution: {integrity: sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw==} + engines: {node: '>=8'} + is-path-cwd@2.2.0: resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} engines: {node: '>=6'} @@ -6411,6 +6596,10 @@ packages: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + is-unicode-supported@2.1.0: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} @@ -6490,6 +6679,14 @@ packages: resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} engines: {node: '>= 0.6.0'} + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jiti@1.21.6: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true @@ -6509,6 +6706,9 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + js-sha256@0.10.1: + resolution: {integrity: sha512-5obBtsz9301ULlsgggLg542s/jqtddfOpV5KJc4hajc9JV8GeY2gZHSVpYBn4nWqAUTJ9v+xwtbJ1mIBgIH5Vw==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -6527,8 +6727,8 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsdom@28.0.0: - resolution: {integrity: sha512-KDYJgZ6T2TKdU8yBfYueq5EPG/EylMsBvCaenWMJb2OXmjgczzwveRCoJ+Hgj1lXPDyasvrgneSn4GBuR1hYyA==} + jsdom@28.1.0: + resolution: {integrity: sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: canvas: ^3.0.0 @@ -6639,6 +6839,10 @@ packages: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + leven@4.1.0: resolution: {integrity: sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6756,6 +6960,10 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + log-symbols@7.0.1: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} engines: {node: '>=18'} @@ -6800,8 +7008,8 @@ packages: resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==} engines: {node: 20 || >=22} - lru-cache@11.2.5: - resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==} + lru-cache@11.3.3: + resolution: {integrity: sha512-JvNw9Y81y33E+BEYPr0U7omo+U9AySnsMsEiXgwT6yqd31VQWTLNQqmT4ou5eqPFUrTfIDFta2wKhB1hyohtAQ==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -6879,8 +7087,8 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - mdn-data@2.12.2: - resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} media-typer@1.1.0: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} @@ -6972,6 +7180,10 @@ packages: resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} engines: {node: 20 || >=22} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.0.8: resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} @@ -7039,6 +7251,9 @@ packages: mnemonist@0.40.0: resolution: {integrity: sha512-kdd8AFNig2AD5Rkih7EPCXhu/iMvwevQFX/uEiGhZyPZi7fHqOoF4V4kHLpCfysxXMgQ4B52kdPMCwARshKvEg==} + moo@0.5.2: + resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -7332,6 +7547,9 @@ packages: obliterator@2.0.4: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + observable-fns@0.6.1: + resolution: {integrity: sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg==} + ofetch@1.4.1: resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} @@ -7385,6 +7603,10 @@ packages: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + ora@9.0.0: resolution: {integrity: sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==} engines: {node: '>=20'} @@ -7665,6 +7887,9 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} + pofile@1.1.4: + resolution: {integrity: sha512-r6Q21sKsY1AjTVVjOuU02VYKVNQGJNQHjTIvs4dEbeuuYfxgYk/DGD2mqqq4RDaVkwdSq0VEtmQUOPe/wH8X3g==} + possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} @@ -7722,6 +7947,10 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-ms@9.2.0: resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} engines: {node: '>=18'} @@ -7759,6 +7988,11 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + pseudolocale@2.2.0: + resolution: {integrity: sha512-O+D2eU7fO9wVLqrohvt9V/9fwMadnJQ4jxwiK+LeNEqhMx8JYx4xQHkArDCJFAdPPOp/pQq6z5L37eBvAoc8jw==} + engines: {node: '>=16.0.0'} + hasBin: true + pstree.remy@1.1.8: resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} @@ -7839,6 +8073,9 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-is@19.1.0: resolution: {integrity: sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==} @@ -7903,6 +8140,10 @@ packages: readdir-glob@1.1.3: resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + readdirp@3.5.0: + resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} + engines: {node: '>=8.10.0'} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -8000,6 +8241,10 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -8599,6 +8844,9 @@ packages: thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + threads@1.7.0: + resolution: {integrity: sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==} + through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} @@ -8615,6 +8863,9 @@ packages: tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + tiny-worker@2.3.0: + resolution: {integrity: sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -8645,11 +8896,11 @@ packages: resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} - tldts-core@7.0.22: - resolution: {integrity: sha512-KgbTDC5wzlL6j/x6np6wCnDSMUq4kucHNm00KXPbfNzmllCmtmvtykJHfmgdHntwIeupW04y8s1N/43S1PkQDw==} + tldts-core@7.0.28: + resolution: {integrity: sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ==} - tldts@7.0.22: - resolution: {integrity: sha512-nqpKFC53CgopKPjT6Wfb6tpIcZXHcI6G37hesvikhx0EmUGPkZrujRyAjgnmp1SHNgpQfKVanZ+KfpANFt2Hxw==} + tldts@7.0.28: + resolution: {integrity: sha512-+Zg3vWhRUv8B1maGSTFdev9mjoo8Etn2Ayfs4cnjlD3CsGkxXX4QyW3j2WJ0wdjYcYmy7Lx2RDsZMhgCWafKIw==} hasBin: true tmp-promise@3.0.3: @@ -8683,8 +8934,8 @@ packages: resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} hasBin: true - tough-cookie@6.0.0: - resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} + tough-cookie@6.0.1: + resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} engines: {node: '>=16'} tr46@0.0.3: @@ -8721,8 +8972,8 @@ packages: peerDependencies: typescript: '>=4.8.4' - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -8995,8 +9246,8 @@ packages: resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} engines: {node: '>=20.18.1'} - undici@7.21.0: - resolution: {integrity: sha512-Hn2tCQpoDt1wv23a68Ctc8Cr/BHpUSfaPYrkajTXOS9IKpxVRx/X5m1K2YkbK2ipgZgxXSgsUinl3x+2YdSSfg==} + undici@7.24.7: + resolution: {integrity: sha512-H/nlJ/h0ggGC+uRL3ovD+G0i4bqhvsDOpbDv7At5eFLlj2b41L8QliGbnl2H7SnDiYhENphh1tQFJZf+MyfLsQ==} engines: {node: '>=20.18.1'} unicode-emoji-modifier-base@1.0.0: @@ -9210,6 +9461,9 @@ packages: resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} engines: {node: 20 || >=22} + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -9236,8 +9490,8 @@ packages: resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} engines: {node: '>=20'} - whatwg-url@16.0.0: - resolution: {integrity: sha512-9CcxtEKsf53UFwkSUZjG+9vydAsFO4lFHBpJUtjBcoJOCJpKnSJNwCw813zrYJHpCJ7sgfbtOe0V5Ku7Pa1XMQ==} + whatwg-url@16.0.1: + resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} whatwg-url@5.0.0: @@ -9321,8 +9575,8 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -9525,21 +9779,20 @@ snapshots: call-me-maybe: 1.0.2 openapi-types: 12.1.3 - '@asamuzakjp/css-color@4.1.2': + '@asamuzakjp/css-color@5.1.10': dependencies: - '@csstools/css-calc': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-color-parser': 4.0.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - lru-cache: 11.2.5 - '@asamuzakjp/dom-selector@6.7.8': + '@asamuzakjp/dom-selector@6.8.1': dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 - css-tree: 3.1.0 + css-tree: 3.2.1 is-potential-custom-element-name: 1.0.1 - lru-cache: 11.2.5 + lru-cache: 11.3.3 '@asamuzakjp/nwsapi@2.3.9': {} @@ -9879,6 +10132,10 @@ snapshots: '@borewit/text-codec@0.2.1': {} + '@bramus/specificity@2.4.2': + dependencies: + css-tree: 3.2.1 + '@chevrotain/cst-dts-gen@11.0.3': dependencies: '@chevrotain/gast': 11.0.3 @@ -10026,17 +10283,17 @@ snapshots: '@jridgewell/trace-mapping': 0.3.9 optional: true - '@csstools/color-helpers@6.0.1': {} + '@csstools/color-helpers@6.0.2': {} - '@csstools/css-calc@3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-color-parser@4.0.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-color-parser@4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/color-helpers': 6.0.1 - '@csstools/css-calc': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/color-helpers': 6.0.2 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 @@ -10044,7 +10301,9 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.26': {} + '@csstools/css-syntax-patches-for-csstree@1.1.2(css-tree@3.2.1)': + optionalDependencies: + css-tree: 3.2.1 '@csstools/css-tokenizer@4.0.0': {} @@ -10538,7 +10797,7 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@exodus/bytes@1.11.0(@noble/hashes@1.8.0)': + '@exodus/bytes@1.15.0(@noble/hashes@1.8.0)': optionalDependencies: '@noble/hashes': 1.8.0 @@ -10818,6 +11077,19 @@ snapshots: '@istanbuljs/schema@0.1.3': {} + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.10 + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.10.7 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -10916,6 +11188,111 @@ snapshots: '@jsonjoy.com/codegen': 1.0.0(tslib@2.6.2) tslib: 2.6.2 + '@lingui/babel-plugin-extract-messages@5.9.0': {} + + '@lingui/babel-plugin-lingui-macro@5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3)': + dependencies: + '@babel/core': 7.28.4 + '@babel/runtime': 7.28.4 + '@babel/types': 7.28.4 + '@lingui/conf': 5.9.0(typescript@5.9.3) + '@lingui/core': 5.9.0(@lingui/babel-plugin-lingui-macro@5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0) + '@lingui/message-utils': 5.9.0 + optionalDependencies: + babel-plugin-macros: 3.1.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@lingui/cli@5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3)': + dependencies: + '@babel/core': 7.28.4 + '@babel/generator': 7.28.3 + '@babel/parser': 7.28.4 + '@babel/runtime': 7.28.4 + '@babel/types': 7.28.4 + '@lingui/babel-plugin-extract-messages': 5.9.0 + '@lingui/babel-plugin-lingui-macro': 5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3) + '@lingui/conf': 5.9.0(typescript@5.9.3) + '@lingui/core': 5.9.0(@lingui/babel-plugin-lingui-macro@5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0) + '@lingui/format-po': 5.9.0(typescript@5.9.3) + '@lingui/message-utils': 5.9.0 + chokidar: 3.5.1 + cli-table: 0.3.11 + commander: 10.0.1 + convert-source-map: 2.0.0 + date-fns: 3.6.0 + esbuild: 0.25.11 + glob: 11.0.0 + micromatch: 4.0.8 + ms: 2.1.3 + normalize-path: 3.0.0 + ora: 5.4.1 + picocolors: 1.1.1 + pofile: 1.1.4 + pseudolocale: 2.2.0 + source-map: 0.7.6 + threads: 1.7.0 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - typescript + + '@lingui/conf@5.9.0(typescript@5.9.3)': + dependencies: + '@babel/runtime': 7.28.4 + cosmiconfig: 8.3.6(typescript@5.9.3) + jest-validate: 29.7.0 + jiti: 2.6.1 + picocolors: 1.1.1 + transitivePeerDependencies: + - typescript + + '@lingui/core@5.9.0(@lingui/babel-plugin-lingui-macro@5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@lingui/message-utils': 5.9.0 + optionalDependencies: + '@lingui/babel-plugin-lingui-macro': 5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3) + babel-plugin-macros: 3.1.0 + + '@lingui/format-po@5.9.0(typescript@5.9.3)': + dependencies: + '@lingui/conf': 5.9.0(typescript@5.9.3) + '@lingui/message-utils': 5.9.0 + date-fns: 3.6.0 + pofile: 1.1.4 + transitivePeerDependencies: + - typescript + + '@lingui/message-utils@5.9.0': + dependencies: + '@messageformat/parser': 5.1.1 + js-sha256: 0.10.1 + + '@lingui/react@5.9.0(@lingui/babel-plugin-lingui-macro@5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@lingui/core': 5.9.0(@lingui/babel-plugin-lingui-macro@5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0) + react: 18.2.0 + optionalDependencies: + '@lingui/babel-plugin-lingui-macro': 5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3) + babel-plugin-macros: 3.1.0 + + '@lingui/swc-plugin@5.10.1(@lingui/core@5.9.0(@lingui/babel-plugin-lingui-macro@5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0))': + dependencies: + '@lingui/core': 5.9.0(@lingui/babel-plugin-lingui-macro@5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0) + + '@lingui/vite-plugin@5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3)(vite@7.1.10(@types/node@22.10.7)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2))': + dependencies: + '@lingui/cli': 5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3) + '@lingui/conf': 5.9.0(typescript@5.9.3) + vite: 7.1.10(@types/node@22.10.7)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - typescript + '@liuli-util/fs-extra@0.1.0': dependencies: '@types/fs-extra': 9.0.13 @@ -10925,6 +11302,10 @@ snapshots: '@lukeed/ms@2.0.2': {} + '@messageformat/parser@5.1.1': + dependencies: + moo: 0.5.2 + '@microsoft/api-extractor-model@7.28.13(@types/node@22.10.7)': dependencies: '@microsoft/tsdoc': 0.14.2 @@ -11047,7 +11428,7 @@ snapshots: optionalDependencies: '@types/react': 18.2.15 - '@mui/x-date-pickers@8.4.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@mui/material@7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mui/system@7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(date-fns@2.30.0)(dayjs@1.11.18)(luxon@3.4.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@mui/x-date-pickers@8.4.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@mui/material@7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mui/system@7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(date-fns@3.6.0)(dayjs@1.11.18)(luxon@3.4.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.27.1 '@mui/material': 7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -11063,7 +11444,7 @@ snapshots: optionalDependencies: '@emotion/react': 11.14.0(@types/react@18.2.15)(react@18.2.0) '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0) - date-fns: 2.30.0 + date-fns: 3.6.0 dayjs: 1.11.18 luxon: 3.4.3 transitivePeerDependencies: @@ -11252,12 +11633,12 @@ snapshots: - conventional-commits-filter - conventional-commits-parser - '@rolldown/pluginutils@1.0.0-beta.27': {} + '@rolldown/pluginutils@1.0.0-rc.2': {} - '@rollup/plugin-swc@0.4.0(@swc/core@1.13.5)(rollup@4.52.5)': + '@rollup/plugin-swc@0.4.0(@swc/core@1.15.11)(rollup@4.52.5)': dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.52.5) - '@swc/core': 1.13.5 + '@swc/core': 1.15.11 smob: 1.5.0 optionalDependencies: rollup: 4.52.5 @@ -11612,43 +11993,45 @@ snapshots: prettier: 2.8.8 typescript: 5.9.3 + '@sinclair/typebox@0.27.10': {} + '@sinclair/typebox@0.33.22': {} '@sindresorhus/is@4.6.0': {} '@sindresorhus/merge-streams@4.0.0': {} - '@solid-primitives/event-listener@2.4.3(solid-js@1.9.9)': + '@solid-primitives/event-listener@2.4.5(solid-js@1.9.9)': dependencies: - '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) + '@solid-primitives/utils': 6.4.0(solid-js@1.9.9) solid-js: 1.9.9 - '@solid-primitives/keyboard@1.3.3(solid-js@1.9.9)': + '@solid-primitives/keyboard@1.3.5(solid-js@1.9.9)': dependencies: - '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) - '@solid-primitives/rootless': 1.5.2(solid-js@1.9.9) - '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) + '@solid-primitives/event-listener': 2.4.5(solid-js@1.9.9) + '@solid-primitives/rootless': 1.5.3(solid-js@1.9.9) + '@solid-primitives/utils': 6.4.0(solid-js@1.9.9) solid-js: 1.9.9 - '@solid-primitives/resize-observer@2.1.3(solid-js@1.9.9)': + '@solid-primitives/resize-observer@2.1.5(solid-js@1.9.9)': dependencies: - '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) - '@solid-primitives/rootless': 1.5.2(solid-js@1.9.9) - '@solid-primitives/static-store': 0.1.2(solid-js@1.9.9) - '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) + '@solid-primitives/event-listener': 2.4.5(solid-js@1.9.9) + '@solid-primitives/rootless': 1.5.3(solid-js@1.9.9) + '@solid-primitives/static-store': 0.1.3(solid-js@1.9.9) + '@solid-primitives/utils': 6.4.0(solid-js@1.9.9) solid-js: 1.9.9 - '@solid-primitives/rootless@1.5.2(solid-js@1.9.9)': + '@solid-primitives/rootless@1.5.3(solid-js@1.9.9)': dependencies: - '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) + '@solid-primitives/utils': 6.4.0(solid-js@1.9.9) solid-js: 1.9.9 - '@solid-primitives/static-store@0.1.2(solid-js@1.9.9)': + '@solid-primitives/static-store@0.1.3(solid-js@1.9.9)': dependencies: - '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) + '@solid-primitives/utils': 6.4.0(solid-js@1.9.9) solid-js: 1.9.9 - '@solid-primitives/utils@6.3.2(solid-js@1.9.9)': + '@solid-primitives/utils@6.4.0(solid-js@1.9.9)': dependencies: solid-js: 1.9.9 @@ -11724,51 +12107,51 @@ snapshots: transitivePeerDependencies: - supports-color - '@swc/core-darwin-arm64@1.13.5': + '@swc/core-darwin-arm64@1.15.11': optional: true - '@swc/core-darwin-x64@1.13.5': + '@swc/core-darwin-x64@1.15.11': optional: true - '@swc/core-linux-arm-gnueabihf@1.13.5': + '@swc/core-linux-arm-gnueabihf@1.15.11': optional: true - '@swc/core-linux-arm64-gnu@1.13.5': + '@swc/core-linux-arm64-gnu@1.15.11': optional: true - '@swc/core-linux-arm64-musl@1.13.5': + '@swc/core-linux-arm64-musl@1.15.11': optional: true - '@swc/core-linux-x64-gnu@1.13.5': + '@swc/core-linux-x64-gnu@1.15.11': optional: true - '@swc/core-linux-x64-musl@1.13.5': + '@swc/core-linux-x64-musl@1.15.11': optional: true - '@swc/core-win32-arm64-msvc@1.13.5': + '@swc/core-win32-arm64-msvc@1.15.11': optional: true - '@swc/core-win32-ia32-msvc@1.13.5': + '@swc/core-win32-ia32-msvc@1.15.11': optional: true - '@swc/core-win32-x64-msvc@1.13.5': + '@swc/core-win32-x64-msvc@1.15.11': optional: true - '@swc/core@1.13.5': + '@swc/core@1.15.11': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.25 optionalDependencies: - '@swc/core-darwin-arm64': 1.13.5 - '@swc/core-darwin-x64': 1.13.5 - '@swc/core-linux-arm-gnueabihf': 1.13.5 - '@swc/core-linux-arm64-gnu': 1.13.5 - '@swc/core-linux-arm64-musl': 1.13.5 - '@swc/core-linux-x64-gnu': 1.13.5 - '@swc/core-linux-x64-musl': 1.13.5 - '@swc/core-win32-arm64-msvc': 1.13.5 - '@swc/core-win32-ia32-msvc': 1.13.5 - '@swc/core-win32-x64-msvc': 1.13.5 + '@swc/core-darwin-arm64': 1.15.11 + '@swc/core-darwin-x64': 1.15.11 + '@swc/core-linux-arm-gnueabihf': 1.15.11 + '@swc/core-linux-arm64-gnu': 1.15.11 + '@swc/core-linux-arm64-musl': 1.15.11 + '@swc/core-linux-x64-gnu': 1.15.11 + '@swc/core-linux-x64-musl': 1.15.11 + '@swc/core-win32-arm64-msvc': 1.15.11 + '@swc/core-win32-ia32-msvc': 1.15.11 + '@swc/core-win32-x64-msvc': 1.15.11 '@swc/counter@0.1.3': {} @@ -11776,45 +12159,51 @@ snapshots: dependencies: '@swc/counter': 0.1.3 - '@tanstack/devtools-client@0.0.5': + '@tanstack/devtools-client@0.0.6': dependencies: - '@tanstack/devtools-event-client': 0.4.0 + '@tanstack/devtools-event-client': 0.4.3 - '@tanstack/devtools-event-bus@0.4.0': + '@tanstack/devtools-event-bus@0.4.1': dependencies: - ws: 8.19.0 + ws: 8.20.0 transitivePeerDependencies: - bufferutil - utf-8-validate - '@tanstack/devtools-event-client@0.4.0': {} + '@tanstack/devtools-event-client@0.4.3': {} - '@tanstack/devtools-ui@0.4.4(csstype@3.1.3)(solid-js@1.9.9)': + '@tanstack/devtools-ui@0.5.0(csstype@3.1.3)(solid-js@1.9.9)': dependencies: clsx: 2.1.1 + dayjs: 1.11.20 goober: 2.1.18(csstype@3.1.3) solid-js: 1.9.9 transitivePeerDependencies: - csstype - '@tanstack/devtools-utils@0.3.0(@types/react@18.2.15)(csstype@3.1.3)(react@18.2.0)(solid-js@1.9.9)': + '@tanstack/devtools-ui@0.5.1(csstype@3.1.3)(solid-js@1.9.9)': dependencies: - '@tanstack/devtools-ui': 0.4.4(csstype@3.1.3)(solid-js@1.9.9) + clsx: 2.1.1 + dayjs: 1.11.20 + goober: 2.1.18(csstype@3.1.3) + solid-js: 1.9.9 + transitivePeerDependencies: + - csstype + + '@tanstack/devtools-utils@0.4.0(@types/react@18.2.15)(react@18.2.0)(solid-js@1.9.9)': optionalDependencies: '@types/react': 18.2.15 react: 18.2.0 solid-js: 1.9.9 - transitivePeerDependencies: - - csstype - '@tanstack/devtools@0.10.5(csstype@3.1.3)(solid-js@1.9.9)': + '@tanstack/devtools@0.10.14(csstype@3.1.3)(solid-js@1.9.9)': dependencies: - '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) - '@solid-primitives/keyboard': 1.3.3(solid-js@1.9.9) - '@solid-primitives/resize-observer': 2.1.3(solid-js@1.9.9) - '@tanstack/devtools-client': 0.0.5 - '@tanstack/devtools-event-bus': 0.4.0 - '@tanstack/devtools-ui': 0.4.4(csstype@3.1.3)(solid-js@1.9.9) + '@solid-primitives/event-listener': 2.4.5(solid-js@1.9.9) + '@solid-primitives/keyboard': 1.3.5(solid-js@1.9.9) + '@solid-primitives/resize-observer': 2.1.5(solid-js@1.9.9) + '@tanstack/devtools-client': 0.0.6 + '@tanstack/devtools-event-bus': 0.4.1 + '@tanstack/devtools-ui': 0.5.0(csstype@3.1.3)(solid-js@1.9.9) clsx: 2.1.1 goober: 2.1.18(csstype@3.1.3) solid-js: 1.9.9 @@ -11823,17 +12212,17 @@ snapshots: - csstype - utf-8-validate - '@tanstack/form-core@1.28.0': + '@tanstack/form-core@1.29.0': dependencies: - '@tanstack/devtools-event-client': 0.4.0 + '@tanstack/devtools-event-client': 0.4.3 '@tanstack/pacer-lite': 0.1.1 - '@tanstack/store': 0.7.7 + '@tanstack/store': 0.9.3 - '@tanstack/form-devtools@0.2.13(@types/react@18.2.15)(csstype@3.1.3)(react@18.2.0)(solid-js@1.9.9)': + '@tanstack/form-devtools@0.2.21(@types/react@18.2.15)(csstype@3.1.3)(react@18.2.0)(solid-js@1.9.9)': dependencies: - '@tanstack/devtools-ui': 0.4.4(csstype@3.1.3)(solid-js@1.9.9) - '@tanstack/devtools-utils': 0.3.0(@types/react@18.2.15)(csstype@3.1.3)(react@18.2.0)(solid-js@1.9.9) - '@tanstack/form-core': 1.28.0 + '@tanstack/devtools-ui': 0.5.1(csstype@3.1.3)(solid-js@1.9.9) + '@tanstack/devtools-utils': 0.4.0(@types/react@18.2.15)(react@18.2.0)(solid-js@1.9.9) + '@tanstack/form-core': 1.29.0 clsx: 2.1.1 dayjs: 1.11.18 goober: 2.1.18(csstype@3.1.3) @@ -11857,9 +12246,9 @@ snapshots: '@tanstack/query-devtools@5.18.1': {} - '@tanstack/react-devtools@0.9.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(solid-js@1.9.9)': + '@tanstack/react-devtools@0.9.13(@types/react-dom@18.2.7)(@types/react@18.2.15)(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(solid-js@1.9.9)': dependencies: - '@tanstack/devtools': 0.10.5(csstype@3.1.3)(solid-js@1.9.9) + '@tanstack/devtools': 0.10.14(csstype@3.1.3)(solid-js@1.9.9) '@types/react': 18.2.15 '@types/react-dom': 18.2.7 react: 18.2.0 @@ -11870,10 +12259,10 @@ snapshots: - solid-js - utf-8-validate - '@tanstack/react-form-devtools@0.2.13(@types/react@18.2.15)(csstype@3.1.3)(react@18.2.0)(solid-js@1.9.9)': + '@tanstack/react-form-devtools@0.2.21(@types/react@18.2.15)(csstype@3.1.3)(react@18.2.0)(solid-js@1.9.9)': dependencies: - '@tanstack/devtools-utils': 0.3.0(@types/react@18.2.15)(csstype@3.1.3)(react@18.2.0)(solid-js@1.9.9) - '@tanstack/form-devtools': 0.2.13(@types/react@18.2.15)(csstype@3.1.3)(react@18.2.0)(solid-js@1.9.9) + '@tanstack/devtools-utils': 0.4.0(@types/react@18.2.15)(react@18.2.0)(solid-js@1.9.9) + '@tanstack/form-devtools': 0.2.21(@types/react@18.2.15)(csstype@3.1.3)(react@18.2.0)(solid-js@1.9.9) react: 18.2.0 transitivePeerDependencies: - '@types/react' @@ -11882,10 +12271,10 @@ snapshots: - solid-js - vue - '@tanstack/react-form@1.28.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@tanstack/react-form@1.29.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@tanstack/form-core': 1.28.0 - '@tanstack/react-store': 0.8.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tanstack/form-core': 1.29.0 + '@tanstack/react-store': 0.9.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 transitivePeerDependencies: - react-dom @@ -11901,10 +12290,10 @@ snapshots: '@tanstack/query-core': 5.20.5 react: 18.2.0 - '@tanstack/react-router-devtools@1.158.1(@tanstack/react-router@1.133.13(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@tanstack/router-core@1.133.13)(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@tanstack/react-router-devtools@1.166.13(@tanstack/react-router@1.133.13(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@tanstack/router-core@1.133.13)(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@tanstack/react-router': 1.133.13(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tanstack/router-devtools-core': 1.158.1(@tanstack/router-core@1.133.13)(csstype@3.1.3) + '@tanstack/router-devtools-core': 1.167.3(@tanstack/router-core@1.133.13)(csstype@3.1.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) optionalDependencies: @@ -11930,9 +12319,9 @@ snapshots: react-dom: 18.2.0(react@18.2.0) use-sync-external-store: 1.4.0(react@18.2.0) - '@tanstack/react-store@0.8.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@tanstack/react-store@0.9.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@tanstack/store': 0.8.0 + '@tanstack/store': 0.9.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) use-sync-external-store: 1.6.0(react@18.2.0) @@ -11971,12 +12360,11 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.158.1(@tanstack/router-core@1.133.13)(csstype@3.1.3)': + '@tanstack/router-devtools-core@1.167.3(@tanstack/router-core@1.133.13)(csstype@3.1.3)': dependencies: '@tanstack/router-core': 1.133.13 clsx: 2.1.1 goober: 2.1.18(csstype@3.1.3) - tiny-invariant: 1.3.3 optionalDependencies: csstype: 3.1.3 @@ -12046,9 +12434,7 @@ snapshots: '@tanstack/store@0.7.0': {} - '@tanstack/store@0.7.7': {} - - '@tanstack/store@0.8.0': {} + '@tanstack/store@0.9.3': {} '@tanstack/table-core@8.19.3': {} @@ -12173,6 +12559,16 @@ snapshots: '@types/minimatch': 5.1.2 '@types/node': 22.10.7 + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} @@ -12284,18 +12680,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.55.0 - '@typescript-eslint/type-utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.55.0 + '@typescript-eslint/parser': 8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.58.1 + '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.58.1 eslint: 9.39.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -12312,12 +12708,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.55.0 - '@typescript-eslint/types': 8.55.0 - '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.55.0 + '@typescript-eslint/scope-manager': 8.58.1 + '@typescript-eslint/types': 8.58.1 + '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.58.1 debug: 4.4.3 eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 @@ -12333,10 +12729,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.55.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.58.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.9.3) - '@typescript-eslint/types': 8.55.0 + '@typescript-eslint/tsconfig-utils': 8.58.1(typescript@5.9.3) + '@typescript-eslint/types': 8.58.1 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: @@ -12347,16 +12743,16 @@ snapshots: '@typescript-eslint/types': 8.46.1 '@typescript-eslint/visitor-keys': 8.46.1 - '@typescript-eslint/scope-manager@8.55.0': + '@typescript-eslint/scope-manager@8.58.1': dependencies: - '@typescript-eslint/types': 8.55.0 - '@typescript-eslint/visitor-keys': 8.55.0 + '@typescript-eslint/types': 8.58.1 + '@typescript-eslint/visitor-keys': 8.58.1 '@typescript-eslint/tsconfig-utils@8.46.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/tsconfig-utils@8.55.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.58.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 @@ -12372,21 +12768,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.55.0 - '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.58.1 + '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.2(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.46.1': {} - '@typescript-eslint/types@8.55.0': {} + '@typescript-eslint/types@8.58.1': {} '@typescript-eslint/typescript-estree@8.46.1(typescript@5.9.3)': dependencies: @@ -12404,17 +12800,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.55.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.58.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.55.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.9.3) - '@typescript-eslint/types': 8.55.0 - '@typescript-eslint/visitor-keys': 8.55.0 + '@typescript-eslint/project-service': 8.58.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.58.1(typescript@5.9.3) + '@typescript-eslint/types': 8.58.1 + '@typescript-eslint/visitor-keys': 8.58.1 debug: 4.4.3 - minimatch: 9.0.5 + minimatch: 10.2.5 semver: 7.7.3 tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -12430,12 +12826,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.55.0 - '@typescript-eslint/types': 8.55.0 - '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.58.1 + '@typescript-eslint/types': 8.58.1 + '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -12446,10 +12842,10 @@ snapshots: '@typescript-eslint/types': 8.46.1 eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.55.0': + '@typescript-eslint/visitor-keys@8.58.1': dependencies: - '@typescript-eslint/types': 8.55.0 - eslint-visitor-keys: 4.2.1 + '@typescript-eslint/types': 8.58.1 + eslint-visitor-keys: 5.0.1 '@uidotdev/usehooks@2.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -12515,15 +12911,15 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitejs/plugin-react-swc@3.11.0(vite@7.1.10(@types/node@22.10.7)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2))': + '@vitejs/plugin-react-swc@4.2.3(vite@7.1.10(@types/node@22.10.7)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2))': dependencies: - '@rolldown/pluginutils': 1.0.0-beta.27 - '@swc/core': 1.13.5 + '@rolldown/pluginutils': 1.0.0-rc.2 + '@swc/core': 1.15.11 vite: 7.1.10(@types/node@22.10.7)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2) transitivePeerDependencies: - '@swc/helpers' - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -12538,7 +12934,7 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -12950,6 +13346,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + bare-events@2.3.1: optional: true @@ -13041,6 +13439,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.5: + dependencies: + balanced-match: 4.0.4 + braces@3.0.2: dependencies: fill-range: 7.0.1 @@ -13299,6 +13701,18 @@ snapshots: '@chevrotain/utils': 11.0.3 lodash-es: 4.17.21 + chokidar@3.5.1: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.5.0 + optionalDependencies: + fsevents: 2.3.3 + chokidar@3.5.3: dependencies: anymatch: 3.1.3 @@ -13349,6 +13763,10 @@ snapshots: dependencies: escape-string-regexp: 5.0.0 + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + cli-cursor@4.0.0: dependencies: restore-cursor: 4.0.0 @@ -13366,6 +13784,8 @@ snapshots: parse5-htmlparser2-tree-adapter: 6.0.1 yargs: 16.2.0 + cli-spinners@2.9.2: {} + cli-spinners@3.3.0: {} cli-table3@0.6.5: @@ -13374,6 +13794,10 @@ snapshots: optionalDependencies: '@colors/colors': 1.5.0 + cli-table@0.3.11: + dependencies: + colors: 1.0.3 + cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 @@ -13399,6 +13823,8 @@ snapshots: strip-ansi: 7.1.2 wrap-ansi: 9.0.0 + clone@1.0.4: {} + clone@2.1.2: {} clsx@1.2.1: {} @@ -13438,10 +13864,14 @@ snapshots: colorjs.io@0.5.2: {} + colors@1.0.3: {} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 + commander@10.0.1: {} + commander@11.1.0: {} commander@12.1.0: {} @@ -13636,21 +14066,21 @@ snapshots: domutils: 3.2.2 nth-check: 2.1.1 - css-tree@3.1.0: + css-tree@3.2.1: dependencies: - mdn-data: 2.12.2 + mdn-data: 2.27.1 source-map-js: 1.2.1 css-what@6.2.2: {} css.escape@1.5.1: {} - cssstyle@5.3.7: + cssstyle@6.2.0: dependencies: - '@asamuzakjp/css-color': 4.1.2 - '@csstools/css-syntax-patches-for-csstree': 1.0.26 - css-tree: 3.1.0 - lru-cache: 11.2.4 + '@asamuzakjp/css-color': 5.1.10 + '@csstools/css-syntax-patches-for-csstree': 1.1.2(css-tree@3.2.1) + css-tree: 3.2.1 + lru-cache: 11.3.3 csstype@3.1.3: {} @@ -13661,7 +14091,7 @@ snapshots: data-urls@7.0.0(@noble/hashes@1.8.0): dependencies: whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.0(@noble/hashes@1.8.0) + whatwg-url: 16.0.1(@noble/hashes@1.8.0) transitivePeerDependencies: - '@noble/hashes' @@ -13701,15 +14131,14 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 - date-fns@2.30.0: - dependencies: - '@babel/runtime': 7.28.4 - optional: true + date-fns@3.6.0: {} dateformat@4.6.3: {} dayjs@1.11.18: {} + dayjs@1.11.20: {} + debug@3.2.7: dependencies: ms: 2.1.3 @@ -13756,6 +14185,10 @@ snapshots: bundle-name: 4.1.0 default-browser-id: 5.0.0 + defaults@1.0.4: + dependencies: + clone: 1.0.4 + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -14290,22 +14723,22 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import@2.31.0)(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -14316,7 +14749,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -14328,7 +14761,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -14375,11 +14808,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)): dependencies: eslint: 9.39.2(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint-scope@8.4.0: dependencies: @@ -14392,6 +14825,8 @@ snapshots: eslint-visitor-keys@4.2.1: {} + eslint-visitor-keys@5.0.1: {} + eslint@9.39.2(jiti@2.6.1): dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) @@ -14433,6 +14868,9 @@ snapshots: transitivePeerDependencies: - supports-color + esm@3.2.25: + optional: true + espree@10.0.1: dependencies: acorn: 8.11.3 @@ -15125,7 +15563,7 @@ snapshots: html-encoding-sniffer@6.0.0(@noble/hashes@1.8.0): dependencies: - '@exodus/bytes': 1.11.0(@noble/hashes@1.8.0) + '@exodus/bytes': 1.15.0(@noble/hashes@1.8.0) transitivePeerDependencies: - '@noble/hashes' @@ -15382,6 +15820,8 @@ snapshots: dependencies: is-docker: 3.0.0 + is-interactive@1.0.0: {} + is-interactive@2.0.0: {} is-map@2.0.3: {} @@ -15401,6 +15841,8 @@ snapshots: is-obj@2.0.0: {} + is-observable@2.1.0: {} + is-path-cwd@2.2.0: {} is-path-inside@3.0.3: {} @@ -15474,6 +15916,8 @@ snapshots: dependencies: which-typed-array: 1.1.18 + is-unicode-supported@0.1.0: {} + is-unicode-supported@2.1.0: {} is-weakmap@2.0.2: {} @@ -15561,6 +16005,17 @@ snapshots: java-properties@1.0.2: {} + jest-get-type@29.6.3: {} + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + jiti@1.21.6: {} jiti@2.4.1: {} @@ -15571,6 +16026,8 @@ snapshots: joycon@3.1.1: {} + js-sha256@0.10.1: {} + js-tokens@4.0.0: {} js-tokens@9.0.1: {} @@ -15588,12 +16045,13 @@ snapshots: dependencies: argparse: 2.0.1 - jsdom@28.0.0(@noble/hashes@1.8.0): + jsdom@28.1.0(@noble/hashes@1.8.0): dependencies: '@acemir/cssom': 0.9.31 - '@asamuzakjp/dom-selector': 6.7.8 - '@exodus/bytes': 1.11.0(@noble/hashes@1.8.0) - cssstyle: 5.3.7 + '@asamuzakjp/dom-selector': 6.8.1 + '@bramus/specificity': 2.4.2 + '@exodus/bytes': 1.15.0(@noble/hashes@1.8.0) + cssstyle: 6.2.0 data-urls: 7.0.0(@noble/hashes@1.8.0) decimal.js: 10.6.0 html-encoding-sniffer: 6.0.0(@noble/hashes@1.8.0) @@ -15603,12 +16061,12 @@ snapshots: parse5: 8.0.0 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 6.0.0 - undici: 7.21.0 + tough-cookie: 6.0.1 + undici: 7.24.7 w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.0(@noble/hashes@1.8.0) + whatwg-url: 16.0.1(@noble/hashes@1.8.0) xml-name-validator: 5.0.0 transitivePeerDependencies: - '@noble/hashes' @@ -15708,6 +16166,8 @@ snapshots: dependencies: readable-stream: 2.3.8 + leven@3.1.0: {} + leven@4.1.0: {} levn@0.4.1: @@ -15817,6 +16277,11 @@ snapshots: lodash@4.17.21: {} + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + log-symbols@7.0.1: dependencies: is-unicode-supported: 2.1.0 @@ -15856,7 +16321,7 @@ snapshots: lru-cache@11.2.4: {} - lru-cache@11.2.5: {} + lru-cache@11.3.3: {} lru-cache@5.1.1: dependencies: @@ -15880,8 +16345,8 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 source-map-js: 1.2.1 make-dir@4.0.0: @@ -15910,13 +16375,13 @@ snapshots: marked@15.0.12: {} - material-react-table@3.2.1(cc24eaa8a22bbc40cbc852c0c273529d): + material-react-table@3.2.1(5dd6dbc4b306e295597a0d42ca4b3ce8): dependencies: '@emotion/react': 11.14.0(@types/react@18.2.15)(react@18.2.0) '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0) '@mui/icons-material': 7.0.2(@mui/material@7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.2.15)(react@18.2.0) '@mui/material': 7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@mui/x-date-pickers': 8.4.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@mui/material@7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mui/system@7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(date-fns@2.30.0)(dayjs@1.11.18)(luxon@3.4.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@mui/x-date-pickers': 8.4.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@mui/material@7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mui/system@7.0.2(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(react@18.2.0))(@types/react@18.2.15)(date-fns@3.6.0)(dayjs@1.11.18)(luxon@3.4.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/match-sorter-utils': 8.19.4 '@tanstack/react-table': 8.20.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/react-virtual': 3.11.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -15926,7 +16391,7 @@ snapshots: math-intrinsics@1.1.0: {} - mdn-data@2.12.2: {} + mdn-data@2.27.1: {} media-typer@1.1.0: {} @@ -16005,6 +16470,10 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.5 + minimatch@3.0.8: dependencies: brace-expansion: 1.1.11 @@ -16070,6 +16539,8 @@ snapshots: dependencies: obliterator: 2.0.4 + moo@0.5.2: {} + mri@1.2.0: {} ms@2.1.2: {} @@ -16320,6 +16791,8 @@ snapshots: obliterator@2.0.4: {} + observable-fns@0.6.1: {} + ofetch@1.4.1: dependencies: destr: 2.0.3 @@ -16403,6 +16876,18 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + ora@9.0.0: dependencies: chalk: 5.6.2 @@ -16692,15 +17177,17 @@ snapshots: pluralize@8.0.0: {} + pofile@1.1.4: {} + possible-typed-array-names@1.0.0: {} - postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.10.7)(typescript@5.9.3)): + postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.15.11)(@types/node@22.10.7)(typescript@5.9.3)): dependencies: lilconfig: 3.1.1 yaml: 2.3.4 optionalDependencies: postcss: 8.5.6 - ts-node: 10.9.2(@swc/core@1.13.5)(@types/node@22.10.7)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.11)(@types/node@22.10.7)(typescript@5.9.3) postcss@8.4.41: dependencies: @@ -16745,6 +17232,12 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + pretty-ms@9.2.0: dependencies: parse-ms: 4.0.0 @@ -16784,6 +17277,10 @@ snapshots: proxy-from-env@1.1.0: {} + pseudolocale@2.2.0: + dependencies: + commander: 10.0.1 + pstree.remy@1.1.8: {} pump@3.0.0: @@ -16858,6 +17355,8 @@ snapshots: react-is@17.0.2: {} + react-is@18.3.1: {} + react-is@19.1.0: {} react-transition-group@4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): @@ -16954,6 +17453,10 @@ snapshots: dependencies: minimatch: 5.1.6 + readdirp@3.5.0: + dependencies: + picomatch: 2.3.1 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -17095,6 +17598,11 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + restore-cursor@4.0.0: dependencies: onetime: 5.1.2 @@ -17840,6 +18348,17 @@ snapshots: dependencies: real-require: 0.2.0 + threads@1.7.0: + dependencies: + callsites: 3.1.0 + debug: 4.4.3 + is-observable: 2.1.0 + observable-fns: 0.6.1 + optionalDependencies: + tiny-worker: 2.3.0 + transitivePeerDependencies: + - supports-color + through2@2.0.5: dependencies: readable-stream: 2.3.8 @@ -17855,6 +18374,11 @@ snapshots: tiny-warning@1.0.3: {} + tiny-worker@2.3.0: + dependencies: + esm: 3.2.25 + optional: true + tinybench@2.9.0: {} tinyexec@0.3.2: {} @@ -17877,11 +18401,11 @@ snapshots: tinyspy@4.0.3: {} - tldts-core@7.0.22: {} + tldts-core@7.0.28: {} - tldts@7.0.22: + tldts@7.0.28: dependencies: - tldts-core: 7.0.22 + tldts-core: 7.0.28 tmp-promise@3.0.3: dependencies: @@ -17912,9 +18436,9 @@ snapshots: dependencies: nopt: 1.0.10 - tough-cookie@6.0.0: + tough-cookie@6.0.1: dependencies: - tldts: 7.0.22 + tldts: 7.0.28 tr46@0.0.3: {} @@ -17940,7 +18464,7 @@ snapshots: dependencies: typescript: 5.9.3 - ts-api-utils@2.4.0(typescript@5.9.3): + ts-api-utils@2.5.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -17958,7 +18482,7 @@ snapshots: dependencies: lodash: 4.17.21 - ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.10.7)(typescript@5.9.3): + ts-node@10.9.2(@swc/core@1.15.11)(@types/node@22.10.7)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -17976,7 +18500,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.13.5 + '@swc/core': 1.15.11 optional: true ts-pattern@5.4.0: {} @@ -18002,7 +18526,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.0.2(@microsoft/api-extractor@7.43.0(@types/node@22.10.7))(@swc/core@1.13.5)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.10.7)(typescript@5.9.3))(typescript@5.9.3): + tsup@8.0.2(@microsoft/api-extractor@7.43.0(@types/node@22.10.7))(@swc/core@1.15.11)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.15.11)(@types/node@22.10.7)(typescript@5.9.3))(typescript@5.9.3): dependencies: bundle-require: 4.0.2(esbuild@0.19.12) cac: 6.7.14 @@ -18012,7 +18536,7 @@ snapshots: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.10.7)(typescript@5.9.3)) + postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.15.11)(@types/node@22.10.7)(typescript@5.9.3)) resolve-from: 5.0.0 rollup: 4.9.5 source-map: 0.8.0-beta.0 @@ -18020,7 +18544,7 @@ snapshots: tree-kill: 1.2.2 optionalDependencies: '@microsoft/api-extractor': 7.43.0(@types/node@22.10.7) - '@swc/core': 1.13.5 + '@swc/core': 1.15.11 postcss: 8.5.6 typescript: 5.9.3 transitivePeerDependencies: @@ -18233,7 +18757,7 @@ snapshots: undici@7.16.0: {} - undici@7.21.0: {} + undici@7.24.7: {} unicode-emoji-modifier-base@1.0.0: {} @@ -18395,7 +18919,7 @@ snapshots: tsx: 4.20.6 yaml: 2.8.2 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.20.6)(yaml@2.8.2): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 @@ -18423,7 +18947,7 @@ snapshots: optionalDependencies: '@types/debug': 4.1.12 '@types/node': 22.10.7 - jsdom: 28.0.0(@noble/hashes@1.8.0) + jsdom: 28.1.0(@noble/hashes@1.8.0) transitivePeerDependencies: - jiti - less @@ -18444,6 +18968,10 @@ snapshots: walk-up-path@4.0.0: {} + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + webidl-conversions@3.0.1: {} webidl-conversions@4.0.2: {} @@ -18460,9 +18988,9 @@ snapshots: whatwg-mimetype@5.0.0: {} - whatwg-url@16.0.0(@noble/hashes@1.8.0): + whatwg-url@16.0.1(@noble/hashes@1.8.0): dependencies: - '@exodus/bytes': 1.11.0(@noble/hashes@1.8.0) + '@exodus/bytes': 1.15.0(@noble/hashes@1.8.0) tr46: 6.0.0 webidl-conversions: 8.0.1 transitivePeerDependencies: @@ -18602,7 +19130,7 @@ snapshots: wrappy@1.0.2: {} - ws@8.19.0: {} + ws@8.20.0: {} wsl-utils@0.1.0: dependencies: diff --git a/web/docs/i18n.md b/web/docs/i18n.md new file mode 100644 index 00000000..c651337e --- /dev/null +++ b/web/docs/i18n.md @@ -0,0 +1,148 @@ +# Internationalization (i18n) Guide + +Tunarr's web app uses [Lingui v5](https://lingui.dev/) for internationalization. + +## Overview + +- **Library:** Lingui v5.9.0 with SWC plugin and Vite plugin +- **Source locale:** English (`en`) — all source strings are written in English +- **Catalog format:** GNU `.po` files (human-editable, compatible with standard translation tools) +- **Runtime:** Lingui compiles `.po` files to `.ts` modules via `pnpm compile-messages` + +## Adding Translatable Strings + +### JSX text content — use `` + +```tsx +import { Trans } from '@lingui/react/macro'; + +Settings +``` + +### String props (labels, placeholders, aria attributes) — use `t` from `useLingui()` + +```tsx +import { useLingui } from '@lingui/react/macro'; + +function MyComponent() { + const { t } = useLingui(); + return ; +} +``` + +### Plurals — use `` or `plural()` + +```tsx +import { Plural } from '@lingui/react/macro'; + + +``` + +```ts +import { plural } from '@lingui/core/macro'; + +const msg = plural(count, { one: '# item', other: '# items' }); +``` + +### Interpolation + +```tsx +Delete "{name}"? +``` + +### Non-component code (snackbar messages, etc.) + +```tsx +import { useLingui } from '@lingui/react/macro'; + +const { t } = useLingui(); +enqueueSnackbar(t`Settings saved`); +``` + +## Extraction & Compilation Workflow + +1. **Wrap strings** with ``, `t`, ``, etc. +2. **Extract** new strings into `.po` catalog files: + ```bash + cd web && pnpm extract-messages + ``` + This updates `src/locales/en/messages.po` and creates/updates all other locale `.po` files. +3. **Translate** the new `msgid` entries in each locale's `.po` file (leave `msgstr` empty to fall back to English automatically). +4. **Compile** catalogs to TypeScript: + ```bash + cd web && pnpm compile-messages + ``` +5. **Commit** both the `.po` source files and compiled `.ts` files. + +## Adding a New Language + +1. **Update `lingui.config.ts`** — add the locale code to the `locales` array and add a fallback: + ```ts + locales: ['en', 'es', 'fr', 'pseudo-LOCALE'], + fallbackLocales: { + fr: 'en', + // ... + }, + ``` + +2. **Update `SupportedLocales`** in `web/src/store/settings/store.ts`: + ```ts + export type SupportedLocales = 'en' | 'es' | 'fr' | 'pseudo-LOCALE'; + ``` + +3. **Add to the language picker** in `web/src/components/settings/general/WebSettings.tsx`: + ```tsx + Français + ``` + +4. **Add to `LINGUI_TO_DAYJS`** in `web/src/helpers/localeLoader.ts`: + ```ts + export const LINGUI_TO_DAYJS: Record = { + en: 'en', + es: 'es', + fr: 'fr', + 'pseudo-LOCALE': 'en', + }; + ``` + +5. **Add MUI locale** in `web/src/Tunarr.tsx` if MUI ships a locale for it: + ```tsx + import { frFR as muiFrFR } from '@mui/material/locale'; + import { frFR as pickersFrFR } from '@mui/x-date-pickers/locales'; + // ... + if (locale === 'fr') return createTheme(Theme, muiFrFR, pickersFrFR); + ``` + +6. **Run extraction and compilation:** + ```bash + cd web + pnpm extract-messages # creates src/locales/fr/messages.po + # translate the .po file + pnpm compile-messages # generates src/locales/fr/messages.ts + ``` + +## Testing with pseudo-LOCALE + +`pseudo-LOCALE` is a development locale that transforms all translatable strings into a visually distinct format (e.g., adds diacritics). Any string that is **not** pseudo-localized when `pseudo-LOCALE` is active is missing i18n wrapping. + +To activate it in the running app: +1. Go to **Settings → Web Settings** +2. Select **pseudo-LOCALE (dev)** in the Language dropdown (only visible in dev mode) + +Scan all pages for any plain English text — those strings need `` or `t` wrapping. + +## Architecture + +``` +Zustand store (browser-local) + └── settings.ui.i18n.locale → controls Lingui catalog + dayjs locale + MUI locale + └── settings.ui.i18n.timeFormat → controls dayjs time display (12h / 24h / auto) +``` + +- **`setUiLocale(locale)`** — async action that loads the Lingui catalog and dayjs locale module, then updates the store. Components re-render automatically. +- **`setTimeFormat(format)`** — async action that loads `dayjs/locale/en-gb` when needed (for 24h), then updates the store. +- **`DayjsProvider`** — derives the effective dayjs locale from `locale` + `timeFormat` (auto → language native, 12h → en, 24h → en-gb) and sets it globally. +- **`Tunarr.tsx`** — loads English synchronously on startup (preventing blank text), then loads the persisted locale asynchronously via `useEffect`. +- **`I18nProvider`** — wraps the entire app so all `` / `t` macros access the active catalog. + +Locale preference is stored in the browser (Zustand + localStorage). Server-side locale storage is intentionally not implemented — Tunarr is primarily a single-user/household application. diff --git a/web/lingui.config.ts b/web/lingui.config.ts new file mode 100644 index 00000000..5279989f --- /dev/null +++ b/web/lingui.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from '@lingui/cli'; + +export default defineConfig({ + sourceLocale: 'en', + locales: ['en', 'es', 'pseudo-LOCALE'], + pseudoLocale: 'pseudo-LOCALE', + fallbackLocales: { + es: 'en', + 'pseudo-LOCALE': 'en', + default: 'en', + }, + catalogs: [ + { + path: '/src/locales/{locale}/messages', + include: ['src'], + }, + ], +}); diff --git a/web/package.json b/web/package.json index 61801e78..4e202a9a 100644 --- a/web/package.json +++ b/web/package.json @@ -6,10 +6,12 @@ "scripts": { "build": "tsc -p tsconfig.build.json --noEmit", "build-dev": "tsc -p tsconfig.build.json --noEmit --watch", - "regen-routes": "tsr generate", - "generate-client": "openapi-ts", "bundle": "vite build", "dev": "vite", + "extract-messages": "lingui extract", + "compile-messages": "lingui compile --typescript", + "regen-routes": "tsr generate", + "generate-client": "openapi-ts", "lint": "eslint . --report-unused-disable-directives --max-warnings 0", "preview": "vite preview", "test": "vitest --run", @@ -22,6 +24,8 @@ "@emotion/styled": "^11.14.0", "@hookform/error-message": "^2.0.1", "@hookform/resolvers": "^5.2.2", + "@lingui/core": "^5.9.0", + "@lingui/react": "^5.9.0", "@mui/icons-material": "^7.0.2", "@mui/material": "^7.0.2", "@mui/x-date-pickers": "^8.4.0", @@ -66,6 +70,9 @@ "@tanstack/react-devtools": "^0.9.4", "@tanstack/react-form-devtools": "^0.2.13", "@tanstack/react-router-devtools": "^1.158.1", + "@lingui/cli": "^5.9.0", + "@lingui/swc-plugin": "^5.10.1", + "@lingui/vite-plugin": "^5.9.0", "@tanstack/react-table": "8.19.3", "@tanstack/router-cli": "^1.35.4", "@tanstack/router-vite-plugin": "^1.133.13", @@ -81,7 +88,7 @@ "@types/uuid": "^9.0.6", "@typescript-eslint/eslint-plugin": "catalog:", "@typescript-eslint/parser": "catalog:", - "@vitejs/plugin-react-swc": "^3.11.0", + "@vitejs/plugin-react-swc": "^4.2.3", "eslint": "catalog:", "eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-react-refresh": "^0.4.16", diff --git a/web/src/App.tsx b/web/src/App.tsx index fbd7126b..fbcd9ecf 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -1,3 +1,4 @@ +import { Trans } from '@lingui/react/macro'; import { Alert, Box, Toolbar, useTheme } from '@mui/material'; import Container from '@mui/material/Container'; import CssBaseline from '@mui/material/CssBaseline'; @@ -13,8 +14,6 @@ import { TopBar } from './components/TopBar.tsx'; import { useServerEventsSnackbar } from './hooks/useServerEvents.ts'; import { useIsDarkMode } from './hooks/useTunarrTheme.ts'; import { useVersion } from './hooks/useVersion.tsx'; -import { strings } from './strings.ts'; - export function Root({ children }: { children?: React.ReactNode }) { useServerEventsSnackbar(); @@ -75,7 +74,11 @@ export function Root({ children }: { children?: React.ReactNode }) { } > - {strings.FFMPEG_MISSING} + + FFmpeg not found. For all features to work, we recommend + installing FFmpeg 7.1+ or update your FFmpeg executable path in + settings. + ) : null} {children ?? } @@ -88,7 +91,9 @@ export function Root({ children }: { children?: React.ReactNode }) { export default function App() { return ( <> - Channels + + Channels + ); } diff --git a/web/src/Tunarr.tsx b/web/src/Tunarr.tsx index 34de7877..a148633f 100644 --- a/web/src/Tunarr.tsx +++ b/web/src/Tunarr.tsx @@ -1,39 +1,67 @@ +import { setUiLocale } from '@/store/settings/actions.ts'; import { DayjsProvider } from '@/providers/DayjsProvider.tsx'; import useStore from '@/store/index.ts'; -import { ThemeProvider } from '@mui/material'; +import { i18n } from '@lingui/core'; +import { I18nProvider } from '@lingui/react'; +import { ThemeProvider, createTheme } from '@mui/material'; +import { esES as muiEsES } from '@mui/material/locale'; +import { esES as pickersEsES } from '@mui/x-date-pickers/locales'; import { LocalizationProvider } from '@mui/x-date-pickers'; import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'; import { QueryClientProvider } from '@tanstack/react-query'; import { RouterProvider } from '@tanstack/react-router'; import { SnackbarProvider } from 'notistack'; +import { useEffect, useMemo } from 'react'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; import { ServerEventsProvider } from './components/server_events/ServerEventsProvider.tsx'; import { TunarrApiProvider } from './context/TunarrApiContext.tsx'; +import { messages as enMessages } from './locales/en/messages'; import { queryClient } from './queryClient.ts'; import { router } from './router.ts'; import { Theme } from './theme.ts'; +// Load English immediately as a synchronous fallback so the first render +// always has text (no blank flash or message IDs). +i18n.loadAndActivate({ locale: 'en', messages: enMessages }); export const Tunarr = () => { const locale = useStore((store) => store.settings.ui.i18n.locale); + // On mount and whenever the stored locale changes, load the catalog and + // dayjs locale module. setUiLocale handles both; the English catalog is + // already loaded above so 'en' is effectively idempotent. + useEffect(() => { + void setUiLocale(locale); + }, [locale]); + + const muiLocaleTheme = useMemo(() => { + if (locale === 'es') { + return createTheme(Theme, muiEsES, pickersEsES); + } + return Theme; + }, [locale]); + return ( - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + ); }; diff --git a/web/src/components/channel_config/ChannelProgrammingSort.tsx b/web/src/components/channel_config/ChannelProgrammingSort.tsx index 2387c73f..b97b1728 100644 --- a/web/src/components/channel_config/ChannelProgrammingSort.tsx +++ b/web/src/components/channel_config/ChannelProgrammingSort.tsx @@ -16,7 +16,7 @@ import { useCyclicShuffle } from '../../hooks/programming_controls/useCyclicShuf import { useEpisodeNumberSort } from '../../hooks/programming_controls/useEpisodeNumberSort.ts'; import { useProgramShuffle } from '../../hooks/programming_controls/useRandomSort.ts'; import { useReleaseDateSort } from '../../hooks/programming_controls/useReleaseDateSort.ts'; -import { strings } from '../../strings.ts'; +import { useLingui } from '@lingui/react/macro'; import { ElevatedTooltip } from '../base/ElevatedTooltip.tsx'; import { StyledMenu } from '../base/StyledMenu.tsx'; import AddBlockShuffleModal from '../programming_controls/AddBlockShuffleModal.tsx'; @@ -36,6 +36,7 @@ type SortOption = | 'shows'; export function ChannelProgrammingSort() { + const { t } = useLingui(); const [sort, setSort] = useState(null); const [anchorEl, setAnchorEl] = useState(null); const [addBlockShuffleModalOpen, setAddBlockShuffleModalOpen] = @@ -140,7 +141,7 @@ export function ChannelProgrammingSort() { = `${T}-asc` | `${T}-desc`; type PossibleSorts = 'random' | OrdereredSort<'release'> | 'block'; export const CustomShowSortToolsMenu = () => { + const { t } = useLingui(); const { programList } = useCustomShowEditor(); const [anchorEl, setAnchorEl] = useState(null); const open = !!anchorEl; @@ -125,7 +126,7 @@ export const CustomShowSortToolsMenu = () => { Sort By... @@ -144,7 +145,7 @@ export const CustomShowSortToolsMenu = () => { @@ -163,7 +164,7 @@ export const CustomShowSortToolsMenu = () => { diff --git a/web/src/components/settings/general/WebSettings.tsx b/web/src/components/settings/general/WebSettings.tsx index 44f4e22e..0d3a615b 100644 --- a/web/src/components/settings/general/WebSettings.tsx +++ b/web/src/components/settings/general/WebSettings.tsx @@ -1,9 +1,17 @@ import DarkModeButton from '@/components/settings/DarkModeButton.tsx'; import useStore from '@/store/index.ts'; -import { setUiLocale } from '@/store/settings/actions.ts'; -import type { SupportedLocales } from '@/store/settings/store.ts'; +import { + setTimeFormat, + setUiLocale, +} from '@/store/settings/actions.ts'; +import type { SupportedLocales, TimeFormat } from '@/store/settings/store.ts'; +import { Trans, useLingui } from '@lingui/react/macro'; import { Box, + FormControl, + InputLabel, + MenuItem, + Select, Stack, ToggleButton, ToggleButtonGroup, @@ -13,12 +21,18 @@ import { useCallback } from 'react'; import type { Nullable } from '../../../types/util.ts'; export const WebSettings = () => { + const { t } = useLingui(); const locale = useStore((state) => state.settings.ui.i18n.locale); + const timeFormat = useStore((state) => state.settings.ui.i18n.timeFormat); - const handleUiLocaleChange = useCallback( - (value: Nullable) => { + const handleLocaleChange = useCallback((value: SupportedLocales) => { + void setUiLocale(value); + }, []); + + const handleTimeFormatChange = useCallback( + (value: Nullable) => { if (value) { - setUiLocale(value); + void setTimeFormat(value); } }, [], @@ -27,34 +41,74 @@ export const WebSettings = () => { return ( - Web Settings + + Web Settings + - These settings are stored in your browser and are saved automatically - when changed. + + These settings are stored in your browser and are saved + automatically when changed. + - - handleUiLocaleChange(value as Nullable) - } - aria-label="text alignment" - > - - 12-hour - - - 24-hour - - + + Language + + + + Language + + + - Theme Settings + Time Format + + + handleTimeFormatChange(value as Nullable) + } + aria-label={t`Time format`} + > + + 12-hour + + + 24-hour + + + Auto + + + + + Auto uses the time convention for the selected language. + + + + + + + Theme Settings diff --git a/web/src/helpers/localeLoader.ts b/web/src/helpers/localeLoader.ts new file mode 100644 index 00000000..ac81879d --- /dev/null +++ b/web/src/helpers/localeLoader.ts @@ -0,0 +1,27 @@ +/** + * Maps Lingui locale codes to their corresponding dayjs locale codes. + * 'pseudo-LOCALE' has no dayjs equivalent, so it falls back to 'en'. + */ +export const LINGUI_TO_DAYJS: Record = { + en: 'en', + es: 'es', + 'pseudo-LOCALE': 'en', +}; + +/** + * Returns the dayjs locale code for a given Lingui locale. + */ +export function getLinguiToDayjsLocale(locale: string): string { + return LINGUI_TO_DAYJS[locale] ?? 'en'; +} + +/** + * Dynamically imports the dayjs locale module for a given Lingui locale. + * 'en' is always built into dayjs and requires no dynamic import. + */ +export async function loadDayjsLocale(locale: string): Promise { + const dayjsLocale = getLinguiToDayjsLocale(locale); + if (dayjsLocale !== 'en') { + await import(`dayjs/locale/${dayjsLocale}.js`); + } +} diff --git a/web/src/hooks/useNavItems.tsx b/web/src/hooks/useNavItems.tsx index 5b01f318..59c3c1ac 100644 --- a/web/src/hooks/useNavItems.tsx +++ b/web/src/hooks/useNavItems.tsx @@ -1,4 +1,5 @@ import type { router } from '@/router.ts'; +import { t } from '@lingui/core/macro'; import { Computer, Delete, @@ -52,52 +53,52 @@ export const useNavItems = () => { return useMemo(() => { const items: NavItem[] = [ { - name: 'Welcome', + name: t`Welcome`, path: '/welcome', hidden: !showWelcome, icon: , }, - { name: 'Guide', path: '/guide', icon: }, + { name: t`Guide`, path: '/guide', icon: }, { - name: 'Channels', + name: t`Channels`, path: '/channels', icon: , }, // { name: 'Watch', path: '/watch', hidden: true, icon: }, { - name: 'Library', + name: t`Library`, path: '/library', icon: , children: [ { - name: 'Filler Lists', + name: t`Filler Lists`, path: '/library/fillers', icon: , }, { - name: 'Smart Collections', + name: t`Smart Collections`, path: '/library/smart_collections', icon: , }, { - name: 'Custom Shows', + name: t`Custom Shows`, path: '/library/custom-shows' as const, icon: , }, { - name: 'Trash', + name: t`Trash`, path: '/library/trash', icon: , }, ], }, { - name: 'Sources', + name: t`Sources`, path: '/media_sources', icon: , }, { - name: 'System', + name: t`System`, path: '/system', icon: , badge: highestSev @@ -108,24 +109,24 @@ export const useNavItems = () => { : undefined, children: [ { - name: 'Status', + name: t`Status`, path: '/system', hidden: true, }, { - name: 'Debug', + name: t`Debug`, path: '/system/debug', hidden: true, }, { - name: 'Logs', + name: t`Logs`, path: '/system/logs', hidden: true, }, ], }, { - name: 'Settings', + name: t`Settings`, path: '/settings/general', icon: , children: [ diff --git a/web/src/i18n.ts b/web/src/i18n.ts new file mode 100644 index 00000000..5ede3cf1 --- /dev/null +++ b/web/src/i18n.ts @@ -0,0 +1,19 @@ +import { i18n } from '@lingui/core'; +import { messages as enMessages } from './locales/en/messages'; + +/** + * Loads and activates a Lingui message catalog for the given locale. + * Falls back to English if the catalog cannot be loaded. + * Idempotent: skips loading if the locale is already active. + */ +export async function loadCatalog(locale: string) { + if (i18n.locale === locale) return; + try { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const { messages } = await import(`./locales/${locale}/messages`); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + i18n.loadAndActivate({ locale, messages }); + } catch { + i18n.loadAndActivate({ locale: 'en', messages: enMessages }); + } +} diff --git a/web/src/locales/en/messages.po b/web/src/locales/en/messages.po new file mode 100644 index 00000000..b768fa64 --- /dev/null +++ b/web/src/locales/en/messages.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2026-02-10 20:45-0500\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: en\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" + +#: src/pages/channels/ChannelsPage.tsx:195 +msgid "Cancel" +msgstr "Cancel" + +#: src/App.tsx:93 +#: src/hooks/useNavItems.tsx:63 +msgid "Channels" +msgstr "Channels" + +#: src/hooks/useNavItems.tsx:84 +msgid "Custom Shows" +msgstr "Custom Shows" + +#: src/hooks/useNavItems.tsx:117 +msgid "Debug" +msgstr "Debug" + +#: src/pages/channels/ChannelsPage.tsx:201 +msgid "Delete" +msgstr "Delete" + +#: src/pages/channels/ChannelsPage.tsx:180 +msgid "Delete Channel" +msgstr "Delete Channel" + +#: src/pages/channels/ChannelsPage.tsx:184 +msgid "Deleting a Channel will remove all programming from the channel. This action cannot be undone." +msgstr "Deleting a Channel will remove all programming from the channel. This action cannot be undone." + +#: src/hooks/useNavItems.tsx:74 +msgid "Filler Lists" +msgstr "Filler Lists" + +#: src/hooks/useNavItems.tsx:61 +#: src/pages/guide/GuidePage.tsx:120 +msgid "Guide" +msgstr "Guide" + +#: src/pages/guide/GuidePage.tsx:137 +msgid "Guide Start Time" +msgstr "Guide Start Time" + +#: src/hooks/useNavItems.tsx:69 +msgid "Library" +msgstr "Library" + +#: src/hooks/useNavItems.tsx:122 +msgid "Logs" +msgstr "Logs" + +#: src/pages/guide/GuidePage.tsx:142 +msgid "Reset to current date/time" +msgstr "Reset to current date/time" + +#: src/hooks/useNavItems.tsx:129 +msgid "Settings" +msgstr "Settings" + +#: src/pages/guide/GuidePage.tsx:155 +msgid "Show Stealth" +msgstr "Show Stealth" + +#: src/hooks/useNavItems.tsx:79 +msgid "Smart Collections" +msgstr "Smart Collections" + +#: src/hooks/useNavItems.tsx:96 +msgid "Sources" +msgstr "Sources" + +#: src/hooks/useNavItems.tsx:112 +msgid "Status" +msgstr "Status" + +#: src/hooks/useNavItems.tsx:101 +msgid "System" +msgstr "System" + +#: src/hooks/useNavItems.tsx:89 +msgid "Trash" +msgstr "Trash" + +#: src/hooks/useNavItems.tsx:56 +msgid "Welcome" +msgstr "Welcome" diff --git a/web/src/locales/en/messages.ts b/web/src/locales/en/messages.ts new file mode 100644 index 00000000..80f94b74 --- /dev/null +++ b/web/src/locales/en/messages.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"KkOthv\":[\"Guide\"],\"lfFsZ4\":[\"Channels\"]}")as Messages; \ No newline at end of file diff --git a/web/src/locales/es/messages.po b/web/src/locales/es/messages.po new file mode 100644 index 00000000..6b62b5bf --- /dev/null +++ b/web/src/locales/es/messages.po @@ -0,0 +1,14 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2026-04-11 00:00+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: es\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" diff --git a/web/src/locales/es/messages.ts b/web/src/locales/es/messages.ts new file mode 100644 index 00000000..c9f82355 --- /dev/null +++ b/web/src/locales/es/messages.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{}")as Messages; diff --git a/web/src/locales/pseudo-LOCALE/messages.po b/web/src/locales/pseudo-LOCALE/messages.po new file mode 100644 index 00000000..d842334a --- /dev/null +++ b/web/src/locales/pseudo-LOCALE/messages.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2026-02-11 20:42-0500\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: pseudo-LOCALE\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" + +#: src/pages/channels/ChannelsPage.tsx:195 +msgid "Cancel" +msgstr "" + +#: src/App.tsx:93 +#: src/hooks/useNavItems.tsx:63 +msgid "Channels" +msgstr "" + +#: src/hooks/useNavItems.tsx:84 +msgid "Custom Shows" +msgstr "" + +#: src/hooks/useNavItems.tsx:117 +msgid "Debug" +msgstr "" + +#: src/pages/channels/ChannelsPage.tsx:201 +msgid "Delete" +msgstr "" + +#: src/pages/channels/ChannelsPage.tsx:180 +msgid "Delete Channel" +msgstr "" + +#: src/pages/channels/ChannelsPage.tsx:184 +msgid "Deleting a Channel will remove all programming from the channel. This action cannot be undone." +msgstr "" + +#: src/hooks/useNavItems.tsx:74 +msgid "Filler Lists" +msgstr "" + +#: src/hooks/useNavItems.tsx:61 +#: src/pages/guide/GuidePage.tsx:120 +msgid "Guide" +msgstr "" + +#: src/pages/guide/GuidePage.tsx:137 +msgid "Guide Start Time" +msgstr "" + +#: src/hooks/useNavItems.tsx:69 +msgid "Library" +msgstr "" + +#: src/hooks/useNavItems.tsx:122 +msgid "Logs" +msgstr "" + +#: src/pages/guide/GuidePage.tsx:142 +msgid "Reset to current date/time" +msgstr "" + +#: src/hooks/useNavItems.tsx:129 +msgid "Settings" +msgstr "" + +#: src/pages/guide/GuidePage.tsx:155 +msgid "Show Stealth" +msgstr "" + +#: src/hooks/useNavItems.tsx:79 +msgid "Smart Collections" +msgstr "" + +#: src/hooks/useNavItems.tsx:96 +msgid "Sources" +msgstr "" + +#: src/hooks/useNavItems.tsx:112 +msgid "Status" +msgstr "" + +#: src/hooks/useNavItems.tsx:101 +msgid "System" +msgstr "" + +#: src/hooks/useNavItems.tsx:89 +msgid "Trash" +msgstr "" + +#: src/hooks/useNavItems.tsx:56 +msgid "Welcome" +msgstr "" diff --git a/web/src/locales/pseudo-LOCALE/messages.ts b/web/src/locales/pseudo-LOCALE/messages.ts new file mode 100644 index 00000000..d96e3549 --- /dev/null +++ b/web/src/locales/pseudo-LOCALE/messages.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"KkOthv\":[\"Ĝũĩďē\"],\"lfFsZ4\":[\"Ćĥàńńēĺś\"]}")as Messages; \ No newline at end of file diff --git a/web/src/main.tsx b/web/src/main.tsx index 96b6c9bb..f6aeab6f 100644 --- a/web/src/main.tsx +++ b/web/src/main.tsx @@ -2,7 +2,6 @@ import languages from '@cospired/i18n-iso-languages'; import en from '@cospired/i18n-iso-languages/langs/en.json'; import { ColorSpace, LCH, OKLCH, sRGB } from 'colorjs.io/fn'; import dayjs from 'dayjs'; -import 'dayjs/locale/en-gb'; import localeData from 'dayjs/plugin/localeData'; import localizedFormat from 'dayjs/plugin/localizedFormat'; import React from 'react'; @@ -17,7 +16,6 @@ ColorSpace.register(sRGB); dayjs.extend(localizedFormat); dayjs.extend(localeData); -dayjs.locale('en-gb'); // Initialize the languages database with English names // TODO: localize this and make it a context provider diff --git a/web/src/pages/channels/ChannelsPage.tsx b/web/src/pages/channels/ChannelsPage.tsx index caccc76b..1bc8c023 100644 --- a/web/src/pages/channels/ChannelsPage.tsx +++ b/web/src/pages/channels/ChannelsPage.tsx @@ -1,6 +1,7 @@ import { betterHumanize } from '@/helpers/dayjs.ts'; import { useTranscodeConfigs } from '@/hooks/settingsHooks.ts'; import type { Maybe } from '@/types/util.ts'; +import { Trans } from '@lingui/react/macro'; import { Check, Close, Edit, MoreVert } from '@mui/icons-material'; import AddCircleIcon from '@mui/icons-material/AddCircle'; import type { BoxProps } from '@mui/material'; @@ -182,12 +183,14 @@ export default function ChannelsPage() { {deleteChannelConfirmation && ( <> - Delete Channel "{deleteChannelConfirmation.name}"? + Delete Channel "{deleteChannelConfirmation.name}"? - Deleting a Channel will remove all programming from the channel. - This action cannot be undone. + + Deleting a Channel will remove all programming from the + channel. This action cannot be undone. + @@ -195,13 +198,13 @@ export default function ChannelsPage() { onClick={() => setDeleteChannelConfirmation(undefined)} autoFocus > - Cancel + Cancel diff --git a/web/src/pages/guide/GuidePage.tsx b/web/src/pages/guide/GuidePage.tsx index d3486b9c..20a25af4 100644 --- a/web/src/pages/guide/GuidePage.tsx +++ b/web/src/pages/guide/GuidePage.tsx @@ -1,3 +1,5 @@ +import { t } from '@lingui/core/macro'; +import { Trans } from '@lingui/react/macro'; import { ArrowBackIos, ArrowForwardIos, @@ -115,7 +117,7 @@ export default function GuidePage({ channelId }: Props = { channelId: 'all' }) { return ( <> - Guide + Guide handleDayChange(v)} - label="Guide Start Time" + label={t`Guide Start Time`} /> {dayjs.duration(end.diff(start)).humanize()} {!dayjs().isBetween(start, end) && ( - + @@ -150,7 +152,7 @@ export default function GuidePage({ channelId }: Props = { channelId: 'all' }) { onChange={(_, checked) => setShowStealth(checked)} /> } - label="Show Stealth" + label={t`Show Stealth`} /> { const locale = useStore((store) => store.settings.ui.i18n.locale); + const timeFormat = useStore((store) => store.settings.ui.i18n.timeFormat); + + const effectiveDayjsLocale = useMemo(() => { + if (timeFormat === '12h') return 'en'; + if (timeFormat === '24h') return 'en-gb'; + return getLinguiToDayjsLocale(locale); + }, [locale, timeFormat]); + + // Async-load the dayjs locale module if needed (handles stored locale on startup + // and the 'en-gb' module for 24h format) + useEffect(() => { + const load = async () => { + if (effectiveDayjsLocale !== 'en') { + await import(`dayjs/locale/${effectiveDayjsLocale}.js`); + } + originalDayjs.locale(effectiveDayjsLocale); + }; + void load(); + }, [effectiveDayjsLocale]); + const value = useMemo(() => { - originalDayjs.locale(locale); + originalDayjs.locale(effectiveDayjsLocale); return { dayjs: (date?: originalDayjs.ConfigType) => { return originalDayjs(date); }, } satisfies ContextType; - }, [locale]); + }, [effectiveDayjsLocale]); + return ( {children} ); diff --git a/web/src/store/settings/actions.ts b/web/src/store/settings/actions.ts index 3d38da38..9d262917 100644 --- a/web/src/store/settings/actions.ts +++ b/web/src/store/settings/actions.ts @@ -1,6 +1,7 @@ -import type { SupportedLocales } from '@/store/settings/store.ts'; +import { loadDayjsLocale } from '@/helpers/localeLoader.ts'; +import { loadCatalog } from '@/i18n.ts'; +import type { SupportedLocales, TimeFormat } from '@/store/settings/store.ts'; import type { PaginationState, SortingState } from '@tanstack/react-table'; -import dayjs from 'dayjs'; import useStore from '..'; export const setBackendUri = (uri: string) => @@ -49,11 +50,22 @@ export const setChannelPaginationState = (p: PaginationState) => settings.ui.channelTablePagination = p; }); -export const setUiLocale = (locale: SupportedLocales) => +export const setUiLocale = async (locale: SupportedLocales) => { + await loadDayjsLocale(locale); + await loadCatalog(locale); useStore.setState(({ settings }) => { - dayjs.locale(locale); // Changes the default dayjs locale globally settings.ui.i18n.locale = locale; }); +}; + +export const setTimeFormat = async (format: TimeFormat) => { + if (format === '24h') { + await import('dayjs/locale/en-gb'); + } + useStore.setState(({ settings }) => { + settings.ui.i18n.timeFormat = format; + }); +}; export const setShowAdvancedSettings = (value: boolean) => useStore.setState(({ settings }) => { diff --git a/web/src/store/settings/store.ts b/web/src/store/settings/store.ts index 6d2d9da9..574a332d 100644 --- a/web/src/store/settings/store.ts +++ b/web/src/store/settings/store.ts @@ -3,9 +3,9 @@ import type { DeepPartial } from 'ts-essentials'; import { z } from 'zod'; import type { StateCreator } from 'zustand'; -// Only these 2 are supported currently -export const SupportedLocales = ['en', 'en-gb'] as const; +export const SupportedLocales = ['en', 'es', 'pseudo-LOCALE'] as const; export type SupportedLocales = TupleToUnion; +export type TimeFormat = '12h' | '24h' | 'auto'; const CurrentSettingsSchemaVersion = 1; @@ -35,6 +35,7 @@ export const SettingsStateInternalSchema = z.object({ channelTableColumnModel: z.record(z.string(), z.boolean()), i18n: z.object({ locale: z.enum(SupportedLocales), + timeFormat: z.enum(['12h', '24h', 'auto']).default('auto'), }), tableSettings: z.record(z.string(), TableSettingsSchema), showAdvancedSettings: z.boolean(), @@ -73,6 +74,7 @@ export const createSettingsSlice: StateCreator = () => ({ }, i18n: { locale: 'en', + timeFormat: 'auto', }, tableSettings: {}, showAdvancedSettings: false, diff --git a/web/src/strings.ts b/web/src/strings.ts index c6df7b5c..5d37bb43 100644 --- a/web/src/strings.ts +++ b/web/src/strings.ts @@ -1,14 +1,5 @@ -export const strings = { - SHUFFLE_TOOLTIP: 'Completely randomizes the order of programs.', - ALPHA_SORT_TOOLTIP: 'Sorts alphabetically by program title', - CYCLIC_SHUFFLE_TOOLTIP: - 'Like Random Shuffle, but tries to preserve the sequence of episodes for each TV show. If a TV show has multiple instances of its episodes, they are also cycled appropriately.', - BLOCK_SHUFFLE_TOOLTIP: - 'Alternates TV shows in blocks of episodes. You can pick the number of episodes per show in each block and if the order of shows in each block should be randomized. Movies are moved to the bottom.', - EPISODE_SORT_TOOLTIP: - 'Sorts the list by TV Show and the episodes in each TV show by their season/episode number. Movies are moved to the bottom of the schedule.', - RELEASE_SORT_TOOLTIP: - 'Sorts everything by its release date. This will only work correctly if the release dates in Plex are correct. In case any item does not have a release date specified, it will be moved to the bottom.', - FFMPEG_MISSING: - 'FFmpeg not found. For all features to work, we recommend installing FFmpeg 7.1+ or update your FFmpeg executable path in settings.', -}; +// This file has been migrated to Lingui i18n macros. +// All strings are now inlined at their usage sites using and t``. +// This file is kept as an empty export to avoid breaking any lingering imports +// at compile time, but all imports of `strings` should be removed. +export const strings = {} as Record; diff --git a/web/src/test/i18n.test.ts b/web/src/test/i18n.test.ts new file mode 100644 index 00000000..13b13c69 --- /dev/null +++ b/web/src/test/i18n.test.ts @@ -0,0 +1,31 @@ +import { i18n } from '@lingui/core'; +import { beforeEach, describe, expect, it } from 'vitest'; +import { loadCatalog } from '../i18n.ts'; + +describe('loadCatalog', () => { + beforeEach(() => { + // Reset to a known state before each test + i18n.loadAndActivate({ locale: 'en', messages: {} }); + }); + + it('activates the English locale', async () => { + await loadCatalog('en'); + expect(i18n.locale).toBe('en'); + }); + + it('is idempotent — loading the same locale twice does not error', async () => { + await loadCatalog('en'); + await expect(loadCatalog('en')).resolves.toBeUndefined(); + expect(i18n.locale).toBe('en'); + }); + + it('falls back to English when given a nonexistent locale', async () => { + await loadCatalog('nonexistent-LOCALE'); + expect(i18n.locale).toBe('en'); + }); + + it('activates Spanish locale', async () => { + await loadCatalog('es'); + expect(i18n.locale).toBe('es'); + }); +}); diff --git a/web/src/test/setup.ts b/web/src/test/setup.ts index 9958e1fd..1c16f30b 100644 --- a/web/src/test/setup.ts +++ b/web/src/test/setup.ts @@ -1,14 +1,21 @@ import '@testing-library/jest-dom/vitest'; +import { i18n } from '@lingui/core'; import { cleanup } from '@testing-library/react'; import dayjs from 'dayjs'; import duration from 'dayjs/plugin/duration'; import relativeTime from 'dayjs/plugin/relativeTime'; -import { afterEach } from 'vitest'; +import { afterEach, beforeAll } from 'vitest'; // Load dayjs plugins needed by components dayjs.extend(duration); dayjs.extend(relativeTime); +// Initialize Lingui with an empty English catalog so components using +// and t`` render their message IDs (English source strings) in tests. +beforeAll(() => { + i18n.loadAndActivate({ locale: 'en', messages: {} }); +}); + // Automatically cleanup after each test afterEach(() => { cleanup(); diff --git a/web/src/test/utils.tsx b/web/src/test/utils.tsx index 70f5a595..27d96007 100644 --- a/web/src/test/utils.tsx +++ b/web/src/test/utils.tsx @@ -1,11 +1,13 @@ +import { i18n } from '@lingui/core'; +import { I18nProvider } from '@lingui/react'; +import { Theme } from '@/theme.ts'; +import { ThemeProvider } from '@mui/material'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { render, type RenderOptions } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import type { ReactElement, ReactNode } from 'react'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; -import { ThemeProvider } from '@mui/material'; -import { Theme } from '@/theme.ts'; /** * Creates a fresh QueryClient configured for testing. @@ -37,11 +39,13 @@ function TestProviders({ children, queryClient }: TestProvidersProps) { const client = queryClient ?? createTestQueryClient(); return ( - - - {children} - - + + + + {children} + + + ); } diff --git a/web/turbo.json b/web/turbo.json index f0900446..a0801ee9 100644 --- a/web/turbo.json +++ b/web/turbo.json @@ -8,6 +8,13 @@ "clean-build": { "dependsOn": ["^build"] }, + "compile-messages": { + "dependsOn": ["extract-messages"] + }, + "dev": { + "dependsOn": ["compile-messages"] + }, + "extract-messages": {}, "typecheck": { "dependsOn": ["^build"] }, diff --git a/web/vite.config.ts b/web/vite.config.ts index 0e37bc5a..9f466d25 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -1,6 +1,7 @@ import dotenv from '@dotenvx/dotenvx'; dotenv.config({ debug: false }); +import { lingui } from '@lingui/vite-plugin'; import { tanstackRouter } from '@tanstack/router-vite-plugin'; import react from '@vitejs/plugin-react-swc'; import path from 'node:path'; @@ -33,7 +34,10 @@ const version = (() => { // https://vitejs.dev/config/ export default defineConfig({ plugins: [ - react(), + react({ + plugins: [['@lingui/swc-plugin', {}]], + }), + lingui(), tanstackRouter({ semicolons: true, routesDirectory: path.resolve(__dirname, './src/routes'),