diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..d837d05
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,4 @@
+node_modules
+dist
+dist-ssr
+*.local
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..9e4c08a
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,5 @@
+{
+ "semi": true,
+ "singleQuote": true,
+ "trailingComma": "all"
+}
diff --git a/README.md b/README.md
index 3ce23b3..12b6918 100644
--- a/README.md
+++ b/README.md
@@ -20,9 +20,9 @@ If you are developing a production application, we recommend updating the config
```js
export default defineConfig([
- globalIgnores(["dist"]),
+ globalIgnores(['dist']),
{
- files: ["**/*.{ts,tsx}"],
+ files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
@@ -37,7 +37,7 @@ export default defineConfig([
],
languageOptions: {
parserOptions: {
- project: ["./tsconfig.node.json", "./tsconfig.app.json"],
+ project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
@@ -50,23 +50,23 @@ You can also install [eslint-plugin-react-x](https://npmx.dev/package/eslint-plu
```js
// eslint.config.js
-import reactX from "eslint-plugin-react-x";
-import reactDom from "eslint-plugin-react-dom";
+import reactX from 'eslint-plugin-react-x';
+import reactDom from 'eslint-plugin-react-dom';
export default defineConfig([
- globalIgnores(["dist"]),
+ globalIgnores(['dist']),
{
- files: ["**/*.{ts,tsx}"],
+ files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Enable lint rules for React
- reactX.configs["recommended-typescript"],
+ reactX.configs['recommended-typescript'],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
- project: ["./tsconfig.node.json", "./tsconfig.app.json"],
+ project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
diff --git a/backup/App.tsx b/backup/App.tsx
index 9ca8e8d..251febe 100644
--- a/backup/App.tsx
+++ b/backup/App.tsx
@@ -1,11 +1,11 @@
-import { useState } from 'react'
-import heroImg from './assets/hero.png'
-import reactLogo from './assets/react.svg'
-import viteLogo from './assets/vite.svg'
-import './App.css'
+import { useState } from 'react';
+import heroImg from './assets/hero.png';
+import reactLogo from './assets/react.svg';
+import viteLogo from './assets/vite.svg';
+import './App.css';
function App() {
- const [count, setCount] = useState(0)
+ const [count, setCount] = useState(0);
return (
<>
@@ -116,7 +116,7 @@ function App() {
>
- )
+ );
}
-export default App
+export default App;
diff --git a/backup/main.tsx b/backup/main.tsx
index bef5202..2239905 100644
--- a/backup/main.tsx
+++ b/backup/main.tsx
@@ -1,10 +1,10 @@
-import { StrictMode } from 'react'
-import { createRoot } from 'react-dom/client'
-import './index.css'
-import App from './App.tsx'
+import { StrictMode } from 'react';
+import { createRoot } from 'react-dom/client';
+import './index.css';
+import App from './App.tsx';
createRoot(document.getElementById('root')!).render(
,
-)
+);
diff --git a/eslint.config.js b/eslint.config.js
index ef614d2..6fa77ed 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -1,9 +1,10 @@
-import js from '@eslint/js'
-import globals from 'globals'
-import reactHooks from 'eslint-plugin-react-hooks'
-import reactRefresh from 'eslint-plugin-react-refresh'
-import tseslint from 'typescript-eslint'
-import { defineConfig, globalIgnores } from 'eslint/config'
+import js from '@eslint/js';
+import globals from 'globals';
+import reactHooks from 'eslint-plugin-react-hooks';
+import reactRefresh from 'eslint-plugin-react-refresh';
+import tseslint from 'typescript-eslint';
+import { defineConfig, globalIgnores } from 'eslint/config';
+import prettierConfig from 'eslint-config-prettier';
export default defineConfig([
globalIgnores(['dist']),
@@ -14,9 +15,10 @@ export default defineConfig([
tseslint.configs.recommended,
reactHooks.configs.flat.recommended,
reactRefresh.configs.vite,
+ prettierConfig,
],
languageOptions: {
globals: globals.browser,
},
},
-])
+]);
diff --git a/package.json b/package.json
index 20fbe65..c54846e 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,9 @@
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "eslint .",
- "preview": "vite preview"
+ "preview": "vite preview",
+ "format": "prettier --write .",
+ "format:check": "prettier --check ."
},
"dependencies": {
"@tanstack/react-query": "^5.102.8",
@@ -26,9 +28,11 @@
"@vitejs/plugin-react": "^6.1.0",
"babel-plugin-react-compiler": "^1.0.0",
"eslint": "^10.9.0",
+ "eslint-config-prettier": "^10.1.8",
"eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-react-refresh": "^0.5.4",
"globals": "^17.11.0",
+ "prettier": "^3.9.7",
"typescript": "~6.0.2",
"typescript-eslint": "^8.67.0",
"vite": "^8.2.2"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 074ca13..009d3e3 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -5,7 +5,6 @@ settings:
excludeLinksFromLockfile: false
importers:
-
.:
dependencies:
'@tanstack/react-query':
@@ -51,6 +50,9 @@ importers:
eslint:
specifier: ^10.9.0
version: 10.9.1
+ eslint-config-prettier:
+ specifier: ^10.1.8
+ version: 10.1.8(eslint@10.9.1)
eslint-plugin-react-hooks:
specifier: ^7.1.1
version: 7.1.1(eslint@10.9.1)
@@ -60,6 +62,9 @@ importers:
globals:
specifier: ^17.11.0
version: 17.12.0
+ prettier:
+ specifier: ^3.9.7
+ version: 3.9.7
typescript:
specifier: ~6.0.2
version: 6.0.3
@@ -71,99 +76,164 @@ importers:
version: 8.2.2(@types/node@24.13.3)
packages:
-
'@babel/code-frame@7.29.7':
- resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==,
+ }
+ engines: { node: '>=6.9.0' }
'@babel/compat-data@7.29.7':
- resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==,
+ }
+ engines: { node: '>=6.9.0' }
'@babel/core@7.29.7':
- resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==,
+ }
+ engines: { node: '>=6.9.0' }
'@babel/generator@7.29.8':
- resolution: {integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==,
+ }
+ engines: { node: '>=6.9.0' }
'@babel/helper-compilation-targets@7.29.7':
- resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==,
+ }
+ engines: { node: '>=6.9.0' }
'@babel/helper-globals@7.29.7':
- resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==,
+ }
+ engines: { node: '>=6.9.0' }
'@babel/helper-module-imports@7.29.7':
- resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==,
+ }
+ engines: { node: '>=6.9.0' }
'@babel/helper-module-transforms@7.29.7':
- resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==,
+ }
+ engines: { node: '>=6.9.0' }
peerDependencies:
'@babel/core': ^7.0.0
'@babel/helper-string-parser@7.29.7':
- resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==,
+ }
+ engines: { node: '>=6.9.0' }
'@babel/helper-validator-identifier@7.29.7':
- resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==,
+ }
+ engines: { node: '>=6.9.0' }
'@babel/helper-validator-option@7.29.7':
- resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==,
+ }
+ engines: { node: '>=6.9.0' }
'@babel/helpers@7.29.7':
- resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==,
+ }
+ engines: { node: '>=6.9.0' }
'@babel/parser@7.29.8':
- resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==}
- engines: {node: '>=6.0.0'}
+ resolution:
+ {
+ integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==,
+ }
+ engines: { node: '>=6.0.0' }
hasBin: true
'@babel/template@7.29.7':
- resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==,
+ }
+ engines: { node: '>=6.9.0' }
'@babel/traverse@7.29.8':
- resolution: {integrity: sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==,
+ }
+ engines: { node: '>=6.9.0' }
'@babel/types@7.29.8':
- resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==,
+ }
+ engines: { node: '>=6.9.0' }
'@eslint-community/eslint-utils@4.10.1':
- resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ resolution:
+ {
+ integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==,
+ }
+ engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
'@eslint-community/regexpp@4.12.2':
- resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
- engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ resolution:
+ {
+ integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==,
+ }
+ engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 }
'@eslint/config-array@0.23.5':
- resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ resolution:
+ {
+ integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==,
+ }
+ engines: { node: ^20.19.0 || ^22.13.0 || >=24 }
'@eslint/config-helpers@0.7.0':
- resolution: {integrity: sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ resolution:
+ {
+ integrity: sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==,
+ }
+ engines: { node: ^20.19.0 || ^22.13.0 || >=24 }
'@eslint/core@1.2.1':
- resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ resolution:
+ {
+ integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==,
+ }
+ engines: { node: ^20.19.0 || ^22.13.0 || >=24 }
'@eslint/js@10.0.1':
- resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ resolution:
+ {
+ integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==,
+ }
+ engines: { node: ^20.19.0 || ^22.13.0 || >=24 }
peerDependencies:
eslint: ^10.0.0
peerDependenciesMeta:
@@ -171,151 +241,238 @@ packages:
optional: true
'@eslint/object-schema@3.0.5':
- resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ resolution:
+ {
+ integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==,
+ }
+ engines: { node: ^20.19.0 || ^22.13.0 || >=24 }
'@eslint/plugin-kit@0.7.2':
- resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ resolution:
+ {
+ integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==,
+ }
+ engines: { node: ^20.19.0 || ^22.13.0 || >=24 }
'@humanfs/core@0.19.2':
- resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==}
- engines: {node: '>=18.18.0'}
+ resolution:
+ {
+ integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==,
+ }
+ engines: { node: '>=18.18.0' }
'@humanfs/node@0.16.8':
- resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==}
- engines: {node: '>=18.18.0'}
+ resolution:
+ {
+ integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==,
+ }
+ engines: { node: '>=18.18.0' }
'@humanfs/types@0.15.0':
- resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==}
- engines: {node: '>=18.18.0'}
+ resolution:
+ {
+ integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==,
+ }
+ engines: { node: '>=18.18.0' }
'@humanwhocodes/module-importer@1.0.1':
- resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
- engines: {node: '>=12.22'}
+ resolution:
+ {
+ integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==,
+ }
+ engines: { node: '>=12.22' }
'@humanwhocodes/retry@0.4.3':
- resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
- engines: {node: '>=18.18'}
+ resolution:
+ {
+ integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==,
+ }
+ engines: { node: '>=18.18' }
'@jridgewell/gen-mapping@0.3.13':
- resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+ resolution:
+ {
+ integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==,
+ }
'@jridgewell/remapping@2.3.5':
- resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+ resolution:
+ {
+ integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==,
+ }
'@jridgewell/resolve-uri@3.1.2':
- resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
- engines: {node: '>=6.0.0'}
+ resolution:
+ {
+ integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==,
+ }
+ engines: { node: '>=6.0.0' }
'@jridgewell/sourcemap-codec@1.6.0':
- resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==}
+ resolution:
+ {
+ integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==,
+ }
'@jridgewell/trace-mapping@0.3.31':
- resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ resolution:
+ {
+ integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==,
+ }
'@oxc-project/types@0.148.0':
- resolution: {integrity: sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==}
+ resolution:
+ {
+ integrity: sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==,
+ }
'@rolldown/binding-android-arm-eabi@1.2.7':
- resolution: {integrity: sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
cpu: [arm]
os: [android]
'@rolldown/binding-android-arm64@1.2.7':
- resolution: {integrity: sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
cpu: [arm64]
os: [android]
'@rolldown/binding-darwin-arm64@1.2.7':
- resolution: {integrity: sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
cpu: [arm64]
os: [darwin]
'@rolldown/binding-darwin-x64@1.2.7':
- resolution: {integrity: sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
cpu: [x64]
os: [darwin]
'@rolldown/binding-freebsd-x64@1.2.7':
- resolution: {integrity: sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
cpu: [x64]
os: [freebsd]
'@rolldown/binding-linux-arm-gnueabihf@1.2.7':
- resolution: {integrity: sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
cpu: [arm]
os: [linux]
'@rolldown/binding-linux-arm64-gnu@1.2.7':
- resolution: {integrity: sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
cpu: [arm64]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-arm64-musl@1.2.7':
- resolution: {integrity: sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
cpu: [arm64]
os: [linux]
libc: [musl]
'@rolldown/binding-linux-ppc64-gnu@1.2.7':
- resolution: {integrity: sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-s390x-gnu@1.2.7':
- resolution: {integrity: sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
cpu: [s390x]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-x64-gnu@1.2.7':
- resolution: {integrity: sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
cpu: [x64]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-x64-musl@1.2.7':
- resolution: {integrity: sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
cpu: [x64]
os: [linux]
libc: [musl]
'@rolldown/binding-openharmony-arm64@1.2.7':
- resolution: {integrity: sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
cpu: [arm64]
os: [openharmony]
'@rolldown/binding-win32-arm64-msvc@1.2.7':
- resolution: {integrity: sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
cpu: [arm64]
os: [win32]
'@rolldown/binding-win32-x64-msvc@1.2.7':
- resolution: {integrity: sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
cpu: [x64]
os: [win32]
'@rolldown/plugin-babel@0.2.3':
- resolution: {integrity: sha512-+zEk16yGlz1F9STiRr6uG9hmIXb6nprjLczV/htGptYuLoCuxb+itZ03RKCEeOhBpDDd1NU7qF6x1VLMUp62bw==}
- engines: {node: '>=22.12.0 || ^24.0.0'}
+ resolution:
+ {
+ integrity: sha512-+zEk16yGlz1F9STiRr6uG9hmIXb6nprjLczV/htGptYuLoCuxb+itZ03RKCEeOhBpDDd1NU7qF6x1VLMUp62bw==,
+ }
+ engines: { node: '>=22.12.0 || ^24.0.0' }
peerDependencies:
'@babel/core': ^7.29.0 || ^8.0.0-rc.1
'@babel/plugin-transform-runtime': ^7.29.0 || ^8.0.0-rc.1
@@ -331,10 +488,16 @@ packages:
optional: true
'@rolldown/pluginutils@1.0.1':
- resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==}
+ resolution:
+ {
+ integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==,
+ }
'@tanstack/eslint-plugin-query@5.102.8':
- resolution: {integrity: sha512-zRjG2PL3zvoqnsSNJFyfX5Mo+OwRwTbLERwZVO3oNQQn82V949INwaLrprzsOW/ivuow7gASeAUUC24xH7kwSQ==}
+ resolution:
+ {
+ integrity: sha512-zRjG2PL3zvoqnsSNJFyfX5Mo+OwRwTbLERwZVO3oNQQn82V949INwaLrprzsOW/ivuow7gASeAUUC24xH7kwSQ==,
+ }
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: ^5.6.0 || ^6.0.0 || ^7.0.0
@@ -343,107 +506,176 @@ packages:
optional: true
'@tanstack/query-core@5.102.8':
- resolution: {integrity: sha512-ZNjkJ33CqvPNec/6lZBnHqLc3EVGPZ9ySLhYahU9TcuRFdmwXewuj0c4hwSWcGHqEUwcSrKeZ+oGcvPBqXcQcg==}
+ resolution:
+ {
+ integrity: sha512-ZNjkJ33CqvPNec/6lZBnHqLc3EVGPZ9ySLhYahU9TcuRFdmwXewuj0c4hwSWcGHqEUwcSrKeZ+oGcvPBqXcQcg==,
+ }
'@tanstack/react-query@5.102.8':
- resolution: {integrity: sha512-TYBea4OuXWD7MhaSHq069TWbFe7rcwWN6kzT7JF0OKi1K6c1gTv2IzD6A6ExJsCMozdkqBWeuIUZmu4KQg0O5A==}
+ resolution:
+ {
+ integrity: sha512-TYBea4OuXWD7MhaSHq069TWbFe7rcwWN6kzT7JF0OKi1K6c1gTv2IzD6A6ExJsCMozdkqBWeuIUZmu4KQg0O5A==,
+ }
peerDependencies:
react: ^18 || ^19
'@types/babel__core@7.20.5':
- resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+ resolution:
+ {
+ integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==,
+ }
'@types/babel__generator@7.27.0':
- resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+ resolution:
+ {
+ integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==,
+ }
'@types/babel__template@7.4.4':
- resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+ resolution:
+ {
+ integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==,
+ }
'@types/babel__traverse@7.28.0':
- resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
+ resolution:
+ {
+ integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==,
+ }
'@types/esrecurse@4.3.1':
- resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
+ resolution:
+ {
+ integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==,
+ }
'@types/estree@1.0.9':
- resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
+ resolution:
+ {
+ integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==,
+ }
'@types/json-schema@7.0.15':
- resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ resolution:
+ {
+ integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==,
+ }
'@types/node@24.13.3':
- resolution: {integrity: sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==}
+ resolution:
+ {
+ integrity: sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==,
+ }
'@types/react-dom@19.2.6':
- resolution: {integrity: sha512-bzczc+lpPxs7hFBkaOht7j/zVcSZVBGZZajtQoMhTDTrwVCcNa+bd0+LfhDXhnEnT4OHHFBE2jLTenVL+UzF7Q==}
+ resolution:
+ {
+ integrity: sha512-bzczc+lpPxs7hFBkaOht7j/zVcSZVBGZZajtQoMhTDTrwVCcNa+bd0+LfhDXhnEnT4OHHFBE2jLTenVL+UzF7Q==,
+ }
peerDependencies:
'@types/react': ^19.2.0
'@types/react@19.2.18':
- resolution: {integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==}
+ resolution:
+ {
+ integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==,
+ }
'@typescript-eslint/eslint-plugin@8.69.0':
- resolution: {integrity: sha512-t5jQTKPIgVW1PE6dR6H6Qz5gm8zjMlX5/2gRaOGd9eO6V7J+tQc6iWKukEe7dY8u9HyYasQ0yfF0/FSSTEO2gA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-t5jQTKPIgVW1PE6dR6H6Qz5gm8zjMlX5/2gRaOGd9eO6V7J+tQc6iWKukEe7dY8u9HyYasQ0yfF0/FSSTEO2gA==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
peerDependencies:
'@typescript-eslint/parser': ^8.69.0
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/parser@8.69.0':
- resolution: {integrity: sha512-l4b0DhWioGg6Gt2ebGlvfkFMOjRsauxtsnDRwUSRX1qHq3HdTfQHV8wW9zEXeciai6HfeaKOedQn2Zoofx3WBw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-l4b0DhWioGg6Gt2ebGlvfkFMOjRsauxtsnDRwUSRX1qHq3HdTfQHV8wW9zEXeciai6HfeaKOedQn2Zoofx3WBw==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/project-service@8.69.0':
- resolution: {integrity: sha512-yi4obFrHMmnsesWehHbkg9zMA7Jt8cXT+mKM08G999pH1yT6nqgsHx7MYm0uY1wAj8CqiBXYRJ7WAT0QdQHQXg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-yi4obFrHMmnsesWehHbkg9zMA7Jt8cXT+mKM08G999pH1yT6nqgsHx7MYm0uY1wAj8CqiBXYRJ7WAT0QdQHQXg==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/scope-manager@8.69.0':
- resolution: {integrity: sha512-ewfspqWvSxKSOaplqAUNbaSFO0eB6w1EtQ+esfYFRm3614Ty4uNtExkcbgd6nWsXphbqKyf9ZYdbZdv2xEoWEQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-ewfspqWvSxKSOaplqAUNbaSFO0eB6w1EtQ+esfYFRm3614Ty4uNtExkcbgd6nWsXphbqKyf9ZYdbZdv2xEoWEQ==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
'@typescript-eslint/tsconfig-utils@8.69.0':
- resolution: {integrity: sha512-xNqK7YTDZsLniQMV/4rpFR8Z5JlqeRvVjuG1YgF/mdPVH84HSD19L8CczMA0qg2RfwEV231GHH3VnToJDo4MfQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-xNqK7YTDZsLniQMV/4rpFR8Z5JlqeRvVjuG1YgF/mdPVH84HSD19L8CczMA0qg2RfwEV231GHH3VnToJDo4MfQ==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/type-utils@8.69.0':
- resolution: {integrity: sha512-ZfoJAVg3JZndQEpEl9petVlxau3lRuElc4HRMuAlLCf8to04/iHz692RUSNmXKDjEuJmIL+KZ2/BsOcBc16dsA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-ZfoJAVg3JZndQEpEl9petVlxau3lRuElc4HRMuAlLCf8to04/iHz692RUSNmXKDjEuJmIL+KZ2/BsOcBc16dsA==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/types@8.69.0':
- resolution: {integrity: sha512-K3VrubUPhlo9VDBS6QdI8YB5j7ClpqLRdefcz6PFrhnwicehBweqQ9Evhl4l+FYz0HdDmMqIiSX0aldGRYtDCA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-K3VrubUPhlo9VDBS6QdI8YB5j7ClpqLRdefcz6PFrhnwicehBweqQ9Evhl4l+FYz0HdDmMqIiSX0aldGRYtDCA==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
'@typescript-eslint/typescript-estree@8.69.0':
- resolution: {integrity: sha512-AdFkgqck3Vudb/kWnxlyafU/4aBhHrbQ9locP2N4psXTy5mOBg0SHJumnLvx7r6g1gV4DKvUFwV2nJZBoqOD8w==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-AdFkgqck3Vudb/kWnxlyafU/4aBhHrbQ9locP2N4psXTy5mOBg0SHJumnLvx7r6g1gV4DKvUFwV2nJZBoqOD8w==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/utils@8.69.0':
- resolution: {integrity: sha512-tUbx60BBqQa31kXF5MCsOOLL5E/WzUuxIn7YpAvq+eaUlqvk8/NXnXMBNAdLCr0icjkzem7iUA5QqWHe/hJ1aw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-tUbx60BBqQa31kXF5MCsOOLL5E/WzUuxIn7YpAvq+eaUlqvk8/NXnXMBNAdLCr0icjkzem7iUA5QqWHe/hJ1aw==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/visitor-keys@8.69.0':
- resolution: {integrity: sha512-+rmdgPA+EXkNgKYvHvFfhrs35utXbwaC5PGpDquSXcoXQDKUA5UjV0LmTucG/4JXkM31BTu4TilHtrN8IVBe8w==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-+rmdgPA+EXkNgKYvHvFfhrs35utXbwaC5PGpDquSXcoXQDKUA5UjV0LmTucG/4JXkM31BTu4TilHtrN8IVBe8w==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
'@vitejs/plugin-react@6.1.1':
- resolution: {integrity: sha512-yxLaQV9gkhS8ezJqCM6+ndU7mDY6gqAg75NQ+0IjwEI8IYOmQCgkRwHKVSfWXW076DsqMo0Dk+0FK1U+M5RgFw==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-yxLaQV9gkhS8ezJqCM6+ndU7mDY6gqAg75NQ+0IjwEI8IYOmQCgkRwHKVSfWXW076DsqMo0Dk+0FK1U+M5RgFw==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
peerDependencies:
'@rolldown/plugin-babel': ^0.1.7 || ^0.2.0
babel-plugin-react-compiler: ^1.0.0
@@ -458,55 +690,94 @@ packages:
optional: true
acorn-jsx@5.3.2:
- resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ resolution:
+ {
+ integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==,
+ }
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
acorn@8.18.0:
- resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==}
- engines: {node: '>=0.4.0'}
+ resolution:
+ {
+ integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==,
+ }
+ engines: { node: '>=0.4.0' }
hasBin: true
ajv@6.15.0:
- resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==}
+ resolution:
+ {
+ integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==,
+ }
babel-plugin-react-compiler@1.0.0:
- resolution: {integrity: sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==}
+ resolution:
+ {
+ integrity: sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==,
+ }
balanced-match@4.0.4:
- resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
- engines: {node: 18 || 20 || >=22}
+ resolution:
+ {
+ integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==,
+ }
+ engines: { node: 18 || 20 || >=22 }
baseline-browser-mapping@2.11.20:
- resolution: {integrity: sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw==}
- engines: {node: '>=6.0.0'}
+ resolution:
+ {
+ integrity: sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw==,
+ }
+ engines: { node: '>=6.0.0' }
hasBin: true
brace-expansion@5.0.9:
- resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==}
- engines: {node: 20 || >=22}
+ resolution:
+ {
+ integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==,
+ }
+ engines: { node: 20 || >=22 }
browserslist@4.28.8:
- resolution: {integrity: sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ resolution:
+ {
+ integrity: sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==,
+ }
+ engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 }
hasBin: true
caniuse-lite@1.0.30001810:
- resolution: {integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==}
+ resolution:
+ {
+ integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==,
+ }
convert-source-map@2.0.0:
- resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+ resolution:
+ {
+ integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==,
+ }
cross-spawn@7.0.6:
- resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
- engines: {node: '>= 8'}
+ resolution:
+ {
+ integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==,
+ }
+ engines: { node: '>= 8' }
csstype@3.2.3:
- resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+ resolution:
+ {
+ integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==,
+ }
debug@4.4.3:
- resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
- engines: {node: '>=6.0'}
+ resolution:
+ {
+ integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==,
+ }
+ engines: { node: '>=6.0' }
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
@@ -514,49 +785,91 @@ packages:
optional: true
deep-is@0.1.4:
- resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ resolution:
+ {
+ integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==,
+ }
detect-libc@2.1.2:
- resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==,
+ }
+ engines: { node: '>=8' }
electron-to-chromium@1.5.420:
- resolution: {integrity: sha512-2yD6XreGusOfNV+dUcvipJEXc3n/n7fgr7996aszTG+YY5E4mqM4tOq/3uhP129cazL9YHbVWSpc79ePotWtPA==}
+ resolution:
+ {
+ integrity: sha512-2yD6XreGusOfNV+dUcvipJEXc3n/n7fgr7996aszTG+YY5E4mqM4tOq/3uhP129cazL9YHbVWSpc79ePotWtPA==,
+ }
escalade@3.2.0:
- resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
- engines: {node: '>=6'}
+ resolution:
+ {
+ integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==,
+ }
+ engines: { node: '>=6' }
escape-string-regexp@4.0.0:
- resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==,
+ }
+ engines: { node: '>=10' }
+
+ eslint-config-prettier@10.1.8:
+ resolution:
+ {
+ integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==,
+ }
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
eslint-plugin-react-hooks@7.1.1:
- resolution: {integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==}
- engines: {node: '>=18'}
+ resolution:
+ {
+ integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==,
+ }
+ engines: { node: '>=18' }
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0
eslint-plugin-react-refresh@0.5.6:
- resolution: {integrity: sha512-uZnh24On2bk478AkaDAKcpRiYhS3qFSaSNvpXxV6/Ek/BBDICkWGG7MnBSfjnIlCVBei5vsLlIeQYxbF22+Udg==}
+ resolution:
+ {
+ integrity: sha512-uZnh24On2bk478AkaDAKcpRiYhS3qFSaSNvpXxV6/Ek/BBDICkWGG7MnBSfjnIlCVBei5vsLlIeQYxbF22+Udg==,
+ }
peerDependencies:
eslint: ^9 || ^10
eslint-scope@9.1.2:
- resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ resolution:
+ {
+ integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==,
+ }
+ engines: { node: ^20.19.0 || ^22.13.0 || >=24 }
eslint-visitor-keys@3.4.3:
- resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ resolution:
+ {
+ integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==,
+ }
+ engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
eslint-visitor-keys@5.0.1:
- resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ resolution:
+ {
+ integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==,
+ }
+ engines: { node: ^20.19.0 || ^22.13.0 || >=24 }
eslint@10.9.1:
- resolution: {integrity: sha512-9VaAkDURekixUQJy0oJYl2DcN6oKMfxay7XzaGYAWQwsb6qfKf+x76R2k1L8kb1boc+FyCAaTA9GmiKaaiaF+A==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ resolution:
+ {
+ integrity: sha512-9VaAkDURekixUQJy0oJYl2DcN6oKMfxay7XzaGYAWQwsb6qfKf+x76R2k1L8kb1boc+FyCAaTA9GmiKaaiaF+A==,
+ }
+ engines: { node: ^20.19.0 || ^22.13.0 || >=24 }
hasBin: true
peerDependencies:
jiti: '*'
@@ -565,37 +878,64 @@ packages:
optional: true
espree@11.2.0:
- resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ resolution:
+ {
+ integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==,
+ }
+ engines: { node: ^20.19.0 || ^22.13.0 || >=24 }
esquery@1.7.0:
- resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
- engines: {node: '>=0.10'}
+ resolution:
+ {
+ integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==,
+ }
+ engines: { node: '>=0.10' }
esrecurse@4.3.0:
- resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
- engines: {node: '>=4.0'}
+ resolution:
+ {
+ integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==,
+ }
+ engines: { node: '>=4.0' }
estraverse@5.3.0:
- resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
- engines: {node: '>=4.0'}
+ resolution:
+ {
+ integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==,
+ }
+ engines: { node: '>=4.0' }
esutils@2.0.3:
- resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==,
+ }
+ engines: { node: '>=0.10.0' }
fast-deep-equal@3.1.3:
- resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ resolution:
+ {
+ integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==,
+ }
fast-json-stable-stringify@2.1.0:
- resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+ resolution:
+ {
+ integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==,
+ }
fast-levenshtein@2.0.6:
- resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ resolution:
+ {
+ integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==,
+ }
fdir@6.5.0:
- resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
- engines: {node: '>=12.0.0'}
+ resolution:
+ {
+ integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==,
+ }
+ engines: { node: '>=12.0.0' }
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
@@ -603,313 +943,534 @@ packages:
optional: true
file-entry-cache@8.0.0:
- resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
- engines: {node: '>=16.0.0'}
+ resolution:
+ {
+ integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==,
+ }
+ engines: { node: '>=16.0.0' }
find-up@5.0.0:
- resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==,
+ }
+ engines: { node: '>=10' }
flat-cache@4.0.1:
- resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
- engines: {node: '>=16'}
+ resolution:
+ {
+ integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==,
+ }
+ engines: { node: '>=16' }
flatted@3.4.4:
- resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==}
+ resolution:
+ {
+ integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==,
+ }
fsevents@2.3.3:
- resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ resolution:
+ {
+ integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==,
+ }
+ engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 }
os: [darwin]
gensync@1.0.0-beta.2:
- resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
- engines: {node: '>=6.9.0'}
+ resolution:
+ {
+ integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==,
+ }
+ engines: { node: '>=6.9.0' }
glob-parent@6.0.2:
- resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
- engines: {node: '>=10.13.0'}
+ resolution:
+ {
+ integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==,
+ }
+ engines: { node: '>=10.13.0' }
globals@17.12.0:
- resolution: {integrity: sha512-cezEd/DTyyht9cvSSURyygXPfy04GtWO/5e6ZPvH7fCtjKz9PYOmuawphw1Ctd1f6C+5JypXfGD7ahNMXvevBA==}
- engines: {node: '>=18'}
+ resolution:
+ {
+ integrity: sha512-cezEd/DTyyht9cvSSURyygXPfy04GtWO/5e6ZPvH7fCtjKz9PYOmuawphw1Ctd1f6C+5JypXfGD7ahNMXvevBA==,
+ }
+ engines: { node: '>=18' }
hermes-estree@0.25.1:
- resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==}
+ resolution:
+ {
+ integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==,
+ }
hermes-parser@0.25.1:
- resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==}
+ resolution:
+ {
+ integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==,
+ }
ignore@5.3.2:
- resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
- engines: {node: '>= 4'}
+ resolution:
+ {
+ integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==,
+ }
+ engines: { node: '>= 4' }
ignore@7.0.8:
- resolution: {integrity: sha512-YYNsSlXBjMk92SKnkwvB5LOVSa6OznlFUGcsvrFgNJbJCd0M1XKeFVRc8ZByeCqz32FivYNHJVooLmdqrmvp/Q==}
- engines: {node: '>= 4'}
+ resolution:
+ {
+ integrity: sha512-YYNsSlXBjMk92SKnkwvB5LOVSa6OznlFUGcsvrFgNJbJCd0M1XKeFVRc8ZByeCqz32FivYNHJVooLmdqrmvp/Q==,
+ }
+ engines: { node: '>= 4' }
imurmurhash@0.1.4:
- resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
- engines: {node: '>=0.8.19'}
+ resolution:
+ {
+ integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==,
+ }
+ engines: { node: '>=0.8.19' }
is-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==,
+ }
+ engines: { node: '>=0.10.0' }
is-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==,
+ }
+ engines: { node: '>=0.10.0' }
isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ resolution:
+ {
+ integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==,
+ }
js-tokens@4.0.0:
- resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ resolution:
+ {
+ integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==,
+ }
jsesc@3.1.0:
- resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
- engines: {node: '>=6'}
+ resolution:
+ {
+ integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==,
+ }
+ engines: { node: '>=6' }
hasBin: true
json-buffer@3.0.1:
- resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+ resolution:
+ {
+ integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==,
+ }
json-schema-traverse@0.4.1:
- resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ resolution:
+ {
+ integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==,
+ }
json-stable-stringify-without-jsonify@1.0.1:
- resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ resolution:
+ {
+ integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==,
+ }
json5@2.2.3:
- resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
- engines: {node: '>=6'}
+ resolution:
+ {
+ integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==,
+ }
+ engines: { node: '>=6' }
hasBin: true
keyv@4.5.4:
- resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ resolution:
+ {
+ integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==,
+ }
levn@0.4.1:
- resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
- engines: {node: '>= 0.8.0'}
+ resolution:
+ {
+ integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==,
+ }
+ engines: { node: '>= 0.8.0' }
lightningcss-android-arm64@1.33.0:
- resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==}
- engines: {node: '>= 12.0.0'}
+ resolution:
+ {
+ integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==,
+ }
+ engines: { node: '>= 12.0.0' }
cpu: [arm64]
os: [android]
lightningcss-darwin-arm64@1.33.0:
- resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==}
- engines: {node: '>= 12.0.0'}
+ resolution:
+ {
+ integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==,
+ }
+ engines: { node: '>= 12.0.0' }
cpu: [arm64]
os: [darwin]
lightningcss-darwin-x64@1.33.0:
- resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==}
- engines: {node: '>= 12.0.0'}
+ resolution:
+ {
+ integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==,
+ }
+ engines: { node: '>= 12.0.0' }
cpu: [x64]
os: [darwin]
lightningcss-freebsd-x64@1.33.0:
- resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==}
- engines: {node: '>= 12.0.0'}
+ resolution:
+ {
+ integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==,
+ }
+ engines: { node: '>= 12.0.0' }
cpu: [x64]
os: [freebsd]
lightningcss-linux-arm-gnueabihf@1.33.0:
- resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==}
- engines: {node: '>= 12.0.0'}
+ resolution:
+ {
+ integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==,
+ }
+ engines: { node: '>= 12.0.0' }
cpu: [arm]
os: [linux]
lightningcss-linux-arm64-gnu@1.33.0:
- resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==}
- engines: {node: '>= 12.0.0'}
+ resolution:
+ {
+ integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==,
+ }
+ engines: { node: '>= 12.0.0' }
cpu: [arm64]
os: [linux]
libc: [glibc]
lightningcss-linux-arm64-musl@1.33.0:
- resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==}
- engines: {node: '>= 12.0.0'}
+ resolution:
+ {
+ integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==,
+ }
+ engines: { node: '>= 12.0.0' }
cpu: [arm64]
os: [linux]
libc: [musl]
lightningcss-linux-x64-gnu@1.33.0:
- resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==}
- engines: {node: '>= 12.0.0'}
+ resolution:
+ {
+ integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==,
+ }
+ engines: { node: '>= 12.0.0' }
cpu: [x64]
os: [linux]
libc: [glibc]
lightningcss-linux-x64-musl@1.33.0:
- resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==}
- engines: {node: '>= 12.0.0'}
+ resolution:
+ {
+ integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==,
+ }
+ engines: { node: '>= 12.0.0' }
cpu: [x64]
os: [linux]
libc: [musl]
lightningcss-win32-arm64-msvc@1.33.0:
- resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==}
- engines: {node: '>= 12.0.0'}
+ resolution:
+ {
+ integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==,
+ }
+ engines: { node: '>= 12.0.0' }
cpu: [arm64]
os: [win32]
lightningcss-win32-x64-msvc@1.33.0:
- resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==}
- engines: {node: '>= 12.0.0'}
+ resolution:
+ {
+ integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==,
+ }
+ engines: { node: '>= 12.0.0' }
cpu: [x64]
os: [win32]
lightningcss@1.33.0:
- resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==}
- engines: {node: '>= 12.0.0'}
+ resolution:
+ {
+ integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==,
+ }
+ engines: { node: '>= 12.0.0' }
locate-path@6.0.0:
- resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==,
+ }
+ engines: { node: '>=10' }
lru-cache@5.1.1:
- resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+ resolution:
+ {
+ integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==,
+ }
minimatch@10.2.6:
- resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==}
- engines: {node: 18 || 20 || >=22}
+ resolution:
+ {
+ integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==,
+ }
+ engines: { node: 18 || 20 || >=22 }
ms@2.1.3:
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ resolution:
+ {
+ integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==,
+ }
nanoid@3.3.18:
- resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ resolution:
+ {
+ integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==,
+ }
+ engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 }
hasBin: true
natural-compare@1.4.0:
- resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ resolution:
+ {
+ integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==,
+ }
node-releases@2.0.54:
- resolution: {integrity: sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==}
- engines: {node: '>=18'}
+ resolution:
+ {
+ integrity: sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==,
+ }
+ engines: { node: '>=18' }
optionator@0.9.4:
- resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
- engines: {node: '>= 0.8.0'}
+ resolution:
+ {
+ integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==,
+ }
+ engines: { node: '>= 0.8.0' }
p-limit@3.1.0:
- resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==,
+ }
+ engines: { node: '>=10' }
p-locate@5.0.0:
- resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==,
+ }
+ engines: { node: '>=10' }
path-exists@4.0.0:
- resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==,
+ }
+ engines: { node: '>=8' }
path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==,
+ }
+ engines: { node: '>=8' }
picocolors@1.1.1:
- resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+ resolution:
+ {
+ integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==,
+ }
picomatch@4.0.7:
- resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==}
- engines: {node: '>=12'}
+ resolution:
+ {
+ integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==,
+ }
+ engines: { node: '>=12' }
postcss@8.5.27:
- resolution: {integrity: sha512-79Iho8QeYyooJ8e9lCRyTVlyTAkS/kXBYKff6TMzS3kEWGQ8Ds5UEtXpGrSUDLUWok6QTvxeYy0GO8fopHnaSA==}
- engines: {node: ^10 || ^12 || >=14}
+ resolution:
+ {
+ integrity: sha512-79Iho8QeYyooJ8e9lCRyTVlyTAkS/kXBYKff6TMzS3kEWGQ8Ds5UEtXpGrSUDLUWok6QTvxeYy0GO8fopHnaSA==,
+ }
+ engines: { node: ^10 || ^12 || >=14 }
prelude-ls@1.2.1:
- resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
- engines: {node: '>= 0.8.0'}
+ resolution:
+ {
+ integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==,
+ }
+ engines: { node: '>= 0.8.0' }
+
+ prettier@3.9.7:
+ resolution:
+ {
+ integrity: sha512-T3mF5P7HFzZVLDQuCUNtJj6WK1pcpLMweMNUVwGb01bLNkH9AkKxtZvmInw8K6bnn2O3d6/5RHl6zSHiBAD0Og==,
+ }
+ engines: { node: '>=14' }
+ hasBin: true
punycode@2.3.1:
- resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
- engines: {node: '>=6'}
+ resolution:
+ {
+ integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==,
+ }
+ engines: { node: '>=6' }
react-dom@19.2.8:
- resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==}
+ resolution:
+ {
+ integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==,
+ }
peerDependencies:
react: ^19.2.8
react@19.2.8:
- resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==,
+ }
+ engines: { node: '>=0.10.0' }
rolldown@1.2.7:
- resolution: {integrity: sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
hasBin: true
scheduler@0.27.0:
- resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
+ resolution:
+ {
+ integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==,
+ }
semver@6.3.1:
- resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ resolution:
+ {
+ integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==,
+ }
hasBin: true
semver@7.8.5:
- resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==,
+ }
+ engines: { node: '>=10' }
hasBin: true
shebang-command@2.0.0:
- resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==,
+ }
+ engines: { node: '>=8' }
shebang-regex@3.0.0:
- resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==,
+ }
+ engines: { node: '>=8' }
source-map-js@1.2.1:
- resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==,
+ }
+ engines: { node: '>=0.10.0' }
tinyglobby@0.2.17:
- resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
- engines: {node: '>=12.0.0'}
+ resolution:
+ {
+ integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==,
+ }
+ engines: { node: '>=12.0.0' }
ts-api-utils@2.5.0:
- resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==}
- engines: {node: '>=18.12'}
+ resolution:
+ {
+ integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==,
+ }
+ engines: { node: '>=18.12' }
peerDependencies:
typescript: '>=4.8.4'
type-check@0.4.0:
- resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
- engines: {node: '>= 0.8.0'}
+ resolution:
+ {
+ integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==,
+ }
+ engines: { node: '>= 0.8.0' }
typescript-eslint@8.69.0:
- resolution: {integrity: sha512-B3MltX0VqjUBNEe3b3sSuiRbfa6XrfHFtBiPamjT5AsW/dfq+y+bc0wyuS9DxAS1LyzCxRp2+rxzpLUvqM2BvA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-B3MltX0VqjUBNEe3b3sSuiRbfa6XrfHFtBiPamjT5AsW/dfq+y+bc0wyuS9DxAS1LyzCxRp2+rxzpLUvqM2BvA==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
typescript@6.0.3:
- resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==}
- engines: {node: '>=14.17'}
+ resolution:
+ {
+ integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==,
+ }
+ engines: { node: '>=14.17' }
hasBin: true
undici-types@7.18.2:
- resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
+ resolution:
+ {
+ integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==,
+ }
update-browserslist-db@1.3.2:
- resolution: {integrity: sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==}
+ resolution:
+ {
+ integrity: sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==,
+ }
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
uri-js@4.4.1:
- resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ resolution:
+ {
+ integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==,
+ }
vite@8.2.2:
- resolution: {integrity: sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ resolution:
+ {
+ integrity: sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==,
+ }
+ engines: { node: ^20.19.0 || >=22.12.0 }
hasBin: true
peerDependencies:
'@types/node': ^20.19.0 || >=22.12.0
@@ -951,32 +1512,49 @@ packages:
optional: true
which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
+ resolution:
+ {
+ integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==,
+ }
+ engines: { node: '>= 8' }
hasBin: true
word-wrap@1.2.5:
- resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==,
+ }
+ engines: { node: '>=0.10.0' }
yallist@3.1.1:
- resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ resolution:
+ {
+ integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==,
+ }
yocto-queue@0.1.0:
- resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==,
+ }
+ engines: { node: '>=10' }
zod-validation-error@4.0.2:
- resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==}
- engines: {node: '>=18.0.0'}
+ resolution:
+ {
+ integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==,
+ }
+ engines: { node: '>=18.0.0' }
peerDependencies:
zod: ^3.25.0 || ^4.0.0
zod@4.5.4:
- resolution: {integrity: sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==}
+ resolution:
+ {
+ integrity: sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==,
+ }
snapshots:
-
'@babel/code-frame@7.29.7':
dependencies:
'@babel/helper-validator-identifier': 7.29.7
@@ -1416,6 +1994,10 @@ snapshots:
escape-string-regexp@4.0.0: {}
+ eslint-config-prettier@10.1.8(eslint@10.9.1):
+ dependencies:
+ eslint: 10.9.1
+
eslint-plugin-react-hooks@7.1.1(eslint@10.9.1):
dependencies:
'@babel/core': 7.29.7
@@ -1675,6 +2257,8 @@ snapshots:
prelude-ls@1.2.1: {}
+ prettier@3.9.7: {}
+
punycode@2.3.1: {}
react-dom@19.2.8(react@19.2.8):
diff --git a/src/App.css b/src/App.css
index 41a52fe..256a030 100644
--- a/src/App.css
+++ b/src/App.css
@@ -183,17 +183,16 @@
}
}
-
.page {
- display: flex; /* legger barna (aside + main) side om side i stedet for stablet */
- align-items: flex-start; /* gjør at sidebaren ikke strekker seg like høy som main automatisk */
- gap: 24px; /* luft mellom sidebar og hovedinnhold, juster selv */
+ display: flex; /* legger barna (aside + main) side om side i stedet for stablet */
+ align-items: flex-start; /* gjør at sidebaren ikke strekker seg like høy som main automatisk */
+ gap: 24px; /* luft mellom sidebar og hovedinnhold, juster selv */
padding-top: 32px;
- padding-left:24px;
+ padding-left: 24px;
}
.page > main {
- flex: 2 1 0; /* 2 deler av 4 = 2/4 (halvparten) av siden */
+ flex: 2 1 0; /* 2 deler av 4 = 2/4 (halvparten) av siden */
min-width: 0;
}
@@ -203,7 +202,7 @@
@media (max-width: 700px) {
.page {
- flex-direction: column; /* sidebar havner over main i stedet for ved siden av */
+ flex-direction: column; /* sidebar havner over main i stedet for ved siden av */
padding-top: 16px;
padding-left: 16px;
padding-right: 16px;
@@ -211,10 +210,10 @@
}
.page > main {
- padding-bottom: 72px; /* plass til bunnlinja - uten den havner siste filmkort bak den */
+ padding-bottom: 72px; /* plass til bunnlinja - uten den havner siste filmkort bak den */
}
.page > .page-spacer {
- display: none; /* en tom kolonne er bortkastet plass på mobil */
+ display: none; /* en tom kolonne er bortkastet plass på mobil */
}
}
diff --git a/src/App.tsx b/src/App.tsx
index 7f27788..954b8f7 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -19,40 +19,46 @@ import { Sidebar } from './components/Sidebar';
// Movie type, holder all informajson om en film
import type { Movie } from './types/tmdb';
-
import './App.css';
-
-
function App() {
// brukes for å kunne velge film å vise detaljer om
const [selectedMovie, setSelectedMovie] = useState(null);
// sorterings-funksjonalitet ?
- const [sortBy, setSortBy] = useSessionStorage('sortBy', 'popularity');
+ const [sortBy, setSortBy] = useSessionStorage(
+ 'sortBy',
+ 'popularity',
+ );
const [minRating, setMinRating] = useSessionStorage('minRating', 0);
// search query var setter
//const [query, setQuery] = useState('');
const [query, setQuery] = useSessionStorage('query', '');
const debouncedQuery = useDebouncedValue(query, 400);
- const search = useSearchMovies(debouncedQuery)
+ const search = useSearchMovies(debouncedQuery);
const isSearching = query.trim().length > 0;
// lagre search querys for hele session (inc. reload)
// favorite-funksjonalitet
- const { isFavorite, toggleFavorite, favoriteIds} = useFavorites();
+ const { isFavorite, toggleFavorite, favoriteIds } = useFavorites();
//styrer hvilken visning som vises
- const [view, setView] = useSessionStorage<'hjem' | 'favoritter'>('view', 'hjem');
+ const [view, setView] = useSessionStorage<'hjem' | 'favoritter'>(
+ 'view',
+ 'hjem',
+ );
return (
-
-
-
-
-
+
+
+
{isSearching ? (
-
+
) : view === 'favoritter' ? (
+ />
) : (
-
+
)}
{selectedMovie && (
- setSelectedMovie(null)} />
+ setSelectedMovie(null)}
+ />
)}
diff --git a/src/api/tmdb.ts b/src/api/tmdb.ts
index b0bfde3..1ce7cc6 100644
--- a/src/api/tmdb.ts
+++ b/src/api/tmdb.ts
@@ -1,4 +1,9 @@
-import type { Movie, Person, TmdbResponse, CreditsResponse } from '../types/tmdb';
+import type {
+ Movie,
+ Person,
+ TmdbResponse,
+ CreditsResponse,
+} from '../types/tmdb';
// TOKEN er lagret i root/.env.local, denne må alle legge til manuelt selv
// og så må vi finne en løsning for å ha den tilgjengelig på serveren når vi
@@ -22,19 +27,31 @@ async function tmdbFetch(path: string, errorMessage: string): Promise {
}
export function fetchPopularMovies(): Promise> {
- return tmdbFetch('/movie/popular?language=en-US&page=1', 'Klarte ikke hente populære filmer...');
+ return tmdbFetch(
+ '/movie/popular?language=en-US&page=1',
+ 'Klarte ikke hente populære filmer...',
+ );
}
export function fetchCurrentMovies(): Promise> {
- return tmdbFetch('/movie/now_playing?language=en-US&page=1', 'Klarte ikke hente aktuelle filmer...');
+ return tmdbFetch(
+ '/movie/now_playing?language=en-US&page=1',
+ 'Klarte ikke hente aktuelle filmer...',
+ );
}
export function fetchPopularPeople(): Promise> {
- return tmdbFetch('/person/popular?language=en-US&page=1', 'Klarte ikke hente skuespillere...');
+ return tmdbFetch(
+ '/person/popular?language=en-US&page=1',
+ 'Klarte ikke hente skuespillere...',
+ );
}
export function fetchSearchMovies(query: string): Promise> {
- return tmdbFetch(`/search/movie?query=${encodeURIComponent(query)}&language=en-US&page=1`, 'Søket feilet...');
+ return tmdbFetch(
+ `/search/movie?query=${encodeURIComponent(query)}&language=en-US&page=1`,
+ 'Søket feilet...',
+ );
}
export function fetchMovieCredits(movieId: number): Promise {
@@ -45,7 +62,8 @@ export function fetchMovieCredits(movieId: number): Promise {
}
export function fetchMovieById(movieId: number): Promise {
- return tmdbFetch(`/movie/${movieId}?language=en-US`, 'Klarte ikke hente film...');
+ return tmdbFetch(
+ `/movie/${movieId}?language=en-US`,
+ 'Klarte ikke hente film...',
+ );
}
-
-
diff --git a/src/components/FavoriteButton.css b/src/components/FavoriteButton.css
index b6e64b4..87f70e4 100644
--- a/src/components/FavoriteButton.css
+++ b/src/components/FavoriteButton.css
@@ -6,4 +6,4 @@
line-height: 1;
font-size: 1.5rem;
color: #f90404;
-}
\ No newline at end of file
+}
diff --git a/src/components/FavoriteButton.tsx b/src/components/FavoriteButton.tsx
index 7914085..da7973d 100644
--- a/src/components/FavoriteButton.tsx
+++ b/src/components/FavoriteButton.tsx
@@ -1,6 +1,6 @@
-import type { Movie } from "../types/tmdb";
+import type { Movie } from '../types/tmdb';
-import "./FavoriteButton.css";
+import './FavoriteButton.css';
type FavoriteButtonProps = {
movie: Movie;
@@ -9,19 +9,28 @@ type FavoriteButtonProps = {
onToggleFavorite: (id: number) => void;
};
-export function FavoriteButton({ movie, className, isFavorite, onToggleFavorite }: FavoriteButtonProps) {
+export function FavoriteButton({
+ movie,
+ className,
+ isFavorite,
+ onToggleFavorite,
+}: FavoriteButtonProps) {
return (
{
e.stopPropagation();
onToggleFavorite(movie.id);
}}
>
- {isFavorite ? "♥" : "♡"}
+ {isFavorite ? '♥' : '♡'}
);
-}
\ No newline at end of file
+}
diff --git a/src/components/MovieCard.css b/src/components/MovieCard.css
index a99168f..c84b12b 100644
--- a/src/components/MovieCard.css
+++ b/src/components/MovieCard.css
@@ -7,7 +7,9 @@
border-radius: 10px;
overflow: hidden;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
- transition: transform 0.15s ease, box-shadow 0.15s ease;
+ transition:
+ transform 0.15s ease,
+ box-shadow 0.15s ease;
cursor: pointer;
}
@@ -105,4 +107,4 @@
.movie-card__info {
padding-right: 3rem;
}
-}
\ No newline at end of file
+}
diff --git a/src/components/MovieCard.tsx b/src/components/MovieCard.tsx
index 204eea3..fd31064 100644
--- a/src/components/MovieCard.tsx
+++ b/src/components/MovieCard.tsx
@@ -1,7 +1,7 @@
-import { useMovieCredits } from "../hooks/useMovieCredits";
-import type { Movie } from "../types/tmdb";
-import { FavoriteButton } from "./FavoriteButton";
-import "./MovieCard.css";
+import { useMovieCredits } from '../hooks/useMovieCredits';
+import type { Movie } from '../types/tmdb';
+import { FavoriteButton } from './FavoriteButton';
+import './MovieCard.css';
// Definerer hvilke props (data utenfra) komponenten forventer å motta,
// og hvilken type hver av dem skal ha.
@@ -24,7 +24,12 @@ interface MovieCardProps {
onSelectMovie: (movie: Movie) => void;
}
-function MovieCard({ movie, isFavorite, onToggleFavorite, onSelectMovie }: MovieCardProps) {
+function MovieCard({
+ movie,
+ isFavorite,
+ onToggleFavorite,
+ onSelectMovie,
+}: MovieCardProps) {
// Henter skuespillere for akkurat denne filmen når kortet vises
const { data: credits, isLoading } = useMovieCredits(movie.id);
@@ -32,21 +37,37 @@ function MovieCard({ movie, isFavorite, onToggleFavorite, onSelectMovie }: Movie
const topActors = credits?.cast.slice(0, 3) ?? [];
// TMDB sin vote_average går fra 0-10, vi ganger med 10 for å få prosent (0-100)
//const rating = Math.round(movie.vote_average * 10);
- const path = movie.poster_path?`https://image.tmdb.org/t/p/w200${movie.poster_path}`:"";
+ const path = movie.poster_path
+ ? `https://image.tmdb.org/t/p/w200${movie.poster_path}`
+ : '';
return (
- {onSelectMovie(movie) }}>
-
+
{
+ onSelectMovie(movie);
+ }}
+ >
+
-
★ {movie.vote_average.toFixed(1)}
+
+ ★ {movie.vote_average.toFixed(1)}
+
{movie.title}
- {isLoading &&
Laster skuespillere...
}
+ {isLoading && (
+
Laster skuespillere...
+ )}
{!isLoading && topActors.length > 0 && (
- {topActors.map((actor) => actor.name).join(", ")}
+ {topActors.map((actor) => actor.name).join(', ')}
)}
@@ -54,4 +75,4 @@ function MovieCard({ movie, isFavorite, onToggleFavorite, onSelectMovie }: Movie
);
}
-export default MovieCard;
\ No newline at end of file
+export default MovieCard;
diff --git a/src/components/MovieDetails.css b/src/components/MovieDetails.css
index b19ac2b..74a3761 100644
--- a/src/components/MovieDetails.css
+++ b/src/components/MovieDetails.css
@@ -8,7 +8,6 @@
z-index: 999;
}
-
.details-card {
position: relative;
width: 60vw;
diff --git a/src/components/MovieDetails.tsx b/src/components/MovieDetails.tsx
index 60abbda..3fd928b 100644
--- a/src/components/MovieDetails.tsx
+++ b/src/components/MovieDetails.tsx
@@ -1,7 +1,7 @@
-import { useMovieCredits } from "../hooks/useMovieCredits";
-import type { Movie } from "../types/tmdb";
-import { FavoriteButton } from "./FavoriteButton";
-import "./MovieDetails.css"
+import { useMovieCredits } from '../hooks/useMovieCredits';
+import type { Movie } from '../types/tmdb';
+import { FavoriteButton } from './FavoriteButton';
+import './MovieDetails.css';
type MovieDetailsProps = {
movie: Movie;
@@ -10,8 +10,12 @@ type MovieDetailsProps = {
onClose: () => void;
};
-export function MovieDetails({ movie, isFavorite, onToggleFavorite, onClose }: MovieDetailsProps) {
-
+export function MovieDetails({
+ movie,
+ isFavorite,
+ onToggleFavorite,
+ onClose,
+}: MovieDetailsProps) {
const { data: credits, isLoading } = useMovieCredits(movie.id);
return (
@@ -23,7 +27,9 @@ export function MovieDetails({ movie, isFavorite, onToggleFavorite, onClose }:
className="details-backdrop"
/>
-
✕
+
+ ✕
+
Skuespillere
- {isLoading &&
Laster skuespillere...
}
+ {isLoading && (
+
Laster skuespillere...
+ )}
{credits && (
-
{credits.cast.slice(0, 6).map((actor) => actor.name).join(", ")}
+
+ {credits.cast
+ .slice(0, 6)
+ .map((actor) => actor.name)
+ .join(', ')}
+
)}
);
-}
\ No newline at end of file
+}
diff --git a/src/components/MovieList.css b/src/components/MovieList.css
index ad44340..1d1006b 100644
--- a/src/components/MovieList.css
+++ b/src/components/MovieList.css
@@ -12,4 +12,4 @@
gap: 0.75rem;
padding: 1rem;
}
-}
\ No newline at end of file
+}
diff --git a/src/components/MovieList.tsx b/src/components/MovieList.tsx
index 5af9167..67c9f74 100644
--- a/src/components/MovieList.tsx
+++ b/src/components/MovieList.tsx
@@ -1,7 +1,7 @@
// Henter inn MovieCard-komponenten vår, slik at vi kan bruke den til å vise hver film.
-import MovieCard from "./MovieCard";
-import type { Movie } from "../types/tmdb";
-import "./MovieList.css";
+import MovieCard from './MovieCard';
+import type { Movie } from '../types/tmdb';
+import './MovieList.css';
// MovieList tar imot ferdig hentede filmer som prop og viser dem som en liste av MovieCard.
// Selve hentingen skjer via hookene i App.tsx, og Section håndterer laster- og feilmelding,
@@ -14,18 +14,23 @@ type MovieListProps = {
onSelectMovie: (movie: Movie) => void;
};
-export function MovieList({ movies, isFavorite, onToggleFavorite, onSelectMovie }: MovieListProps) {
+export function MovieList({
+ movies,
+ isFavorite,
+ onToggleFavorite,
+ onSelectMovie,
+}: MovieListProps) {
return (
// Ytre container for hele filmlisten, kan style'es med CSS senere
{movies.map((movie) => (
// .map() går gjennom hver film og returnerer én MovieCard per film.
// key={movie.id} er påkrevd av React for å holde styr på hvert element i lista.
-
/*
isFavorite={isFavorite(movie.id)}
@@ -34,4 +39,4 @@ export function MovieList({ movies, isFavorite, onToggleFavorite, onSelectMovie
))}
);
-}
\ No newline at end of file
+}
diff --git a/src/components/PersonList.tsx b/src/components/PersonList.tsx
index bd732d1..73db1d8 100644
--- a/src/components/PersonList.tsx
+++ b/src/components/PersonList.tsx
@@ -12,4 +12,4 @@ export function PersonList({ people }: PersonListProps) {
))}
);
-}
\ No newline at end of file
+}
diff --git a/src/components/SearchField.css b/src/components/SearchField.css
index 74a72b7..702dae6 100644
--- a/src/components/SearchField.css
+++ b/src/components/SearchField.css
@@ -10,8 +10,8 @@
width: 100%;
font-size: 18px;
padding: 8px 12px;
- box-sizing: border-box; /* padding regnes inn i bredden, så feltet ikke blir bredere enn sidebaren */
- border-radius: 10px; /* samme runding som filmkortene */
+ box-sizing: border-box; /* padding regnes inn i bredden, så feltet ikke blir bredere enn sidebaren */
+ border-radius: 10px; /* samme runding som filmkortene */
border: 1px solid var(--border);
}
@@ -27,4 +27,4 @@
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
-}
\ No newline at end of file
+}
diff --git a/src/components/SearchField.tsx b/src/components/SearchField.tsx
index e125767..442f2ef 100644
--- a/src/components/SearchField.tsx
+++ b/src/components/SearchField.tsx
@@ -29,4 +29,4 @@ export function SearchField({ value, onChange }: SearchFieldProps) {
/>
);
-}
\ No newline at end of file
+}
diff --git a/src/components/Section.css b/src/components/Section.css
index e5f7649..ce29c71 100644
--- a/src/components/Section.css
+++ b/src/components/Section.css
@@ -5,6 +5,10 @@
animation: shimmer 1.5s infinite;
}
@keyframes shimmer {
- 0% { background-position: 200% 0; }
- 100% { background-position: -200% 0; }
-}
\ No newline at end of file
+ 0% {
+ background-position: 200% 0;
+ }
+ 100% {
+ background-position: -200% 0;
+ }
+}
diff --git a/src/components/Section.tsx b/src/components/Section.tsx
index 5e347b4..0157a34 100644
--- a/src/components/Section.tsx
+++ b/src/components/Section.tsx
@@ -11,13 +11,22 @@ type SectionProps = {
skeletonHeight?: string;
};
-export function Section({ id, title, isLoading, error, children, skeletonHeight="300px"}: SectionProps) {
+export function Section({
+ id,
+ title,
+ isLoading,
+ error,
+ children,
+ skeletonHeight = '300px',
+}: SectionProps) {
return (
{title}
- {isLoading &&
}
+ {isLoading && (
+
+ )}
{error && Noe gikk galt: {error.message}
}
{!isLoading && !error && children}
);
-}
\ No newline at end of file
+}
diff --git a/src/components/Sidebar.css b/src/components/Sidebar.css
index b8e8909..716b65a 100644
--- a/src/components/Sidebar.css
+++ b/src/components/Sidebar.css
@@ -6,7 +6,7 @@ html {
.sidebar {
text-align: left;
flex: 0 0 300px;
- position: sticky; /* oppfører seg normalt til man scroller forbi "top"-grensen */
+ position: sticky; /* oppfører seg normalt til man scroller forbi "top"-grensen */
top: 24px;
}
@@ -22,7 +22,7 @@ html {
}
.sidebar-nav a {
- display: block; /* gjør hele raden klikkbar, ikke bare bokstavene */
+ display: block; /* gjør hele raden klikkbar, ikke bare bokstavene */
font-size: 17px;
padding: 10px 14px;
border-radius: 10px;
@@ -43,7 +43,7 @@ html {
/* HOME og pila ligger side om side i én boks */
.sidebar-nav__row {
display: flex;
- align-items: stretch; /* så delelinja går i full høyde */
+ align-items: stretch; /* så delelinja går i full høyde */
}
.sidebar-nav__home {
@@ -78,7 +78,7 @@ html {
outline-offset: 2px;
}
-.sidebar-nav__home[aria-current="page"] {
+.sidebar-nav__home[aria-current='page'] {
background: var(--accent-bg);
color: var(--accent);
}
@@ -88,7 +88,7 @@ html {
flex: none;
width: 44px;
border: none;
- border-left: 1px solid var(--border); /* den diskré delelinja mot HOME */
+ border-left: 1px solid var(--border); /* den diskré delelinja mot HOME */
border-radius: 0 10px 10px 0;
background: none;
color: var(--text-h);
@@ -99,13 +99,13 @@ html {
}
.sidebar-nav__toggle::after {
- content: "▾";
- display: inline-block; /* transform virker ikke på rene inline-elementer */
+ content: '▾';
+ display: inline-block; /* transform virker ikke på rene inline-elementer */
font-size: 13px;
transition: transform 0.2s ease;
}
-.sidebar-nav__toggle[aria-expanded="false"]::after {
+.sidebar-nav__toggle[aria-expanded='false']::after {
transform: rotate(-90deg);
}
@@ -116,14 +116,14 @@ html {
.sidebar-nav__toggle:focus-visible {
outline: 2px solid var(--accent);
- outline-offset: -2px; /* innover, så den ikke klippes av naboen */
+ outline-offset: -2px; /* innover, så den ikke klippes av naboen */
}
.sidebar-nav__sub {
list-style: none;
margin: 4px 0 0 20px;
padding-left: 10px;
- border-left: 2px solid var(--border); /* strek som binder punktene til HOME */
+ border-left: 2px solid var(--border); /* strek som binder punktene til HOME */
display: flex;
flex-direction: column;
gap: 2px;
@@ -142,14 +142,16 @@ html {
/* Trenger ingen media query: denne menyen rendres kun når skjermen er smal. */
.bottom-nav {
- position: fixed; /* låst til skjermen, ikke til siden - blir stående ved scroll */
+ position: fixed; /* låst til skjermen, ikke til siden - blir stående ved scroll */
bottom: 0;
left: 0;
right: 0;
z-index: 20;
background: var(--bg);
border-top: 1px solid var(--border);
- padding-bottom: env(safe-area-inset-bottom); /* plass til home-streken på iPhone */
+ padding-bottom: env(
+ safe-area-inset-bottom
+ ); /* plass til home-streken på iPhone */
}
.bottom-nav__list {
@@ -160,12 +162,12 @@ html {
}
.bottom-nav__list li {
- flex: 1; /* fire like brede knapper */
+ flex: 1; /* fire like brede knapper */
}
.bottom-nav__button {
width: 100%;
- min-height: 48px; /* godt over 44px-minstemålet for touch */
+ min-height: 48px; /* godt over 44px-minstemålet for touch */
font: inherit;
font-size: 13px;
padding: 10px 4px;
@@ -175,7 +177,7 @@ html {
cursor: pointer;
}
-.bottom-nav__button[aria-current="page"] {
+.bottom-nav__button[aria-current='page'] {
color: var(--accent);
font-weight: 600;
}
@@ -187,8 +189,8 @@ html {
@media (max-width: 700px) {
.sidebar {
- flex: none; /* nullstiller de 300px */
+ flex: none; /* nullstiller de 300px */
width: 100%;
- position: static; /* sticky gir ingen mening når den bare inneholder søkefeltet */
+ position: static; /* sticky gir ingen mening når den bare inneholder søkefeltet */
}
-}
\ No newline at end of file
+}
diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx
index 049be58..05bbd67 100644
--- a/src/components/Sidebar.tsx
+++ b/src/components/Sidebar.tsx
@@ -4,131 +4,145 @@ import { useMediaQuery } from '../hooks/useMediaQuery';
import './Sidebar.css';
type SidebarProps = {
- onSearch?: (query: string) => void;
- searchValue?: string;
- view: 'hjem' | 'favoritter';
- onViewChange: (view: 'hjem' | 'favoritter') => void;
+ onSearch?: (query: string) => void;
+ searchValue?: string;
+ view: 'hjem' | 'favoritter';
+ onViewChange: (view: 'hjem' | 'favoritter') => void;
};
// Underpunktene som vises under HOME på desktop
const sections = [
- { id: "populaere", label: "Populære filmer" },
- { id: "nye-filmer", label: "Kommende filmer" },
+ { id: 'populaere', label: 'Populære filmer' },
+ { id: 'nye-filmer', label: 'Kommende filmer' },
];
// Bunnlinja på mobil. Kortere etiketter, fordi fire knapper deler skjermbredden -
// på 390px blir det under 100px hver.
const mobileItems = [
- { id: "hjem", label: "Hjem" },
- { id: "populaere", label: "Populære" },
- { id: "nye-filmer", label: "Kommende" },
- { id: "favoritter", label: "Favoritter" },
+ { id: 'hjem', label: 'Hjem' },
+ { id: 'populaere', label: 'Populære' },
+ { id: 'nye-filmer', label: 'Kommende' },
+ { id: 'favoritter', label: 'Favoritter' },
];
-export function Sidebar({ onSearch, searchValue, view, onViewChange }: SidebarProps) {
- const [isOpen, setIsOpen] = useState(true);
- const isMobile = useMediaQuery('(max-width: 700px)');
+export function Sidebar({
+ onSearch,
+ searchValue,
+ view,
+ onViewChange,
+}: SidebarProps) {
+ const [isOpen, setIsOpen] = useState(true);
+ const isMobile = useMediaQuery('(max-width: 700px)');
- // Tømmer søket, bytter tilbake til hjem-visningen og scroller.
- // Timeouten venter til React har rendret seksjonene tilbake - de finnes
- // ikke i DOM-en mens søkeresultater eller favoritter vises.
- function goToSection(id: string) {
- onSearch?.('');
- onViewChange('hjem');
- setTimeout(() => {
- if (id === 'hjem') {
- window.scrollTo({ top: 0, behavior: 'smooth' });
- } else {
- document.getElementById(id)?.scrollIntoView({ behavior: 'smooth' });
- }
- }, 0);
- }
+ // Tømmer søket, bytter tilbake til hjem-visningen og scroller.
+ // Timeouten venter til React har rendret seksjonene tilbake - de finnes
+ // ikke i DOM-en mens søkeresultater eller favoritter vises.
+ function goToSection(id: string) {
+ onSearch?.('');
+ onViewChange('hjem');
+ setTimeout(() => {
+ if (id === 'hjem') {
+ window.scrollTo({ top: 0, behavior: 'smooth' });
+ } else {
+ document.getElementById(id)?.scrollIntoView({ behavior: 'smooth' });
+ }
+ }, 0);
+ }
- function goToFavorites() {
- onSearch?.('');
- onViewChange('favoritter');
- }
+ function goToFavorites() {
+ onSearch?.('');
+ onViewChange('favoritter');
+ }
- return (
-
+ return (
+
+ onSearch?.(v)} />
- onSearch?.(v)} />
-
- {isMobile ? (
- // Mobil: fast bunnlinje med fire flate knapper, innen tommelens rekkevidde
-
-
- {mobileItems.map((item) => (
-
- (item.id === 'favoritter' ? goToFavorites() : goToSection(item.id))}
- >
- {item.label}
-
-
- ))}
-
-
- ) : (
- // Desktop: HOME med utslåbar undermeny
-
-
-
-
- {/* HOME og pila er to separate knapper: HOME går til toppen,
+ {isMobile ? (
+ // Mobil: fast bunnlinje med fire flate knapper, innen tommelens rekkevidde
+
+
+ {mobileItems.map((item) => (
+
+
+ item.id === 'favoritter'
+ ? goToFavorites()
+ : goToSection(item.id)
+ }
+ >
+ {item.label}
+
+
+ ))}
+
+
+ ) : (
+ // Desktop: HOME med utslåbar undermeny
+
+
+
+ {/* HOME og pila er to separate knapper: HOME går til toppen,
pila åpner og lukker undermenyen. */}
-
-
goToSection('hjem')}
- >
- HOME
-
+
+ goToSection('hjem')}
+ >
+ HOME
+
- {/* aria-label er påkrevd her fordi knappen ikke har tekst i seg -
+ {/* aria-label er påkrevd her fordi knappen ikke har tekst i seg -
pila er tegnet i CSS, og CSS-innhold leses ikke opp. */}
- setIsOpen(!isOpen)}
- />
-
-
- {isOpen && (
-
- )}
-
+
setIsOpen(!isOpen)}
+ />
+
-
-
- FAVORITTER
-
-
+ {isOpen && (
+
+ )}
+
-
-
- )}
-
- );
-}
\ No newline at end of file
+
+
+ FAVORITTER
+
+
+
+
+ )}
+
+ );
+}
diff --git a/src/components/SortFilterBar.tsx b/src/components/SortFilterBar.tsx
index a174627..3f0159b 100644
--- a/src/components/SortFilterBar.tsx
+++ b/src/components/SortFilterBar.tsx
@@ -8,7 +8,12 @@ type SortFilterBarProps = {
onMinRatingChange: (value: number) => void;
};
-export function SortFilterBar({ sortBy, onSortChange, minRating, onMinRatingChange }: SortFilterBarProps) {
+export function SortFilterBar({
+ sortBy,
+ onSortChange,
+ minRating,
+ onMinRatingChange,
+}: SortFilterBarProps) {
return (
@@ -27,7 +32,8 @@ export function SortFilterBar({ sortBy, onSortChange, minRating, onMinRatingChan
- Min. vurdering {minRating}
+ Min. vurdering{' '}
+ {minRating}
void;
};
-export function TrendingPreview({ movies, onSelectMovie }: TrendingPreviewProps) {
+export function TrendingPreview({
+ movies,
+ onSelectMovie,
+}: TrendingPreviewProps) {
const [index, setIndex] = useState(0);
const [offset, setOffset] = useState(0);
const [transitioning, setTransitioning] = useState(false);
- const prevIndex = ( (index-1+movies.length) % movies.length );
- const nextIndex = ( (index+1) % movies.length );
+ const prevIndex = (index - 1 + movies.length) % movies.length;
+ const nextIndex = (index + 1) % movies.length;
const movie = movies[index];
- function handleClick( n: number ) {
- if (transitioning) { return; }
+ function handleClick(n: number) {
+ if (transitioning) {
+ return;
+ }
setTransitioning(true);
setOffset(-n);
setTimeout(() => {
- setIndex( (i) => ((i+n+movies.length) % movies.length) );
+ setIndex((i) => (i + n + movies.length) % movies.length);
setOffset(0);
setTransitioning(false);
}, 400);
@@ -38,40 +43,42 @@ export function TrendingPreview({ movies, onSelectMovie }: TrendingPreviewProps)
return () => clearInterval(timer);
}, [index, transitioning]);
- return (
+ return (
-
+
-
onSelectMovie(movie)}>{movie.title}
+
onSelectMovie(movie)}>
+ {movie.title}
+
handleClick(-1)}>
- {"❮"}
+ {'❮'}
-
-
onSelectMovie(movie)} />
+
+
onSelectMovie(movie)}
+ />
handleClick(1)}>
- {"❯"}
+ {'❯'}
);
-}
\ No newline at end of file
+}
diff --git a/src/hooks/useDebouncedValue.ts b/src/hooks/useDebouncedValue.ts
index 2b002fa..e27d35d 100644
--- a/src/hooks/useDebouncedValue.ts
+++ b/src/hooks/useDebouncedValue.ts
@@ -12,4 +12,4 @@ export function useDebouncedValue
(value: T, delay: number): T {
}, [value, delay]);
return debouncedValue;
-}
\ No newline at end of file
+}
diff --git a/src/hooks/useFavorites.ts b/src/hooks/useFavorites.ts
index e671f53..8a76cef 100644
--- a/src/hooks/useFavorites.ts
+++ b/src/hooks/useFavorites.ts
@@ -14,7 +14,7 @@ export function useFavorites() {
function toggleFavorite(id: number) {
setFavoriteIds((prev) =>
- prev.includes(id) ? prev.filter((favId) => favId !== id) : [...prev, id]
+ prev.includes(id) ? prev.filter((favId) => favId !== id) : [...prev, id],
);
}
@@ -22,4 +22,5 @@ export function useFavorites() {
return favoriteIds.includes(id);
}
-return { toggleFavorite, isFavorite, favoriteIds};}
+ return { toggleFavorite, isFavorite, favoriteIds };
+}
diff --git a/src/hooks/useMediaQuery.ts b/src/hooks/useMediaQuery.ts
index 317f1cb..d943c8d 100644
--- a/src/hooks/useMediaQuery.ts
+++ b/src/hooks/useMediaQuery.ts
@@ -10,7 +10,9 @@ import { useState, useEffect } from 'react';
export function useMediaQuery(query: string) {
// window.matchMedia er JavaScript-versjonen av en CSS media query.
// .matches er true eller false akkurat nå.
- const [matches, setMatches] = useState(() => window.matchMedia(query).matches);
+ const [matches, setMatches] = useState(
+ () => window.matchMedia(query).matches,
+ );
useEffect(() => {
const mql = window.matchMedia(query);
@@ -25,4 +27,4 @@ export function useMediaQuery(query: string) {
}, [query]);
return matches;
-}
\ No newline at end of file
+}
diff --git a/src/hooks/useMovieCredits.ts b/src/hooks/useMovieCredits.ts
index 5d399bb..836fac7 100644
--- a/src/hooks/useMovieCredits.ts
+++ b/src/hooks/useMovieCredits.ts
@@ -9,4 +9,4 @@ export function useMovieCredits(movieId: number) {
queryFn: () => fetchMovieCredits(movieId),
staleTime: 1000 * 60 * 60, // skuespillere endrer seg ikke ofte, cache 1 time
});
-}
\ No newline at end of file
+}
diff --git a/src/hooks/useMovies.ts b/src/hooks/useMovies.ts
index 6259d9c..c5b8bd7 100644
--- a/src/hooks/useMovies.ts
+++ b/src/hooks/useMovies.ts
@@ -1,13 +1,18 @@
// hooks/useMovies.ts
-import { useQuery, useQueries } from '@tanstack/react-query'
-import { fetchCurrentMovies, fetchPopularMovies, fetchSearchMovies, fetchMovieById } from '../api/tmdb'
+import { useQuery, useQueries } from '@tanstack/react-query';
+import {
+ fetchCurrentMovies,
+ fetchPopularMovies,
+ fetchSearchMovies,
+ fetchMovieById,
+} from '../api/tmdb';
export function usePopMovies() {
return useQuery({
queryKey: ['movies', 'popular'],
queryFn: fetchPopularMovies,
select: (data) => data.results,
- })
+ });
}
export function useCurMovies() {
@@ -15,7 +20,7 @@ export function useCurMovies() {
queryKey: ['movies', 'current'],
queryFn: fetchCurrentMovies,
select: (data) => data.results,
- })
+ });
}
export function useSearchMovies(query: string) {
@@ -24,7 +29,7 @@ export function useSearchMovies(query: string) {
queryFn: () => fetchSearchMovies(query),
enabled: query.trim().length > 0,
select: (data) => data.results,
- })
+ });
}
export function useFavoriteMovies(ids: number[]) {
@@ -33,11 +38,11 @@ export function useFavoriteMovies(ids: number[]) {
queryKey: ['movies', 'detail', id],
queryFn: () => fetchMovieById(id),
})),
- })
+ });
return {
movies: results.filter((r) => r.data).map((r) => r.data!),
isLoading: results.some((r) => r.isLoading),
error: results.find((r) => r.error)?.error ?? null,
- }
-}
\ No newline at end of file
+ };
+}
diff --git a/src/hooks/usePeople.ts b/src/hooks/usePeople.ts
index 6bccd4b..8839eb2 100644
--- a/src/hooks/usePeople.ts
+++ b/src/hooks/usePeople.ts
@@ -1,9 +1,9 @@
-import { useQuery } from '@tanstack/react-query'
-import { fetchPopularPeople } from '../api/tmdb'
+import { useQuery } from '@tanstack/react-query';
+import { fetchPopularPeople } from '../api/tmdb';
export function usePopularPeople() {
return useQuery({
queryKey: ['people', 'popular'],
queryFn: fetchPopularPeople,
- })
-}
\ No newline at end of file
+ });
+}
diff --git a/src/layout/FavoritesLayout.tsx b/src/layout/FavoritesLayout.tsx
index 1b8b703..86cc6c8 100644
--- a/src/layout/FavoritesLayout.tsx
+++ b/src/layout/FavoritesLayout.tsx
@@ -1,8 +1,11 @@
-import { Section } from "../components/Section";
-import { MovieList } from "../components/MovieList";
-import { useFavoriteMovies } from "../hooks/useMovies";
-import type { Movie } from "../types/tmdb";
-import { sortAndFilterMovies, type SortOption } from "../utils/sortAndFilterMovies";
+import { Section } from '../components/Section';
+import { MovieList } from '../components/MovieList';
+import { useFavoriteMovies } from '../hooks/useMovies';
+import type { Movie } from '../types/tmdb';
+import {
+ sortAndFilterMovies,
+ type SortOption,
+} from '../utils/sortAndFilterMovies';
type FavoritesLayoutProps = {
favoriteIds: number[];
@@ -13,17 +16,34 @@ type FavoritesLayoutProps = {
onSelectMovie: (movie: Movie) => void;
};
-export function FavoritesLayout({ favoriteIds, sortBy, minRating, isFavorite, toggleFavorite, onSelectMovie }: FavoritesLayoutProps) {
+export function FavoritesLayout({
+ favoriteIds,
+ sortBy,
+ minRating,
+ isFavorite,
+ toggleFavorite,
+ onSelectMovie,
+}: FavoritesLayoutProps) {
const { movies, isLoading, error } = useFavoriteMovies(favoriteIds);
const filteredMovies = sortAndFilterMovies(movies, sortBy, minRating);
return (
-
+
{filteredMovies.length > 0 ? (
-
+
) : (
Du har ingen favoritter ennå.
)}
);
-}
\ No newline at end of file
+}
diff --git a/src/layout/MainLayout.tsx b/src/layout/MainLayout.tsx
index 0e95337..0fd3fdb 100644
--- a/src/layout/MainLayout.tsx
+++ b/src/layout/MainLayout.tsx
@@ -1,40 +1,89 @@
-import { MovieList } from "../components/MovieList";
-import { PersonList } from "../components/PersonList";
-import { Section } from "../components/Section";
-import { TrendingPreview } from "../components/TrendingPreview";
-import { useCurMovies, usePopMovies } from "../hooks/useMovies";
-import { usePopularPeople } from "../hooks/usePeople";
-import type { Movie } from "../types/tmdb";
-import { sortAndFilterMovies, type SortOption } from "../utils/sortAndFilterMovies";
+import { MovieList } from '../components/MovieList';
+import { PersonList } from '../components/PersonList';
+import { Section } from '../components/Section';
+import { TrendingPreview } from '../components/TrendingPreview';
+import { useCurMovies, usePopMovies } from '../hooks/useMovies';
+import { usePopularPeople } from '../hooks/usePeople';
+import type { Movie } from '../types/tmdb';
+import {
+ sortAndFilterMovies,
+ type SortOption,
+} from '../utils/sortAndFilterMovies';
type MainLayoutProps = {
- sortBy: SortOption;
- minRating: number;
- isFavorite: (id: number) => boolean;
- toggleFavorite: (id: number) => void;
- onSelectMovie: (movie: Movie) => void;
-}
+ sortBy: SortOption;
+ minRating: number;
+ isFavorite: (id: number) => boolean;
+ toggleFavorite: (id: number) => void;
+ onSelectMovie: (movie: Movie) => void;
+};
// HomeSections.tsx
-export function MainLayout({ sortBy, minRating, isFavorite, toggleFavorite, onSelectMovie }: MainLayoutProps) {
+export function MainLayout({
+ sortBy,
+ minRating,
+ isFavorite,
+ toggleFavorite,
+ onSelectMovie,
+}: MainLayoutProps) {
const popular = usePopMovies();
const current = useCurMovies();
const people = usePopularPeople();
return (
<>
-
- {current.data && }
+
+ {current.data && (
+
+ )}
-
- {popular.data && }
+
+ {popular.data && (
+
+ )}
-
- {current.data && }
+
+ {current.data && (
+
+ )}
-
+
>
);
-}
\ No newline at end of file
+}
diff --git a/src/layout/SearchLayout.tsx b/src/layout/SearchLayout.tsx
index d6a12ac..44d7341 100644
--- a/src/layout/SearchLayout.tsx
+++ b/src/layout/SearchLayout.tsx
@@ -1,8 +1,11 @@
-import type { UseQueryResult } from "@tanstack/react-query";
-import type { Movie } from "../types/tmdb";
-import { Section } from "../components/Section";
-import { MovieList } from "../components/MovieList";
-import { sortAndFilterMovies, type SortOption } from "../utils/sortAndFilterMovies";
+import type { UseQueryResult } from '@tanstack/react-query';
+import type { Movie } from '../types/tmdb';
+import { Section } from '../components/Section';
+import { MovieList } from '../components/MovieList';
+import {
+ sortAndFilterMovies,
+ type SortOption,
+} from '../utils/sortAndFilterMovies';
type SearchSectionProps = {
query: string;
@@ -14,12 +17,30 @@ type SearchSectionProps = {
onSelectMovie: (movie: Movie) => void;
};
-export function SearchLayout({ query, search, sortBy, minRating, isFavorite, toggleFavorite, onSelectMovie }: SearchSectionProps) {
+export function SearchLayout({
+ query,
+ search,
+ sortBy,
+ minRating,
+ isFavorite,
+ toggleFavorite,
+ onSelectMovie,
+}: SearchSectionProps) {
return (
-
+
);
-}
\ No newline at end of file
+}
diff --git a/src/main.tsx b/src/main.tsx
index fbea0ce..66be0f3 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -1,10 +1,10 @@
-import { StrictMode } from 'react'
-import { createRoot } from 'react-dom/client'
-import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
-import './index.css'
-import App from './App.tsx'
+import { StrictMode } from 'react';
+import { createRoot } from 'react-dom/client';
+import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
+import './index.css';
+import App from './App.tsx';
-const queryClient = new QueryClient()
+const queryClient = new QueryClient();
createRoot(document.getElementById('root')!).render(
@@ -12,4 +12,4 @@ createRoot(document.getElementById('root')!).render(
,
-)
+);
diff --git a/src/types/tmdb.ts b/src/types/tmdb.ts
index 0563d0b..0a38136 100644
--- a/src/types/tmdb.ts
+++ b/src/types/tmdb.ts
@@ -55,4 +55,4 @@ export interface CastMember {
export interface CreditsResponse {
id: number;
cast: CastMember[];
-}
\ No newline at end of file
+}
diff --git a/src/utils/sortAndFilterMovies.ts b/src/utils/sortAndFilterMovies.ts
index cdbc60b..0738ea5 100644
--- a/src/utils/sortAndFilterMovies.ts
+++ b/src/utils/sortAndFilterMovies.ts
@@ -2,7 +2,11 @@ import type { Movie } from '../types/tmdb';
export type SortOption = 'popularity' | 'rating' | 'release_date' | 'title';
-export function sortAndFilterMovies(movies: Movie[], sortBy: SortOption, minRating: number): Movie[] {
+export function sortAndFilterMovies(
+ movies: Movie[],
+ sortBy: SortOption,
+ minRating: number,
+): Movie[] {
const filtered = movies.filter((m) => m.vote_average >= minRating);
const sorted = [...filtered];
@@ -11,7 +15,9 @@ export function sortAndFilterMovies(movies: Movie[], sortBy: SortOption, minRati
sorted.sort((a, b) => b.vote_average - a.vote_average);
break;
case 'release_date':
- sorted.sort((a, b) => (b.release_date ?? '').localeCompare(a.release_date ?? ''));
+ sorted.sort((a, b) =>
+ (b.release_date ?? '').localeCompare(a.release_date ?? ''),
+ );
break;
case 'title':
sorted.sort((a, b) => a.title.localeCompare(b.title));
diff --git a/vite.config.ts b/vite.config.ts
index 6a3e8cb..5f7fc33 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,12 +1,9 @@
-import react, { reactCompilerPreset } from '@vitejs/plugin-react'
-import babel from '@rolldown/plugin-babel'
-import { defineConfig } from 'vite'
+import react, { reactCompilerPreset } from '@vitejs/plugin-react';
+import babel from '@rolldown/plugin-babel';
+import { defineConfig } from 'vite';
// https://vite.dev/config/
export default defineConfig({
base: '/project1/',
- plugins: [
- react(),
- babel({ presets: [reactCompilerPreset()] })
- ],
-})
+ plugins: [react(), babel({ presets: [reactCompilerPreset()] })],
+});