From cdb30b2ea3d860e6a4d2abb34b9dd7072cd6f338 Mon Sep 17 00:00:00 2001 From: Philippe Torrel Date: Thu, 29 Oct 2026 10:08:58 +0100 Subject: [PATCH] --- .../u19_chuck-norris-api-christian/.gitignore | 24 + .../.oxlintrc.json | 8 + .../.vscode/extensions.json | 15 + .../u19_chuck-norris-api-christian/README.md | 16 + .../u19_chuck-norris-api-christian/index.html | 17 + .../package-lock.json | 2605 ++++++++++++++++ .../package.json | 29 + .../public/favicon.svg | 1 + .../public/icons.svg | 24 + .../src/App.jsx | 19 + .../src/assets/react.svg | 1 + .../src/assets/vite.svg | 1 + .../src/components/common/Badge.jsx | 22 + .../components/examples/ExampleUseContext.jsx | 18 + .../examples/ExampleUseEffectDidUpdate.jsx | 30 + .../examples/ExampleUseEffectMount.jsx | 24 + .../examples/ExampleUseEffectUnMount.jsx | 36 + .../src/components/examples/ExampleUseId.jsx | 21 + .../components/examples/ExampleUseReducer.jsx | 77 + .../components/examples/ExampleUseState.jsx | 36 + .../examples/theme-switcher/ThemeContext.jsx | 8 + .../examples/theme-switcher/ThemeProvider.jsx | 25 + .../src/components/footers/FooterMain.jsx | 78 + .../src/components/forms/FormContact.jsx | 159 + .../src/components/forms/FormNewsletter.jsx | 35 + .../src/components/headers/HeaderMain.jsx | 12 + .../src/components/icons/Logo.jsx | 48 + .../src/components/inputs/InputAmount.jsx | 61 + .../src/components/lists/ListTodo.jsx | 51 + .../src/components/lists/ListUser.jsx | 53 + .../src/components/logos/LogoMain.jsx | 15 + .../src/components/navs/Navbar.jsx | 121 + .../src/layouts/Layout.jsx | 20 + .../src/main.jsx | 18 + .../src/pages/AboutPage.jsx | 14 + .../src/pages/ApiPage.jsx | 20 + .../src/pages/ContactPage.jsx | 20 + .../src/pages/HomePage.jsx | 27 + .../src/pages/JokePage.jsx | 51 + .../src/pages/UserPage.jsx | 24 + .../src/pages/UserProfilePage.jsx | 19 + .../src/routes/Router.jsx | 81 + .../src/styles/01_frameworks/_index.scss | 3 + .../_gloria-hallelujah-v24-latin.scss | 8 + .../src/styles/02_fonts/_index.scss | 3 + .../src/styles/02_fonts/_lato-v25-latin.scss | 89 + .../02_fonts/_source-sans-3-v19-latin.scss | 143 + .../src/styles/03_base/_colors.scss | 13 + .../src/styles/03_base/_index.scss | 2 + .../src/styles/03_base/_theme.scss | 52 + .../src/styles/03_base/_typography.scss | 9 + .../src/styles/04_plugins/_index.scss | 7 + .../04_plugins/toastify-1.12/_toastify.scss | 88 + .../src/styles/05_modules/_button.scss | 17 + .../styles/05_modules/_card-chuck-norris.scss | 28 + .../styles/05_modules/_chuck-norris-joke.scss | 38 + .../src/styles/05_modules/_footerMain.scss | 45 + .../src/styles/05_modules/_header-main.scss | 15 + .../src/styles/05_modules/_index.scss | 9 + .../src/styles/05_modules/_input-amount.scss | 27 + .../src/styles/05_modules/_logo-main.scss | 21 + .../src/styles/05_modules/_menu-main.scss | 20 + .../styles/05_modules/_product-manager.scss | 47 + .../src/styles/main.scss | 13 + .../src/utils/validators/validate.js | 39 + .../vite.config.js | 15 + .../u19_chuck-norris-api-stefan/.gitignore | 24 + .../.oxlintrc.json | 8 + .../u19_chuck-norris-api-stefan/README.md | 16 + .../u19_chuck-norris-api-stefan/index.html | 17 + .../package-lock.json | 2605 ++++++++++++++++ .../u19_chuck-norris-api-stefan/package.json | 29 + .../public/favicon.svg | 1 + .../public/icons.svg | 24 + .../u19_chuck-norris-api-stefan/src/App.jsx | 19 + .../src/assets/react.svg | 1 + .../src/assets/vite.svg | 1 + .../components/badjokes/ChuckNorrisJokes.jsx | 93 + .../src/components/badjokes/bad.scss | 31 + .../src/components/badjokes/loading.gif | Bin 0 -> 143815 bytes .../src/components/common/Badge.jsx | 22 + .../components/examples/ExampleUseContext.jsx | 18 + .../examples/ExampleUseEffectDidUpdate.jsx | 30 + .../examples/ExampleUseEffectMount.jsx | 24 + .../examples/ExampleUseEffectUnMount.jsx | 36 + .../src/components/examples/ExampleUseId.jsx | 21 + .../components/examples/ExampleUseReducer.jsx | 77 + .../components/examples/ExampleUseState.jsx | 36 + .../examples/theme-switcher/ThemeContext.jsx | 8 + .../examples/theme-switcher/ThemeProvider.jsx | 25 + .../src/components/footers/FooterMain.jsx | 78 + .../src/components/forms/FormContact.jsx | 159 + .../src/components/forms/FormNewsletter.jsx | 35 + .../src/components/headers/HeaderMain.jsx | 12 + .../src/components/icons/Logo.jsx | 48 + .../src/components/inputs/InputAmount.jsx | 61 + .../src/components/lists/ListTodo.jsx | 51 + .../src/components/lists/ListUser.jsx | 53 + .../src/components/logos/LogoMain.jsx | 15 + .../src/components/navs/Navbar.jsx | 110 + .../src/layouts/Layout.jsx | 20 + .../u19_chuck-norris-api-stefan/src/main.jsx | 18 + .../src/pages/AboutPage.jsx | 14 + .../src/pages/ApiPage.jsx | 20 + .../src/pages/BadJokesPage.jsx | 15 + .../src/pages/ContactPage.jsx | 20 + .../src/pages/HomePage.jsx | 27 + .../src/pages/UserPage.jsx | 24 + .../src/pages/UserProfilePage.jsx | 19 + .../src/routes/Router.jsx | 82 + .../src/styles/01_frameworks/_index.scss | 3 + .../_gloria-hallelujah-v24-latin.scss | 8 + .../src/styles/02_fonts/_index.scss | 3 + .../src/styles/02_fonts/_lato-v25-latin.scss | 89 + .../02_fonts/_source-sans-3-v19-latin.scss | 143 + .../src/styles/03_base/_colors.scss | 13 + .../src/styles/03_base/_index.scss | 2 + .../src/styles/03_base/_theme.scss | 52 + .../src/styles/03_base/_typography.scss | 9 + .../src/styles/04_plugins/_index.scss | 7 + .../04_plugins/toastify-1.12/_toastify.scss | 88 + .../src/styles/05_modules/_button.scss | 17 + .../styles/05_modules/_chuck-norris-joke.scss | 38 + .../src/styles/05_modules/_footerMain.scss | 45 + .../src/styles/05_modules/_header-main.scss | 15 + .../src/styles/05_modules/_index.scss | 8 + .../src/styles/05_modules/_input-amount.scss | 27 + .../src/styles/05_modules/_logo-main.scss | 21 + .../src/styles/05_modules/_menu-main.scss | 20 + .../styles/05_modules/_product-manager.scss | 47 + .../src/styles/main.scss | 13 + .../src/utils/validators/validate.js | 39 + .../vite.config.js | 15 + .../u19_chuck-norris-api/package.json | 2 +- ...i.zip => ubeungen-19_chuck-norris-api.zip} | Bin .../01_react-with-forms/package-lock.json | 2369 +++++++++++++++ .../src/components/forms/joi/FormContact.jsx | 1 + .../02_react-api-with-hooks/package-lock.json | 2701 +++++++++++++++++ .../02_react-api-with-hooks/package.json | 4 +- .../examples/ExampleUseEffectMount.jsx | 17 +- .../src/pages/HomePage.jsx | 1 + 141 files changed, 14589 insertions(+), 10 deletions(-) create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/.gitignore create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/.oxlintrc.json create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/.vscode/extensions.json create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/README.md create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/index.html create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/package-lock.json create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/package.json create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/public/favicon.svg create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/public/icons.svg create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/App.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/assets/react.svg create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/assets/vite.svg create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/common/Badge.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseContext.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseEffectDidUpdate.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseEffectMount.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseEffectUnMount.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseId.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseReducer.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseState.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/theme-switcher/ThemeContext.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/theme-switcher/ThemeProvider.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/footers/FooterMain.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/forms/FormContact.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/forms/FormNewsletter.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/headers/HeaderMain.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/icons/Logo.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/inputs/InputAmount.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/lists/ListTodo.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/lists/ListUser.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/logos/LogoMain.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/components/navs/Navbar.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/layouts/Layout.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/main.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/pages/AboutPage.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/pages/ApiPage.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/pages/ContactPage.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/pages/HomePage.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/pages/JokePage.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/pages/UserPage.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/pages/UserProfilePage.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/routes/Router.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/01_frameworks/_index.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_gloria-hallelujah-v24-latin.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_index.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_lato-v25-latin.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_source-sans-3-v19-latin.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_colors.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_index.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_theme.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_typography.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/04_plugins/_index.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/04_plugins/toastify-1.12/_toastify.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_button.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_card-chuck-norris.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_chuck-norris-joke.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_footerMain.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_header-main.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_index.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_input-amount.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_logo-main.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_menu-main.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_product-manager.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/styles/main.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/src/utils/validators/validate.js create mode 100644 06_react/uebungen/u19_chuck-norris-api-christian/vite.config.js create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/.gitignore create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/.oxlintrc.json create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/README.md create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/index.html create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/package-lock.json create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/package.json create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/public/favicon.svg create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/public/icons.svg create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/App.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/assets/react.svg create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/assets/vite.svg create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/badjokes/ChuckNorrisJokes.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/badjokes/bad.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/badjokes/loading.gif create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/common/Badge.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseContext.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseEffectDidUpdate.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseEffectMount.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseEffectUnMount.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseId.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseReducer.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseState.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/theme-switcher/ThemeContext.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/theme-switcher/ThemeProvider.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/footers/FooterMain.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/forms/FormContact.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/forms/FormNewsletter.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/headers/HeaderMain.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/icons/Logo.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/inputs/InputAmount.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/lists/ListTodo.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/lists/ListUser.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/logos/LogoMain.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/components/navs/Navbar.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/layouts/Layout.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/main.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/AboutPage.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/ApiPage.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/BadJokesPage.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/ContactPage.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/HomePage.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/UserPage.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/UserProfilePage.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/routes/Router.jsx create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/01_frameworks/_index.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_gloria-hallelujah-v24-latin.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_index.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_lato-v25-latin.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_source-sans-3-v19-latin.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_colors.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_index.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_theme.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_typography.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/04_plugins/_index.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/04_plugins/toastify-1.12/_toastify.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_button.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_chuck-norris-joke.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_footerMain.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_header-main.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_index.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_input-amount.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_logo-main.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_menu-main.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_product-manager.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/main.scss create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/src/utils/validators/validate.js create mode 100644 06_react/uebungen/u19_chuck-norris-api-stefan/vite.config.js rename 06_react/uebungen/{u19_chuck-norris-api.zip => ubeungen-19_chuck-norris-api.zip} (100%) create mode 100644 06_react/unterricht/tag38/01_react-with-forms/package-lock.json create mode 100644 06_react/unterricht/tag38/02_react-api-with-hooks/package-lock.json diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/.gitignore b/06_react/uebungen/u19_chuck-norris-api-christian/.gitignore new file mode 100644 index 0000000..4108b33 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/.oxlintrc.json b/06_react/uebungen/u19_chuck-norris-api-christian/.oxlintrc.json new file mode 100644 index 0000000..b9169ab --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/.oxlintrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["react", "oxc"], + "rules": { + "react/rules-of-hooks": "error", + "react/only-export-components": ["warn", { "allowConstantExport": true }] + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/.vscode/extensions.json b/06_react/uebungen/u19_chuck-norris-api-christian/.vscode/extensions.json new file mode 100644 index 0000000..bb659e6 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/.vscode/extensions.json @@ -0,0 +1,15 @@ +{ + "recommendations": [ + "kamikillerto.vscode-colorize", + "sleistner.vscode-fileutils", + "bierner.github-markdown-preview", + "bradgashler.htmltagwrap", + "zhuangtongfa.material-theme", + "techer.open-in-browser", + "esbenp.prettier-vscode", + "pdconsec.vscode-print", + "vscode-icons-team.vscode-icons", + "formulahendry.auto-rename-tag", + "tomoki1207.pdf" + ] +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/README.md b/06_react/uebungen/u19_chuck-norris-api-christian/README.md new file mode 100644 index 0000000..f0d8901 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/README.md @@ -0,0 +1,16 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some Oxlint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the Oxlint configuration + +If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and Oxlint's TypeScript related rules in your project. diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/index.html b/06_react/uebungen/u19_chuck-norris-api-christian/index.html new file mode 100644 index 0000000..f98bb3f --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/index.html @@ -0,0 +1,17 @@ + + + + + + + + Chuck Norris API + + + +
+ + + diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/package-lock.json b/06_react/uebungen/u19_chuck-norris-api-christian/package-lock.json new file mode 100644 index 0000000..7c8c0d9 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/package-lock.json @@ -0,0 +1,2605 @@ +{ + "name": "u19-chuck-norris-api", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "u19-chuck-norris-api", + "version": "0.0.0", + "dependencies": { + "axios": "^1.21.0", + "bootstrap": "^5.3.8", + "react": "^19.3.1", + "react-dom": "^19.3.1", + "react-icons": "^5.7.0", + "react-router-dom": "^7.18.5", + "validator": "^13.15.35" + }, + "devDependencies": { + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", + "@vitejs/plugin-react": "^6.1.2", + "oxlint": "^1.90.0", + "sass-embedded": "^1.106.1", + "vite": "^8.3.5" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.16.0.tgz", + "integrity": "sha512-FWa0sPlqYGJgpTs6OxBRcL/AW4JT0OIO+W1ajerluoTVh8CV0B7XM1qsNCRgnkSCkRCgOICKHRQlY17jrsm0+Q==", + "dev": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@oxc-project/types": { + "version": "0.155.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.155.0.tgz", + "integrity": "sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/oxc-project" + } + }, + "node_modules/@oxlint/binding-android-arm-eabi": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.90.0.tgz", + "integrity": "sha512-sgfalb1HuxYjiAa4wESZ626z1FGusqNcXYHyB5oIOEprS2sbPg0UYEfo83uF1GNG70DIfZxHkXuE6KFrlSdn8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-android-arm64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.90.0.tgz", + "integrity": "sha512-RcKhz1ETMq+fazE9TKS2+5NIRGwigm/nW8egqF0LI+A8Yw2iW5r0E/C3XAPRiwIm/vcPiutIRIa6IQCIKhZsTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-arm64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.90.0.tgz", + "integrity": "sha512-PSrxMvP6mx+p1karZcUxLdy9lpaP+JWQPti4al9FgTaPhxE+pT/BjhGExloVVSWgZgIfOlLOjVyyq8BXlodhLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-x64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.90.0.tgz", + "integrity": "sha512-OLbU9qsrV2Q8QxT2OEzOPdO8zCCpyI8qB+hDI8yr6RsYELtkf0FAZhJdfjM/RnLHKzt44HWwAPnk92vBtKofvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-freebsd-x64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.90.0.tgz", + "integrity": "sha512-fBA4pWyVDARmNucQqpyFuPC49xYf1r+sX7dxPL5fNPQrSMLum39Sn56tZ9JPleWC7FzLPwSQ7plYYfirYBHF8A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-gnueabihf": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.90.0.tgz", + "integrity": "sha512-zhxH78eP2nR6/pGdhBc7MIfjhhcgATeu8fkmkFJbuzfk6Cj0FzBxyEhL85yDqrCybjx+G2YDzZGsxIO9kvO4Iw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-musleabihf": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.90.0.tgz", + "integrity": "sha512-MvYmpHyJqUJjEvkZbJHdwfdL45cGn8EVBkYmoXFiaYFW9suoD3dbJl5mBdpy0DVgdjlyddmldbRtk3cCgETadQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.90.0.tgz", + "integrity": "sha512-L13Sy+Kg0nZhwTsToniqjUFPA2TuM6962qCZ5Wp5KeB517Tw7ApdLTTtlb+bF86fcZZa2EtvCVvAJxk4Dya/MQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-musl": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.90.0.tgz", + "integrity": "sha512-wFDdZWGpzIPFdJFjSLWnKB0TGzFriTKUIrl04iMqMyM9BBIJTuerfCHYa0WpDSjr5x3lcW/CHLyacSt886WpGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-ppc64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.90.0.tgz", + "integrity": "sha512-FRywfn+MoKn8xpBSzgNwNVliSKRI2QXkxi/iF7o6FEQs8Bh8z2RpVTaFAcO3pchXjvB2eGNFIoLLQABIQ+u7VA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.90.0.tgz", + "integrity": "sha512-IS2PaUgpc/qeLADTyhUNmdx3x4ijs9pjJdPKBYHaT+mAE7k3FsjnHPTjhpsak1b++h6CIPhv6WX9Z+y7Pw0voQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-musl": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.90.0.tgz", + "integrity": "sha512-s7JFKRkGS8O7i2ZVODfuO++NC7sH6HDqpMn8lYxw91w0SXJOxnAVjQ8utvmDwLMMT0jaSkuOKuUYJDGDtu4sHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-s390x-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.90.0.tgz", + "integrity": "sha512-b0GxrOQr5VONCkd7KLSqmP6b6nqZuTpuS8QPQHzltmqdXP5bY0Jl0CZ0QmlCTrS3ExaLYbioFYOARzNbYvcApQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.90.0.tgz", + "integrity": "sha512-iaJeShJtgUp8rZbt9YUdTAGOpmX5KogCLba17Jp1tWdJ3F4M3D2g2TKUyI1FMTHxKH9NNHuQcuC2kZRg6IV7yQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-musl": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.90.0.tgz", + "integrity": "sha512-/aZoXnL5WBLCXuzfHqvEFXcm4iwYmr/cYByHDTXzLFzJdE5DC7bm6phpWqHv6BeqpVgY9IpBAxGDv2WEkl5JCg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-openharmony-arm64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.90.0.tgz", + "integrity": "sha512-SMhk7ozwoxYDKfYqGZCQEfULOKDneF9uhaoIf2neoDLWvNtjY9yVeL7YHmE5L9WdKvMpWNwwZxhenxBu6AgfOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-arm64-msvc": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.90.0.tgz", + "integrity": "sha512-KBvR3A9fO7fCi2vCP8ifWvlia7tGEQV9NaYh+IGwa/7Groy48Mt/UaYqMK9/zOtAWl20BUCf6RPqzJ32fRw33Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-ia32-msvc": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.90.0.tgz", + "integrity": "sha512-+x42rDHQGbTCuT3EzpWAzhP3NoVPE/cJsG4gnrakOSg0olV+GCdMpPU23Nvrl3zZMnXxFZdTtDv4D3SuaA5ZeQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-x64-msvc": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.90.0.tgz", + "integrity": "sha512-30JiaFEBUB9peEOcvVM8ggo88SoN/IdSr9DW505JdBji/R6dM66gKEiG65hw6qcaF2f4mO0cEJ+RwRZprmun9g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", + "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", + "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", + "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", + "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", + "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", + "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", + "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", + "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.15.tgz", + "integrity": "sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.15.tgz", + "integrity": "sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.15.tgz", + "integrity": "sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.15.tgz", + "integrity": "sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.15.tgz", + "integrity": "sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.15.tgz", + "integrity": "sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.15.tgz", + "integrity": "sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.15.tgz", + "integrity": "sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.15.tgz", + "integrity": "sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.15.tgz", + "integrity": "sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.15.tgz", + "integrity": "sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.15.tgz", + "integrity": "sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.15.tgz", + "integrity": "sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.15.tgz", + "integrity": "sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.15.tgz", + "integrity": "sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", + "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.3.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.2.tgz", + "integrity": "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "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", + "oxc-transform-react": "^0.152.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "oxc-transform-react": { + "optional": true + } + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.21.0.tgz", + "integrity": "sha512-YCzXMB53Q9PZBsh7yN7wtapit4WepwcHS2fP8QhGsBxSz5YtgYobV7GGlWlAJi+RxfU77GQTQi2DSLUma42EYA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.6", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/bootstrap": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz", + "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/colorjs.io": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.7.1.tgz", + "integrity": "sha512-LY7OHnJZxHwT5UlzNa9bbhHHDbzB6yE5+3MIPwJEQKRvSCt/T4G7epsj+9j2BExUIIfXFIJGsIXUKdfrK9Q5tA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/color" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/follow-redirects": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.2.tgz", + "integrity": "sha512-/kVP2U8z596Ia0gwFrwyIeo74ta5aVmSeU1FfAUMAmcEP5EP7zydmag3SLiN64NaRKef3lxsq7i/g7ltJQDGow==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/immutable": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/oxlint": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.90.0.tgz", + "integrity": "sha512-RkTN9EmgIUpLuhNoLhO3OliMGJlvb3Dk7XVjBZnfoMCHrVpuz5ESd97klfiyYeV7XfA2lNLnDCPMkUI+Qw5How==", + "dev": true, + "license": "MIT", + "bin": { + "oxlint": "bin/oxlint" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/oxc-project" + }, + "optionalDependencies": { + "@oxlint/binding-android-arm-eabi": "1.90.0", + "@oxlint/binding-android-arm64": "1.90.0", + "@oxlint/binding-darwin-arm64": "1.90.0", + "@oxlint/binding-darwin-x64": "1.90.0", + "@oxlint/binding-freebsd-x64": "1.90.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.90.0", + "@oxlint/binding-linux-arm-musleabihf": "1.90.0", + "@oxlint/binding-linux-arm64-gnu": "1.90.0", + "@oxlint/binding-linux-arm64-musl": "1.90.0", + "@oxlint/binding-linux-ppc64-gnu": "1.90.0", + "@oxlint/binding-linux-riscv64-gnu": "1.90.0", + "@oxlint/binding-linux-riscv64-musl": "1.90.0", + "@oxlint/binding-linux-s390x-gnu": "1.90.0", + "@oxlint/binding-linux-x64-gnu": "1.90.0", + "@oxlint/binding-linux-x64-musl": "1.90.0", + "@oxlint/binding-openharmony-arm64": "1.90.0", + "@oxlint/binding-win32-arm64-msvc": "1.90.0", + "@oxlint/binding-win32-ia32-msvc": "1.90.0", + "@oxlint/binding-win32-x64-msvc": "1.90.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=7.0.2005", + "vite-plus": "*" + }, + "peerDependenciesMeta": { + "oxlint-tsgolint": { + "optional": true + }, + "vite-plus": { + "optional": true + } + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.32.tgz", + "integrity": "sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.20", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/react": { + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.1.tgz", + "integrity": "sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.1.tgz", + "integrity": "sha512-Y0bARz53lhEC1NMCASs0/j+faB/zqt3R8hpvg1e8+61ZVJ4UL0UdC4cBbXfZMcIuhrfgeILTLe+ZeBCavQPtKQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.28.0" + }, + "peerDependencies": { + "react": "^19.3.1" + } + }, + "node_modules/react-icons": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.7.0.tgz", + "integrity": "sha512-LBLy340Rzqy6+/yVhZKT3B/QpP1BZaesGqasf09HPOBzRarcDIFH0WwXlXQfE7q7ipxK4MSiC5DIBWURCny6fw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-router": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.5.tgz", + "integrity": "sha512-dTgvcXDOrLPrlLHrcZAqWveiK1hMSqN+rGAJzegP8HtmNkfRxOoshGWBNX3ZJ0cZjOHkRdlUJtaIhZMLLyGyPw==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.5.tgz", + "integrity": "sha512-9HcfDMU6JJ/fp6gJZYGwNE6RknVGS4kBjH1HkNw959mCJi70TVwdipQWv2FEol9uGpi+SZTFtVpJPtEQfayeOw==", + "license": "MIT", + "dependencies": { + "react-router": "7.18.5" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rolldown": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.15.tgz", + "integrity": "sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.155.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.15", + "@rolldown/binding-android-arm64": "1.2.15", + "@rolldown/binding-darwin-arm64": "1.2.15", + "@rolldown/binding-darwin-x64": "1.2.15", + "@rolldown/binding-freebsd-x64": "1.2.15", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.15", + "@rolldown/binding-linux-arm64-gnu": "1.2.15", + "@rolldown/binding-linux-arm64-musl": "1.2.15", + "@rolldown/binding-linux-ppc64-gnu": "1.2.15", + "@rolldown/binding-linux-s390x-gnu": "1.2.15", + "@rolldown/binding-linux-x64-gnu": "1.2.15", + "@rolldown/binding-linux-x64-musl": "1.2.15", + "@rolldown/binding-openharmony-arm64": "1.2.15", + "@rolldown/binding-win32-arm64-msvc": "1.2.15", + "@rolldown/binding-win32-x64-msvc": "1.2.15" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sass": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.106.1.tgz", + "integrity": "sha512-kD+Gi66vycZcbJt+42NC4z4PXNMcCajVrJPhqoKKXy5cOBMmJQt052CxIBcRjwYXeImHYOpu/ydWWGZQIenl7A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "chokidar": "^5.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-embedded": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.106.1.tgz", + "integrity": "sha512-OoaTjMm7PcQnCo/AZNSKM/KdAeaX57edhmOp2bH8hcGNph2VDIg404gOSMZxGKNL+lbc7Ng0S/IYLAbs0YmgfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.5.0", + "colorjs.io": "^0.7.0", + "immutable": "^5.1.5", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "sass-embedded-all-unknown": "1.106.1", + "sass-embedded-android-arm": "1.106.1", + "sass-embedded-android-arm64": "1.106.1", + "sass-embedded-android-riscv64": "1.106.1", + "sass-embedded-android-x64": "1.106.1", + "sass-embedded-darwin-arm64": "1.106.1", + "sass-embedded-darwin-x64": "1.106.1", + "sass-embedded-linux-arm": "1.106.1", + "sass-embedded-linux-arm64": "1.106.1", + "sass-embedded-linux-musl-arm": "1.106.1", + "sass-embedded-linux-musl-arm64": "1.106.1", + "sass-embedded-linux-musl-riscv64": "1.106.1", + "sass-embedded-linux-musl-x64": "1.106.1", + "sass-embedded-linux-riscv64": "1.106.1", + "sass-embedded-linux-x64": "1.106.1", + "sass-embedded-unknown-all": "1.106.1", + "sass-embedded-win32-arm64": "1.106.1", + "sass-embedded-win32-x64": "1.106.1" + } + }, + "node_modules/sass-embedded-all-unknown": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.106.1.tgz", + "integrity": "sha512-5jUnX+WVeovsbORYHBfPMiAtb5/qTnWpuLrlg0ZEjo4AKLjkM3gXkRCReYBEi/bLC3JhBcWWwG/yPqJwd8/lLw==", + "cpu": [ + "!arm", + "!arm64", + "!riscv64", + "!x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "sass": "1.106.1" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.106.1.tgz", + "integrity": "sha512-xtLTJzkh2/oGI0kZ787ef55zKzmk6UO6nsIMV8CE9n2qMG3JvyU91EU+BxjvknRR9BTVvbQOCLqW5j0psFOeAQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.106.1.tgz", + "integrity": "sha512-USQo5LkotweQnofhTCZYBtI35HkbIRUx+YfI6AvNN/Wr45ewCbUnTOYvQc+DLFFcm+g9cp64kLrySPdLbkuPzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.106.1.tgz", + "integrity": "sha512-OyEAsl8q6xpZgsK4zupwfhVUYvjJaMPgILyXtx326DSPc5lKOwWpXa8rhI2H3eAB76xU61C/5RavIkH1iaqQeQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.106.1.tgz", + "integrity": "sha512-cczQbbtwex6mtaXS/8UwCSx6613EHiVLQNpkeVmk5oN08HpzPsWMoyzuGa2hdfh0by9mHXismdLk8fh9wdEQ+w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.106.1.tgz", + "integrity": "sha512-j8p5iM8v0lGFwfO6sagHkrokD7/zlEkCpfRiBDzvW+FdD/JqOW1nemVz/CexHeeR28ULrUNnE1fKJ/FN9TjTEw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.106.1.tgz", + "integrity": "sha512-WMszbY07IZ/GOaRlrMI3o+h7eiiOKBppLT+GSunSQsVcr2N4rlmM2rXlLsfub1praplLB4FWqMY1St8kLSjmZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.106.1.tgz", + "integrity": "sha512-EfhuxqURaMpP/eG4bg3fk4XZvRzMJBIw2iSVNRRbpwMOZLhDce8Eys95rTuOuU2R9/pHMwcVwpj/ZU3mZyLHog==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.106.1.tgz", + "integrity": "sha512-CBUcLDCBUiB6vlMO5VwtTywpapeE8cmr/UJ//xwNwByNGxc6JvoBru5XA1bhPquRjgNNMs90u89ybgap8gN31Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.106.1.tgz", + "integrity": "sha512-ToaDrOiunMuD64XLelRqjC0LWuEKt8q6vpqPsHdSN8T5paJWrAXP8EXMcuR/iIBigsssifAPym/MHEWLkLSTlg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.106.1.tgz", + "integrity": "sha512-yDUGDnNbPOoVaeEapLomFnwQkLQF4pveitqjq3J9Oi7qmg8mM/PXJYWOqCOq1ifXSbnnWppfuylUSkGTwnO1Hg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.106.1.tgz", + "integrity": "sha512-mQwiwXzfYlT/3Tb7TAvly9eoJc6Q6z+PC2e8mtuajr77DWAGa+8Ibte1umkG/F6o9jFNG8k752A4EAlSRTXfNg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.106.1.tgz", + "integrity": "sha512-GwVa+GJGeu8ACw06aGXz8uuc9rFXRJsceMHHi02fpuv3qsy2asMgy9xgN4GPVJLac4yjCBmf09sUUqWpOCrkzw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.106.1.tgz", + "integrity": "sha512-biV7fnrlTBAfl+bzIMTgGUHaW803NJti4XcKpX70ukOOKOgxsEwwvk21tI0w8VLKIyXFuLKM3TJxe3Ze1DR0tQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.106.1.tgz", + "integrity": "sha512-Ev2UktLmdFVvCFeSNyow0HNdxmNHqcXLRgEeesKpw4mtcuLN5HHocOJw9LrHiTbcpMPsfxgymS4jJBg43AptaA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-unknown-all": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.106.1.tgz", + "integrity": "sha512-uaeOeGCaHnhqpfZnjy5wGMcuyYbnDyXhzWCniGctqCj/Inlst4eDZaweowo+sJLExRvmToBhQ8seZyEvfGMQ4g==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "!android", + "!darwin", + "!linux", + "!win32" + ], + "dependencies": { + "sass": "1.106.1" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.106.1.tgz", + "integrity": "sha512-EiDwpthGDIX25B4d5lVEYgxzqRSdSFoi8czHHesXFYinroDHmgTpqgv7MhYmGogTCvei3o8AahX2Wl1BanWJQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.106.1.tgz", + "integrity": "sha512-j3OIOIXrNqbggtWlht7M/mkYybmGeGtvP7FRUx0NTDC6yeRhc16QTOoHb+z8S6NO9x0frg8eQS+F5qF7+DCKBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", + "license": "MIT" + }, + "node_modules/set-cookie-parser": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.3.tgz", + "integrity": "sha512-irZHtTqurLna57KQG/s+fzOwv/J6XSH4cs8M/vsrY3uCaQ3S6+QJguAH0WdN47SXlk82voMZ4naWMQf8fdEoIg==", + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/sync-child-process": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.1.1.tgz", + "integrity": "sha512-54zMOnH5qgjdKW8SGpCx3daSP+v+TtTfOxgPdhUE3P0hytMMpknZfP67S4JeRcx5IQRWJERz6890yO4dkTywww==", + "dev": true, + "license": "MIT", + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.2.0.tgz", + "integrity": "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/validator": { + "version": "13.15.35", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.35.tgz", + "integrity": "sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.5.tgz", + "integrity": "sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.7", + "postcss": "^8.5.30", + "rolldown": "~1.2.14", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.7.1 || ^0.8.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + } + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/package.json b/06_react/uebungen/u19_chuck-norris-api-christian/package.json new file mode 100644 index 0000000..cb8e389 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/package.json @@ -0,0 +1,29 @@ +{ + "name": "u19-chuck-norris-api", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "oxlint", + "preview": "vite preview" + }, + "dependencies": { + "axios": "^1.21.0", + "bootstrap": "^5.3.8", + "react": "^19.3.1", + "react-dom": "^19.3.1", + "react-icons": "^5.7.0", + "react-router-dom": "^7.18.5", + "validator": "^13.15.35" + }, + "devDependencies": { + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", + "@vitejs/plugin-react": "^6.1.2", + "oxlint": "^1.90.0", + "sass-embedded": "^1.106.1", + "vite": "^8.3.5" + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/public/favicon.svg b/06_react/uebungen/u19_chuck-norris-api-christian/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/public/icons.svg b/06_react/uebungen/u19_chuck-norris-api-christian/public/icons.svg new file mode 100644 index 0000000..5615851 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/App.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/App.jsx new file mode 100644 index 0000000..6cd0687 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/App.jsx @@ -0,0 +1,19 @@ +import Navbar from './components/navs/Navbar'; +import Router from './routes/Router'; +import HeaderMain from './components/headers/HeaderMain'; +import FooterMain from './components/footers/FooterMain'; + +function App() { + return ( + <> + {/* */} + +
+ +
+ {/* */} + + ); +} + +export default App; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/assets/react.svg b/06_react/uebungen/u19_chuck-norris-api-christian/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/assets/vite.svg b/06_react/uebungen/u19_chuck-norris-api-christian/src/assets/vite.svg new file mode 100644 index 0000000..25ee512 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/common/Badge.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/common/Badge.jsx new file mode 100644 index 0000000..fd71721 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/common/Badge.jsx @@ -0,0 +1,22 @@ +const Badge = (props) => { + const { text = '', variant = 'secondary', color } = props; + // const inline = typeof color !== 'undefined' ? { backgroundColor: color } : ''; + + // if (color) { + // return ( + // + // {text} + // + // ); + // } else { + // return {text}; + // } + + return ( + + {text} + + ); +}; + +export default Badge; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseContext.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseContext.jsx new file mode 100644 index 0000000..8ff69aa --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseContext.jsx @@ -0,0 +1,18 @@ +import { useContext } from 'react'; +import ThemeContext from './theme-switcher/ThemeContext'; + +const ExampleUseContext = (props) => { + // const { } = props; + + const theme = useContext(ThemeContext); + + return ( +
+

useContext

+

+ The theme of this component is: {theme} +

+
+ ); +}; +export default ExampleUseContext; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseEffectDidUpdate.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseEffectDidUpdate.jsx new file mode 100644 index 0000000..c6ff8dd --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseEffectDidUpdate.jsx @@ -0,0 +1,30 @@ +import { useState, useEffect } from 'react'; +import { FaPlus } from 'react-icons/fa6'; +const ExampleUseEffectDidUpdate = (props) => { + // const { } = props; + + const [value, setValue] = useState(0); + + useEffect(() => { + // mount + console.log('first render and rerender: ', value); + + return () => { + // unmount + }; + }, [value]); // <-- wenn state sich ändert, wird useEffect erneut ausgeführt (did update) + + return ( +
+

The value is: {value}

+ +
+ ); +}; +export default ExampleUseEffectDidUpdate; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseEffectMount.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseEffectMount.jsx new file mode 100644 index 0000000..993da9b --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseEffectMount.jsx @@ -0,0 +1,24 @@ +import { useEffect } from 'react'; + +const ExampleUseEffectMount = (props) => { + // const { } = props; + + console.log(document.querySelector('#box')); // null + useEffect(() => { + //mount + console.log(document.querySelector('#box')); //
// JSX Element liegt als gerendertes HTML vor. + + document.querySelector('#box').style.color = 'white'; + document.querySelector('#box').style.backgroundColor = '#2a2a2a'; + document.querySelector('#box').style.padding = '1rem'; + }, []); + + return ( +
+
+

Box was rendered

+
+
+ ); +}; +export default ExampleUseEffectMount; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseEffectUnMount.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseEffectUnMount.jsx new file mode 100644 index 0000000..c6c2add --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseEffectUnMount.jsx @@ -0,0 +1,36 @@ +import { useState, useEffect } from 'react'; + +const ExampleUseEffectUnMount = (props) => { + // const { } = props; + + const [timer, setTimer] = useState(0); + + useEffect(() => { + // mount + const interval = setInterval(() => { + setTimer((time) => time + 1); + }, 1000); + + window.addEventListener('resize', handleResize); + + return () => { + // cleanup - unmount + clearInterval(interval); + window.removeEventListener('resize', handleResize); + }; + }, []); // didupdate + + // EventHandler + const handleResize = (e) => { + // console.log('Event: ', e); + const { x, y, width: w, height: h } = document.body.getBoundingClientRect(); // window.outerWidth, + console.log({ x, y, w: parseInt(w), h: parseInt(h) }); + }; + + return ( +
+

Timer: {timer}

+
+ ); +}; +export default ExampleUseEffectUnMount; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseId.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseId.jsx new file mode 100644 index 0000000..6eb51df --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseId.jsx @@ -0,0 +1,21 @@ +import { useId } from 'react'; +// import { v4 as uid} from 'uuid'; +const ExampleUseId = (props) => { + // const { } = props; + + const id = useId(); // _r_1 + // const id = uid(); // von uuid ⇨ 'b18794e8-5d0d-417c-b361-ba38e78411b4' + + return ( +
+

+ ID: {id} +

+
+ + +
+
+ ); +}; +export default ExampleUseId; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseReducer.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseReducer.jsx new file mode 100644 index 0000000..3e59c2c --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseReducer.jsx @@ -0,0 +1,77 @@ +import { useReducer } from 'react'; +import { FaPlus, FaMinus } from 'react-icons/fa6'; + +const initialState = { + counter: 0, + // more props.... +}; + +// Reducer Funktion verwaltet das state Objekt. Über diese Funktion lässt sich das "komplexere" state-Objekt gezielt verändern. +function reducer(state, action) { + // action Objekt hat immer folgende Eigenschaften: {type: 'ACTION_NAME', payload: changeValue } + const { type, payload = 1 } = action; + + switch (type) { + case 'INCREASE': + return { ...state, counter: state.counter + 1 }; + + case 'DECREASE': + return { ...state, counter: state.counter - 1 }; + case 'DOUBLE': + return { ...state, counter: state.counter * 2 }; + case 'INC_VALUE': + return { ...state, counter: state.counter + payload }; + default: + console.warn('Action Type not found'); + return state; + } +} + +const ExampleUseReducer = (props) => { + // const { } = props; + + // Hooks - Top Level + // const [counter, setCounter] = useState(0); + const [state, dispatch] = useReducer(reducer, initialState); + + const handleClick = (e) => { + const btn = e.currentTarget; + const label = btn.ariaLabel; // btn.getAttribute('aria-label') + switch (label.toLowerCase()) { + case 'increase': + dispatch({ type: 'INCREASE' }); + break; + case 'decrease': + dispatch({ type: 'DECREASE' }); + break; + case 'double': + dispatch({ type: 'DOUBLE' }); + break; + default: //nothing + } + }; + + const handleClickIncValue = (e) => { + dispatch({ type: 'INC_VALUE', payload: 5 }); + }; + + return ( +
+ Counter: {state.counter} + + + + +
+ ); +}; +export default ExampleUseReducer; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseState.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseState.jsx new file mode 100644 index 0000000..758d018 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/ExampleUseState.jsx @@ -0,0 +1,36 @@ +import { useState } from 'react'; +import { FaPlus, FaMinus } from 'react-icons/fa6'; + +const ExampleUseState = (props) => { + // const { } = props; + const [counter, setCounter] = useState(0); + + const handleClick = (e) => { + const btn = e.currentTarget; + const label = btn.ariaLabel; // btn.getAttribute('aria-label') + switch (label.toLowerCase()) { + case 'increase': + setCounter(counter + 1); + break; + case 'decrease': + setCounter((prevState) => { + return prevState - 1; + }); + break; + default: //nothing + } + }; + + return ( +
+ Counter: {counter} + + +
+ ); +}; +export default ExampleUseState; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/theme-switcher/ThemeContext.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/theme-switcher/ThemeContext.jsx new file mode 100644 index 0000000..03b0e43 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/theme-switcher/ThemeContext.jsx @@ -0,0 +1,8 @@ +import { createContext } from 'react'; + +export const THEME_DEFAULT_VALUE = 'light'; + +const ThemeContext = createContext(THEME_DEFAULT_VALUE); +// createContext -> JSX-Element mit value Attribut +// ... +export default ThemeContext; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/theme-switcher/ThemeProvider.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/theme-switcher/ThemeProvider.jsx new file mode 100644 index 0000000..21be5b7 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/examples/theme-switcher/ThemeProvider.jsx @@ -0,0 +1,25 @@ +import { useState } from 'react'; +import ThemeContext, { THEME_DEFAULT_VALUE } from './ThemeContext'; + +const ThemeProvider = (props) => { + const { children } = props; + + console.log(ThemeContext._currentValue); // 'light' <- _currentValue beinhaltet initialWert. Soll aber in production Umgebung nicht verwendet werden, da kein offizieller Standard. + + const [theme, setTheme] = useState(THEME_DEFAULT_VALUE); + + const handleToggleTheme = (e) => { + console.log('toggle theme'); + setTheme((prevState) => (prevState === 'light' ? 'dark' : 'light')); + }; + + return ( + + + {children} + + ); +}; +export default ThemeProvider; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/footers/FooterMain.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/footers/FooterMain.jsx new file mode 100644 index 0000000..75b7732 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/footers/FooterMain.jsx @@ -0,0 +1,78 @@ +const FooterMain = (props) => { + // const { } = props; + + return ( + + ); +}; +export default FooterMain; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/forms/FormContact.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/forms/FormContact.jsx new file mode 100644 index 0000000..bda3b6b --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/forms/FormContact.jsx @@ -0,0 +1,159 @@ +import { useState } from 'react'; +import validate from '../../utils/validators/validate'; + +const INITIAL_FORM_DATA = { + firstname: '', // + lastname: '', + email: '', + message: '', +}; + +const FormContact = (props) => { + // const { } = props; + + const [formData, setFormData] = useState(INITIAL_FORM_DATA); + + const [errors, setErrors] = useState({}); + + // EventHandlers ======= + const handleSubmit = (e) => { + e.preventDefault(); // Standardverhalten (Versenden vom Formular) unterbinden. + + const form = e.currentTarget; + + const errors = validate(formData); + + if (Object.keys(errors).length === 0) { + console.log('Form submitted ....'); + // TODO: send over AJAX/Fetch + form.reset(); + setFormData(INITIAL_FORM_DATA); + setErrors({}); + } else { + console.warn('Form submit error'); + setErrors(errors); + } + }; + + const handleChange = (e) => { + const { name, value } = e.target; + + setFormData((state) => ({ ...state, [name]: value })); + + // console.log({ [e.target.name]: e.target.value }); + // console.log('Formdata', formData); + }; + + const handleBlur = (e) => { + const { name, value } = e.target; + const validationErrors = validate({ ...formData, [name]: value }); + + setErrors((state) => { + const nextErrors = { ...state }; + + if (validationErrors[name]) { + nextErrors[name] = validationErrors[name]; + } else { + delete nextErrors[name]; + } + + return nextErrors; + }); + }; + + return ( +
+
+
+
+ + +
OK
+
{errors?.firstname}
+
+
+
+
+ + +
OK
+
{errors?.lastname}
+
+
+
+ +
+
+
+ + +
OK
+
{errors?.email}
+
+
+
+ +
+
+
+ + +
OK
+
{errors?.message}
+
+
+
+ +
+
+
+ +
+
+
+
+ ); +}; +export default FormContact; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/forms/FormNewsletter.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/forms/FormNewsletter.jsx new file mode 100644 index 0000000..6d0e235 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/forms/FormNewsletter.jsx @@ -0,0 +1,35 @@ +const FormNewsletter = (props) => { + // const { } = props; + + // EventHandler + const handleSubmit = (e) => { + e.preventDefault(); // Standardverhalten unterbinden + console.log('Event: ', e); + }; + + return ( +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ ); +}; +export default FormNewsletter; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/headers/HeaderMain.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/headers/HeaderMain.jsx new file mode 100644 index 0000000..746b6d1 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/headers/HeaderMain.jsx @@ -0,0 +1,12 @@ +import LogoMain from '../logos/LogoMain'; + +const HeaderMain = () => { + return ( +
+
+ +
+
+ ); +}; +export default HeaderMain; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/icons/Logo.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/icons/Logo.jsx new file mode 100644 index 0000000..a775960 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/icons/Logo.jsx @@ -0,0 +1,48 @@ +const Logo = () => { + return ( + + + + + + + + + ); +}; +export default Logo; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/inputs/InputAmount.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/inputs/InputAmount.jsx new file mode 100644 index 0000000..baa008b --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/inputs/InputAmount.jsx @@ -0,0 +1,61 @@ +import { useState } from 'react'; +import { FaMinus, FaPlus } from 'react-icons/fa6'; + +const InputAmount = (props) => { + const [amount, setAmount] = useState(0); + + // const { } = props; + + // Eventhandler + const handleChange = (e) => { + const value = Number(e.target.value); // e.target.valueAsNumber + + // Guard + if (isNaN(value)) return; + + setAmount(value); + }; + const handleClick = (e) => { + console.log('Event: ', e); + console.log(e.currentTarget.name); + switch (e.currentTarget.name) { + case 'increase': + setAmount((prevState) => prevState + 1); + console.log('inc'); + break; + case 'decrease': + setAmount(amount - 1); + console.log('dec'); + break; + default: //nothing + } + }; + + return ( +
+
+ + + + + + + + +
+
+ ); +}; +export default InputAmount; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/lists/ListTodo.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/lists/ListTodo.jsx new file mode 100644 index 0000000..b5c8864 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/lists/ListTodo.jsx @@ -0,0 +1,51 @@ +import { useEffect, useState } from 'react'; + +const ListTodo = (props) => { + // const { } = props; + + const [todos, setTodos] = useState([]); + + useEffect(() => { + fetch('https://dummyjson.com/todos/random/6') + .then((res) => { + if (!res.ok) { + throw new Error('HTTP-Request went wrong'); + } + return res.json(); // -> Promise HTTP-Response->Body + }) + .then((data) => { + setTodos(data); + }) + .catch((err) => { + console.error(err); + }); + + return () => { + // cleanup + }; + }, []); + + return ( +
    + {todos.length > 0 && + todos.map(({ completed, id, todo }, idx) => ( +
  • +
    + + +
    +
  • + ))} +
+ ); +}; +export default ListTodo; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/lists/ListUser.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/lists/ListUser.jsx new file mode 100644 index 0000000..4fa1dcd --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/lists/ListUser.jsx @@ -0,0 +1,53 @@ +import { useEffect, useState } from 'react'; +import axios from 'axios'; + +const ListUser = (props) => { + // const { } = props; + + const [users, setUsers] = useState([]); + + useEffect(() => { + const fetchUsers = async () => { + try { + const { data } = await axios.get('https://dummyjson.com/users?limit=5&select=firstName,lastName,age,email'); + + if (!data) throw Error('Something went wrong'); + setUsers(data.users); + } catch (error) { + console.error(error); + throw Error(`Error: ${error}`); + } + }; + + fetchUsers(); + + // axios + // .get('https://dummyjson.com/users?limit=10&select=firstName,lastName,age,email') + // .then(({ data }) => { + // setUsers(data.users); + // }) + // .catch((err) => { + // console.error(err); + // }); + + return () => {}; + }, []); + + return ( +
    + {users.length > 0 && + users.map(({ firstName, lastName, age, email }, idx) => ( +
  • +

    + Name: {firstName} {lastName} +
    + Age: {age} +
    + Email: {email} +

    +
  • + ))} +
+ ); +}; +export default ListUser; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/logos/LogoMain.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/logos/LogoMain.jsx new file mode 100644 index 0000000..2304ef1 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/logos/LogoMain.jsx @@ -0,0 +1,15 @@ +import Logo from '../icons/Logo'; + +// import Logo from '/logo-js.min.svg'; +const LogoMain = (props) => { + // const { } = props; + + return ( +
+ {/* JS Course */} + +
Firmen Slogan
+
+ ); +}; +export default LogoMain; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/components/navs/Navbar.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/navs/Navbar.jsx new file mode 100644 index 0000000..a8a1044 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/components/navs/Navbar.jsx @@ -0,0 +1,121 @@ +import { NavLink } from 'react-router-dom'; + +function Navbar() { + return ( + + ); +} + +export default Navbar; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/layouts/Layout.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/layouts/Layout.jsx new file mode 100644 index 0000000..7c3bc42 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/layouts/Layout.jsx @@ -0,0 +1,20 @@ +import { Outlet } from 'react-router-dom'; +import Navbar from '../components/navs/Navbar'; + +const Layout = (props) => { + // const { } = props; + + return ( + <> +
Header
+ +
+ +
+
+

© copyright 2026

+
+ + ); +}; +export default Layout; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/main.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/main.jsx new file mode 100644 index 0000000..ac5793b --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/main.jsx @@ -0,0 +1,18 @@ +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import { BrowserRouter } from 'react-router-dom'; + +import App from './App.jsx'; + +import 'bootstrap'; // js +import './styles/main.scss'; + +const root = createRoot(document.getElementById('root')); + +root.render( + + + + + , +); diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/AboutPage.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/AboutPage.jsx new file mode 100644 index 0000000..857586f --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/AboutPage.jsx @@ -0,0 +1,14 @@ +function AboutPage() { + return ( +
+

About

+

+ sit amet consectetur adipisicing elit. Minima, voluptatibus nobis molestiae, dignissimos id dolores minus iste + quisquam harum vitae rem dolorem debitis natus asperiores amet rerum ratione laboriosam quam. Sit corporis + voluptate laboriosam doloribus incidunt voluptatibus repellat. Excepturi vitae perferendis odit +

+
+ ); +} + +export default AboutPage; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/ApiPage.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/ApiPage.jsx new file mode 100644 index 0000000..56d22d0 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/ApiPage.jsx @@ -0,0 +1,20 @@ +import ListTodo from '../components/lists/ListTodo'; +import ListUser from '../components/lists/ListUser'; + +const ApiPage = (props) => { + // const { } = props; + + return ( +
+
+

APIs auslesen mit React

+

Users

+ +
+

Todos

+ +
+
+ ); +}; +export default ApiPage; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/ContactPage.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/ContactPage.jsx new file mode 100644 index 0000000..dc2ce16 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/ContactPage.jsx @@ -0,0 +1,20 @@ +import FormContact from '../components/forms/FormContact'; + +function ContactPage() { + return ( +
+

Kontakt

+

+ Hast du Fragen? Schreib uns eine E-Mail: +
+ kontakt@example.com +
+

+ +
+ +
+ ); +} + +export default ContactPage; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/HomePage.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/HomePage.jsx new file mode 100644 index 0000000..b9a61f3 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/HomePage.jsx @@ -0,0 +1,27 @@ +function HomePage() { + return ( + <> +
+
+
+

Übung 19: Chuck Norris-Witze-API

+

+ Erstelle eine neue Komponente ChuckNorrisJokes.jsx im src/components-Ordner, die zufällige Chuck + Norris-Witze von{' '} + + https://api.chucknorris.io/jokes/random + {' '} + abruft und anzeigt. Verwende die fetch-API oder die axios-Bibliothek, um die Daten abzurufen. Behandle Lade- + und Fehlerzustände in der Komponente. +

+

+ Gestalte die Komponente so, dass sie einen Hintergrundgrafik enthält und der Witz in großer Schrift + angezeigt wird. Füge einen Button hinzu, um einen neuen Witz abzurufen. +

+
+
+ + ); +} + +export default HomePage; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/JokePage.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/JokePage.jsx new file mode 100644 index 0000000..6462197 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/JokePage.jsx @@ -0,0 +1,51 @@ +import { useEffect, useState } from 'react'; +import axios from 'axios'; + +const JokePage = (props) => { + // const { } = props; + + const API_URL = 'https://api.chucknorris.io/jokes/random'; + const [joke, setJoke] = useState(''); + const [reRun, setReRun] = useState(0); + + useEffect(() => { + const fetchJoke = () => { + axios + .get(API_URL) + .then(({ data }) => { + console.log(data.value); + setJoke(data.value); + }) + .catch((err) => { + console.error(err); + }); + }; + + fetchJoke(); + // const iv = setInterval(fetchJoke, 5000); + + return () => { + // clearInterval(iv); + }; + }, [reRun]); + + const handleClickJoke = (e) => { + setReRun((state) => state + 1); + }; + + return ( +
+

Chuck Norris Jokes

+
+
+
+ {joke} + +
+
+
+ ); +}; +export default JokePage; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/UserPage.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/UserPage.jsx new file mode 100644 index 0000000..e9defcf --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/UserPage.jsx @@ -0,0 +1,24 @@ +import { Outlet } from 'react-router-dom'; + +const UserPage = (props) => { + // const { } = props; + + return ( +
+
+
+

User

+

The nested user site:

+
+
+
+ +
+
+

© copyright 2026

+
+
+
+ ); +}; +export default UserPage; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/UserProfilePage.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/UserProfilePage.jsx new file mode 100644 index 0000000..e410f1e --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/pages/UserProfilePage.jsx @@ -0,0 +1,19 @@ +import { useParams } from 'react-router-dom'; +import Badge from '../components/common/Badge'; + +function UserProfilePage() { + const { userId } = useParams(); + + return ( +
+

+ User Profile +

+

+ sit amet consectetur adipisicing elit. Minima, voluptatibus nobis molestiae, dignissimos id dolores minus iste +

+
+ ); +} + +export default UserProfilePage; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/routes/Router.jsx b/06_react/uebungen/u19_chuck-norris-api-christian/src/routes/Router.jsx new file mode 100644 index 0000000..77be240 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/routes/Router.jsx @@ -0,0 +1,81 @@ +import { Navigate, Route, Routes } from 'react-router-dom'; +//import { createBrowserRouter, RouterProvider } from 'react-router-dom'; + +// Pages Komponenten +import HomePage from '../pages/HomePage'; +import AboutPage from '../pages/AboutPage'; +import ContactPage from '../pages/ContactPage'; +import UserProfilePage from '../pages/UserProfilePage'; +import UserPage from '../pages/UserPage'; +import ApiPage from '../pages/ApiPage'; +import JokePage from '../pages/JokePage'; + +// import Layout from '../layouts/Layout'; + +// Alternative Definition von Routes über "createBrowserRouter" mit Objekten +// const router = createBrowserRouter([ +// { path: '/', element: }, +// { path: '/about', element: }, +// { path: '/contact', element: }, +// ]); +// // App.jsx +// {/**/}; + +const checkAuth = () => { + const token = localStorage.getItem('token'); + return token && token === 'secret-token' ? true : false; +}; + +const ProtectedRoute = (props) => { + const { redirectTo = '/', children } = props; + + const isAuthenticated = checkAuth(); // => true | false // Authentication - Prüfung + + return isAuthenticated ? children : ; +}; + +const Router = () => { + // const { } = props; + + return ( + + {/* Static Routes */} + } /> + } /> + } /> + } /> + } /> + + {/* Dynamic Routes */} + Flights} /> + } /> + + {/* Nested Routes */} + {/* }> + } /> + } /> + } /> + */} + + }> + Index} /> + Profile} /> + Dashboard} /> + Settings} /> + + + {/* Protected Routes | Geschützte Routen */} + +
+

Admin Dashboard Page

+

Lorem ipsum dolor sit amet consectetur adipisicing elit. Vero atque eveniet hic temporibus

+
+ + }>
+
+ ); +}; +export default Router; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/01_frameworks/_index.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/01_frameworks/_index.scss new file mode 100644 index 0000000..f6c9a72 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/01_frameworks/_index.scss @@ -0,0 +1,3 @@ +// Bootstrap 5.3.8 or 6 (6.0.0-alpha.1) straight from node_modules. +// @forward 'bootstrap/scss/bootstrap-grid' +@forward 'bootstrap/scss/bootstrap'; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_gloria-hallelujah-v24-latin.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_gloria-hallelujah-v24-latin.scss new file mode 100644 index 0000000..930a1ab --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_gloria-hallelujah-v24-latin.scss @@ -0,0 +1,8 @@ +// gloria-hallelujah-regular - latin +@font-face { + font-display: swap; + font-family: 'Gloria Hallelujah'; + font-style: normal; + font-weight: 400; + src: url('../../assets/fonts/gloria-hallelujah-v24-latin/gloria-hallelujah-v24-latin-regular.woff2') format('woff2'); +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_index.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_index.scss new file mode 100644 index 0000000..4edbcdc --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_index.scss @@ -0,0 +1,3 @@ +// @forward 'gloria-hallelujah-v24-latin'; +// @forward 'lato-v25-latin'; +// @forward 'source-sans-3-v19-latin'; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_lato-v25-latin.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_lato-v25-latin.scss new file mode 100644 index 0000000..e4edd29 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_lato-v25-latin.scss @@ -0,0 +1,89 @@ +// lato-100 - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: normal; + font-weight: 100; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-100.woff2') format('woff2'); +} + +// lato-100italic - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: italic; + font-weight: 100; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-100italic.woff2') format('woff2'); +} + +// lato-300 - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: normal; + font-weight: 300; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-300.woff2') format('woff2'); +} + +// lato-300italic - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: italic; + font-weight: 300; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-300italic.woff2') format('woff2'); +} + +// lato-regular - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: normal; + font-weight: 400; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-regular.woff2') format('woff2'); +} + +// lato-italic - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: italic; + font-weight: 400; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-italic.woff2') format('woff2'); +} + +// lato-700 - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: normal; + font-weight: 700; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-700.woff2') format('woff2'); +} + +// lato-700italic - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: italic; + font-weight: 700; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-700italic.woff2') format('woff2'); +} + +// lato-900 - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: normal; + font-weight: 900; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-900.woff2') format('woff2'); +} + +// lato-900italic - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: italic; + font-weight: 900; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-900italic.woff2') format('woff2'); +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_source-sans-3-v19-latin.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_source-sans-3-v19-latin.scss new file mode 100644 index 0000000..34f5509 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/02_fonts/_source-sans-3-v19-latin.scss @@ -0,0 +1,143 @@ +// source-sans-3-200 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 200; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-200.woff2') format('woff2'); +} + +// source-sans-3-200italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 200; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-200italic.woff2') format('woff2'); +} + +// source-sans-3-300 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 300; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-300.woff2') format('woff2'); +} + +// source-sans-3-300italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 300; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-300italic.woff2') format('woff2'); +} + +// source-sans-3-regular - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 400; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-regular.woff2') format('woff2'); +} + +// source-sans-3-italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 400; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-italic.woff2') format('woff2'); +} + +// source-sans-3-500 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 500; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-500.woff2') format('woff2'); +} + +// source-sans-3-500italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 500; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-500italic.woff2') format('woff2'); +} + +// source-sans-3-600 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 600; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-600.woff2') format('woff2'); +} + +// source-sans-3-600italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 600; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-600italic.woff2') format('woff2'); +} + +// source-sans-3-700 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 700; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-700.woff2') format('woff2'); +} + +// source-sans-3-700italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 700; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-700italic.woff2') format('woff2'); +} + +// source-sans-3-800 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 800; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-800.woff2') format('woff2'); +} + +// source-sans-3-800italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 800; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-800italic.woff2') format('woff2'); +} + +// source-sans-3-900 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 900; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-900.woff2') format('woff2'); +} + +// source-sans-3-900italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 900; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-900italic.woff2') format('woff2'); +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_colors.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_colors.scss new file mode 100644 index 0000000..d2fa825 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_colors.scss @@ -0,0 +1,13 @@ +/* Color Theme Swatches in Hex */ +$color-1: #5c4b51; +$color-2: #8cbeb2; +$color-3: #f2ebbf; +$color-4: #f3b562; +$color-5: #f06060; + +$color-red: $color-5; +$color-white: white; // falls weiß geändert wird z.B.: #f8f8f8 +$color-black: #101010; + +$color-dark-blue: #283e4a; +$linear-gradient-dark: linear-gradient(180deg, rgba(40, 62, 74, 1) 0%, rgba(24, 32, 38, 1) 100%); diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_index.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_index.scss new file mode 100644 index 0000000..b860ca2 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_index.scss @@ -0,0 +1,2 @@ +// Variables (colors, typography) are pulled in by the partials that need them via @use. +@forward 'theme'; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_theme.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_theme.scss new file mode 100644 index 0000000..52441a0 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_theme.scss @@ -0,0 +1,52 @@ +@use 'typography' as *; + +// Allgemeine Formatierung +*, +html { + box-sizing: border-box; +} + +html, +body, +#root, +#app { + height: 100%; +} +// Sticky Footer +body, +#root, +#app { + display: flex; + flex-direction: column; +} + +main, +#main { + flex: 1 0 auto; +} + +body > footer, +.footer-main { + flex-shrink: 0; +} +// sticky end + +body { + margin: 0; + padding: 0; + font-family: $font-copy; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: $font-headline; + font-weight: 600; +} + +blockquote { + font-family: $font-quote; +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_typography.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_typography.scss new file mode 100644 index 0000000..d277265 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/03_base/_typography.scss @@ -0,0 +1,9 @@ +$fallback-serif: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif; +$fallback-sans-serif: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + +$font-headline: 'Lato', $fallback-serif; +$font-subclaim: $fallback-sans-serif; + +$font-menu: 'Source Sans 3', $fallback-sans-serif; +$font-copy: 'Source Sans 3', $fallback-sans-serif; +$font-quote: 'Gloria Hallelujah', $fallback-serif; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/04_plugins/_index.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/04_plugins/_index.scss new file mode 100644 index 0000000..7d73422 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/04_plugins/_index.scss @@ -0,0 +1,7 @@ +// @use '@fortawesome/fontawesome-free/scss/variables' with ( +// $font-path: '@fa-webfonts' +// ); +// @use '@fortawesome/fontawesome-free/scss/fontawesome'; +// @use '@fortawesome/fontawesome-free/scss/solid'; + +// @use 'toastify-1.12/toastify'; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/04_plugins/toastify-1.12/_toastify.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/04_plugins/toastify-1.12/_toastify.scss new file mode 100644 index 0000000..e403ccc --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/04_plugins/toastify-1.12/_toastify.scss @@ -0,0 +1,88 @@ +/*! + * Toastify js 1.12.0 + * https://github.com/apvarun/toastify-js + * @license MIT licensed + * + * Copyright (C) 2018 Varun A P + */ + +.toastify { + padding: 12px 20px; + color: #ffffff; + display: inline-block; + box-shadow: + 0 3px 6px -1px rgba(0, 0, 0, 0.12), + 0 10px 36px -4px rgba(77, 96, 232, 0.3); + background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5); + background: linear-gradient(135deg, #73a5ff, #5477f5); + position: fixed; + opacity: 0; + transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1); + border-radius: 2px; + cursor: pointer; + text-decoration: none; + max-width: calc(50% - 20px); + z-index: 2147483647; +} + +.toastify.on { + opacity: 1; +} + +.toast-close { + background: transparent; + border: 0; + color: white; + cursor: pointer; + font-family: inherit; + font-size: 1em; + opacity: 0.4; + padding: 0 5px; +} + +.toastify-right { + right: 15px; +} + +.toastify-left { + left: 15px; +} + +.toastify-top { + top: -150px; +} + +.toastify-bottom { + bottom: -150px; +} + +.toastify-rounded { + border-radius: 25px; +} + +.toastify-avatar { + width: 1.5em; + height: 1.5em; + margin: -7px 5px; + border-radius: 2px; +} + +.toastify-center { + margin-left: auto; + margin-right: auto; + left: 0; + right: 0; + max-width: fit-content; + max-width: -moz-fit-content; +} + +@media only screen and (max-width: 360px) { + .toastify-right, + .toastify-left { + margin-left: auto; + margin-right: auto; + left: 0; + right: 0; + max-width: fit-content; + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_button.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_button.scss new file mode 100644 index 0000000..6d6a596 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_button.scss @@ -0,0 +1,17 @@ +button, +input { + &.btn-custom { + background-color: #f0f0f0; + color: #333; + border: 1px solid #ccc; + padding: 8px 16px; + border-radius: 0px; + margin: 3px; + &:hover, + &:focus { + background-color: #e0e0e0; + color: #333; + border: 1px solid #ccc; + } + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_card-chuck-norris.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_card-chuck-norris.scss new file mode 100644 index 0000000..957c07c --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_card-chuck-norris.scss @@ -0,0 +1,28 @@ +.card-chuck-norris { + width: 800px; + height: 600px; + border-radius: 20px; + padding: 5px; + box-shadow: rgba(151, 65, 252, 0.2) 0 15px 30px -5px; + background-image: linear-gradient(144deg, #af40ff, #5b42f3 50%, #00ddeb); + + .card-content { + background-image: linear-gradient(144deg, #27cc11, #175d7e 50%, #5e9233); + border-radius: 17px; + width: 100%; + height: 100%; + color: #fff; + padding: 15px; + display: flex; + + align-items: center; + justify-content: center; + text-align: center; + flex-direction: column; + overflow-y: auto; + + button { + margin: 1rem; + } + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_chuck-norris-joke.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_chuck-norris-joke.scss new file mode 100644 index 0000000..38fee1d --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_chuck-norris-joke.scss @@ -0,0 +1,38 @@ +@use '../03_base/colors' as *; + +.chuck-norris-joke { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; + min-height: calc(100vh - 3.5rem); // full screen below the navbar + background: #555 url('../../assets/img/concrete-bg.jpg') center no-repeat fixed; + background-size: cover; + + &::after { + content: ''; + position: absolute; + z-index: 1; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: radial-gradient(circle, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.8) 100%); + } + + > * { + position: relative; + z-index: 2; + } + + .joke-text { + color: $color-white; + text-align: center; + font-size: 3rem; + max-width: 80%; + padding: 2rem; + text-shadow: 2px 2px 5px rgba(black, 0.5); + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_footerMain.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_footerMain.scss new file mode 100644 index 0000000..323d535 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_footerMain.scss @@ -0,0 +1,45 @@ +@use '../03_base/colors' as *; + +.footer-main { + background-color: $color-black; + background: $linear-gradient-dark; + padding: 3rem 0; + [class^='col'] { + color: $color-white; + a { + color: $color-white; + } + h2, + h3, + h4, + h5, + h6 { + font-size: 1.5rem; + color: $color-2; + padding: 0.5rem 0; + margin-bottom: 1rem; + letter-spacing: 2px; + } + } + // Mobile First + .row { + flex-direction: column; + > div { + &:nth-child(1) { + order: 3; + } + &:nth-child(2) { + order: 2; + } + &:nth-child(3) { + order: 1; + } + } + } + @media (min-width: 992px) { + // @include media-breakpoint-up(md) { + .row { + flex-direction: row; + } + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_header-main.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_header-main.scss new file mode 100644 index 0000000..4f34861 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_header-main.scss @@ -0,0 +1,15 @@ +.m-header-main { + width: 100%; + height: 400px; + + // https://cssreference.io/property/background/ + background: #efefef url('../../assets/img/header-bg.webp') center no-repeat border-box; + background-size: cover; + + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + + border: 20px solid rgba(white, 0.25); +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_index.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_index.scss new file mode 100644 index 0000000..bfc9c24 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_index.scss @@ -0,0 +1,9 @@ +@forward 'button'; +@forward 'card-chuck-norris'; +// @forward 'chuck-norris-joke'; +@forward 'footerMain'; +@forward 'header-main'; +@forward 'input-amount'; +@forward 'logo-main'; +// @forward 'menu-main'; +// @forward 'product-manager'; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_input-amount.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_input-amount.scss new file mode 100644 index 0000000..ebc1a0b --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_input-amount.scss @@ -0,0 +1,27 @@ +.m-input-amount { + .input-group { + .input-group-text { + padding: 0; + display: inline-block; + overflow: hidden; + button { + border-radius: 0; + } + } + input { + max-width: 85px; + text-align: center; + } + /* Für Chrome, Safari, Edge und Opera */ + input::-webkit-outer-spin-button, + input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } + + /* Für Firefox */ + input[type='number'] { + appearance: textfield; + } + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_logo-main.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_logo-main.scss new file mode 100644 index 0000000..3489c09 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_logo-main.scss @@ -0,0 +1,21 @@ +.logo-main { + margin: 0; + + img, + svg { + width: 320px; + height: auto; + max-width: 320px; + } + + figcaption { + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_menu-main.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_menu-main.scss new file mode 100644 index 0000000..ce90898 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_menu-main.scss @@ -0,0 +1,20 @@ +@use '../03_base/colors' as *; +@use '../03_base/typography' as *; + +// Main navigation = Bootstrap 6 navbar (see includes/menu-main.html). +// Only the look from frontend-gulp is added here: black bar, uppercase links. +.menu-main { + background-color: $color-black; + font-family: $font-menu; + + .nav-link { + text-transform: uppercase; + } +} + +// Mobile drawer: Bootstrap 6 alpha keeps it white although the navbar is dark +// (data-bs-theme="dark"), which leaves the light link text invisible. Give it the bar's colour. +.menu-main .drawer { + background-color: $color-black; + color: $color-white; +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_product-manager.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_product-manager.scss new file mode 100644 index 0000000..3d71e2b --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/05_modules/_product-manager.scss @@ -0,0 +1,47 @@ +.product-manager { + .nav-products-actions { + ul { + padding: 0; + margin: 0; + list-style: none; + display: flex; + justify-content: flex-end; + + li { + button { + margin: 0.5rem 0 0.5rem 0.5rem; + } + } + } + } + + table { + .th-actions { + width: 200px; + } + .th-dragger { + width: 50px; + } + + td { + vertical-align: middle; + button { + margin: 0 2px; + } + } + + tbody:empty::after { + content: 'loading products...'; + width: max-content; + display: inline-block; + color: #999; + padding: 1rem; + } + tfoot .row > * { + margin-bottom: 0.5rem; + @media (min-width: 992px) { + margin-bottom: 0; + } + } + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/main.scss b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/main.scss new file mode 100644 index 0000000..921b0f6 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/styles/main.scss @@ -0,0 +1,13 @@ +// Single stylesheet entry, linked in src/html/includes/head.html. +// Same folders as in frontend-gulp; @use instead of the deprecated @import. + +// 01 Frameworks +@use '01_frameworks' as *; +// 02 Fonts +@use '02_fonts' as *; +// 03 Base +@use '03_base' as *; +// 04 Plugins +@use '04_plugins' as *; +// 05 Modules +@use '05_modules' as *; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/src/utils/validators/validate.js b/06_react/uebungen/u19_chuck-norris-api-christian/src/utils/validators/validate.js new file mode 100644 index 0000000..48bbb77 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/src/utils/validators/validate.js @@ -0,0 +1,39 @@ +import isEmail from 'validator/lib/isEmail'; +import isLength from 'validator/lib/isLength'; +import isEmpty from 'validator/lib/isEmpty'; + +const validate = (formData) => { + const errors = {}; + const firstname = formData.firstname.trim(); + const lastname = formData.lastname.trim(); + const email = formData.email.trim(); + const message = formData.message.trim(); + + if (isEmpty(firstname)) { + errors.firstname = 'Firstname is required'; + } else if (!isLength(firstname, { min: 2, max: 50 })) { + errors.firstname = 'Firstname must be between 2 and 50 characters'; + } + + if (isEmpty(lastname)) { + errors.lastname = 'Lastname is required'; + } else if (!isLength(lastname, { min: 2, max: 60 })) { + errors.lastname = 'Lastname must be between 2 and 60 characters'; + } + + if (isEmpty(email)) { + errors.email = 'Email is required'; + } else if (!isEmail(email)) { + errors.email = 'Email is invalid'; + } + + if (isEmpty(message)) { + errors.message = 'Message is required'; + } else if (!isLength(message, { min: 10, max: 1000 })) { + errors.message = 'Message must be between 10 and 1000 characters'; + } + + return errors; +}; + +export default validate; diff --git a/06_react/uebungen/u19_chuck-norris-api-christian/vite.config.js b/06_react/uebungen/u19_chuck-norris-api-christian/vite.config.js new file mode 100644 index 0000000..1132195 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-christian/vite.config.js @@ -0,0 +1,15 @@ +import react from '@vitejs/plugin-react'; +import { defineConfig } from 'vite'; + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], + css: { + preprocessorOptions: { + scss: { + quietDeps: true, // Unix + silenceDeprecations: ['color-functions', 'global-builtin', 'import', 'legacy-js-api', 'if-function'], + }, + }, + }, +}); diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/.gitignore b/06_react/uebungen/u19_chuck-norris-api-stefan/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/.oxlintrc.json b/06_react/uebungen/u19_chuck-norris-api-stefan/.oxlintrc.json new file mode 100644 index 0000000..1255078 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/.oxlintrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["react", "oxc"], + "rules": { + "react/rules-of-hooks": "error", + "react/only-export-components": ["warn", { "allowConstantExport": true }] + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/README.md b/06_react/uebungen/u19_chuck-norris-api-stefan/README.md new file mode 100644 index 0000000..d937833 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/README.md @@ -0,0 +1,16 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some Oxlint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the Oxlint configuration + +If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and Oxlint's TypeScript related rules in your project. diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/index.html b/06_react/uebungen/u19_chuck-norris-api-stefan/index.html new file mode 100644 index 0000000..9b02b25 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/index.html @@ -0,0 +1,17 @@ + + + + + + + + Chuck Norris API + + + +
+ + + diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/package-lock.json b/06_react/uebungen/u19_chuck-norris-api-stefan/package-lock.json new file mode 100644 index 0000000..5d97137 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/package-lock.json @@ -0,0 +1,2605 @@ +{ + "name": "u19-chuck-norris-api", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "u19-chuck-norris-api", + "version": "0.0.0", + "dependencies": { + "axios": "^1.21.0", + "bootstrap": "^5.3.8", + "react": "^19.3.1", + "react-dom": "^19.3.1", + "react-icons": "^5.7.0", + "react-router-dom": "^7.18.5", + "validator": "^13.15.35" + }, + "devDependencies": { + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", + "@vitejs/plugin-react": "^6.1.2", + "oxlint": "^1.90.0", + "sass-embedded": "^1.107.0", + "vite": "^8.3.5" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.16.0.tgz", + "integrity": "sha512-FWa0sPlqYGJgpTs6OxBRcL/AW4JT0OIO+W1ajerluoTVh8CV0B7XM1qsNCRgnkSCkRCgOICKHRQlY17jrsm0+Q==", + "dev": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@oxc-project/types": { + "version": "0.155.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.155.0.tgz", + "integrity": "sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/oxc-project" + } + }, + "node_modules/@oxlint/binding-android-arm-eabi": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.90.0.tgz", + "integrity": "sha512-sgfalb1HuxYjiAa4wESZ626z1FGusqNcXYHyB5oIOEprS2sbPg0UYEfo83uF1GNG70DIfZxHkXuE6KFrlSdn8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-android-arm64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.90.0.tgz", + "integrity": "sha512-RcKhz1ETMq+fazE9TKS2+5NIRGwigm/nW8egqF0LI+A8Yw2iW5r0E/C3XAPRiwIm/vcPiutIRIa6IQCIKhZsTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-arm64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.90.0.tgz", + "integrity": "sha512-PSrxMvP6mx+p1karZcUxLdy9lpaP+JWQPti4al9FgTaPhxE+pT/BjhGExloVVSWgZgIfOlLOjVyyq8BXlodhLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-x64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.90.0.tgz", + "integrity": "sha512-OLbU9qsrV2Q8QxT2OEzOPdO8zCCpyI8qB+hDI8yr6RsYELtkf0FAZhJdfjM/RnLHKzt44HWwAPnk92vBtKofvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-freebsd-x64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.90.0.tgz", + "integrity": "sha512-fBA4pWyVDARmNucQqpyFuPC49xYf1r+sX7dxPL5fNPQrSMLum39Sn56tZ9JPleWC7FzLPwSQ7plYYfirYBHF8A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-gnueabihf": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.90.0.tgz", + "integrity": "sha512-zhxH78eP2nR6/pGdhBc7MIfjhhcgATeu8fkmkFJbuzfk6Cj0FzBxyEhL85yDqrCybjx+G2YDzZGsxIO9kvO4Iw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-musleabihf": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.90.0.tgz", + "integrity": "sha512-MvYmpHyJqUJjEvkZbJHdwfdL45cGn8EVBkYmoXFiaYFW9suoD3dbJl5mBdpy0DVgdjlyddmldbRtk3cCgETadQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.90.0.tgz", + "integrity": "sha512-L13Sy+Kg0nZhwTsToniqjUFPA2TuM6962qCZ5Wp5KeB517Tw7ApdLTTtlb+bF86fcZZa2EtvCVvAJxk4Dya/MQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-musl": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.90.0.tgz", + "integrity": "sha512-wFDdZWGpzIPFdJFjSLWnKB0TGzFriTKUIrl04iMqMyM9BBIJTuerfCHYa0WpDSjr5x3lcW/CHLyacSt886WpGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-ppc64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.90.0.tgz", + "integrity": "sha512-FRywfn+MoKn8xpBSzgNwNVliSKRI2QXkxi/iF7o6FEQs8Bh8z2RpVTaFAcO3pchXjvB2eGNFIoLLQABIQ+u7VA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.90.0.tgz", + "integrity": "sha512-IS2PaUgpc/qeLADTyhUNmdx3x4ijs9pjJdPKBYHaT+mAE7k3FsjnHPTjhpsak1b++h6CIPhv6WX9Z+y7Pw0voQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-musl": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.90.0.tgz", + "integrity": "sha512-s7JFKRkGS8O7i2ZVODfuO++NC7sH6HDqpMn8lYxw91w0SXJOxnAVjQ8utvmDwLMMT0jaSkuOKuUYJDGDtu4sHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-s390x-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.90.0.tgz", + "integrity": "sha512-b0GxrOQr5VONCkd7KLSqmP6b6nqZuTpuS8QPQHzltmqdXP5bY0Jl0CZ0QmlCTrS3ExaLYbioFYOARzNbYvcApQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.90.0.tgz", + "integrity": "sha512-iaJeShJtgUp8rZbt9YUdTAGOpmX5KogCLba17Jp1tWdJ3F4M3D2g2TKUyI1FMTHxKH9NNHuQcuC2kZRg6IV7yQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-musl": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.90.0.tgz", + "integrity": "sha512-/aZoXnL5WBLCXuzfHqvEFXcm4iwYmr/cYByHDTXzLFzJdE5DC7bm6phpWqHv6BeqpVgY9IpBAxGDv2WEkl5JCg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-openharmony-arm64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.90.0.tgz", + "integrity": "sha512-SMhk7ozwoxYDKfYqGZCQEfULOKDneF9uhaoIf2neoDLWvNtjY9yVeL7YHmE5L9WdKvMpWNwwZxhenxBu6AgfOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-arm64-msvc": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.90.0.tgz", + "integrity": "sha512-KBvR3A9fO7fCi2vCP8ifWvlia7tGEQV9NaYh+IGwa/7Groy48Mt/UaYqMK9/zOtAWl20BUCf6RPqzJ32fRw33Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-ia32-msvc": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.90.0.tgz", + "integrity": "sha512-+x42rDHQGbTCuT3EzpWAzhP3NoVPE/cJsG4gnrakOSg0olV+GCdMpPU23Nvrl3zZMnXxFZdTtDv4D3SuaA5ZeQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-x64-msvc": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.90.0.tgz", + "integrity": "sha512-30JiaFEBUB9peEOcvVM8ggo88SoN/IdSr9DW505JdBji/R6dM66gKEiG65hw6qcaF2f4mO0cEJ+RwRZprmun9g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", + "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", + "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", + "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", + "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", + "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", + "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", + "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", + "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.15.tgz", + "integrity": "sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.15.tgz", + "integrity": "sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.15.tgz", + "integrity": "sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.15.tgz", + "integrity": "sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.15.tgz", + "integrity": "sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.15.tgz", + "integrity": "sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.15.tgz", + "integrity": "sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.15.tgz", + "integrity": "sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.15.tgz", + "integrity": "sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.15.tgz", + "integrity": "sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.15.tgz", + "integrity": "sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.15.tgz", + "integrity": "sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.15.tgz", + "integrity": "sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.15.tgz", + "integrity": "sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.15.tgz", + "integrity": "sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", + "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.3.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.2.tgz", + "integrity": "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "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", + "oxc-transform-react": "^0.152.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "oxc-transform-react": { + "optional": true + } + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.21.0.tgz", + "integrity": "sha512-YCzXMB53Q9PZBsh7yN7wtapit4WepwcHS2fP8QhGsBxSz5YtgYobV7GGlWlAJi+RxfU77GQTQi2DSLUma42EYA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.6", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/bootstrap": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz", + "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/colorjs.io": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.7.1.tgz", + "integrity": "sha512-LY7OHnJZxHwT5UlzNa9bbhHHDbzB6yE5+3MIPwJEQKRvSCt/T4G7epsj+9j2BExUIIfXFIJGsIXUKdfrK9Q5tA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/color" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/follow-redirects": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.2.tgz", + "integrity": "sha512-/kVP2U8z596Ia0gwFrwyIeo74ta5aVmSeU1FfAUMAmcEP5EP7zydmag3SLiN64NaRKef3lxsq7i/g7ltJQDGow==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/immutable": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/oxlint": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.90.0.tgz", + "integrity": "sha512-RkTN9EmgIUpLuhNoLhO3OliMGJlvb3Dk7XVjBZnfoMCHrVpuz5ESd97klfiyYeV7XfA2lNLnDCPMkUI+Qw5How==", + "dev": true, + "license": "MIT", + "bin": { + "oxlint": "bin/oxlint" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/oxc-project" + }, + "optionalDependencies": { + "@oxlint/binding-android-arm-eabi": "1.90.0", + "@oxlint/binding-android-arm64": "1.90.0", + "@oxlint/binding-darwin-arm64": "1.90.0", + "@oxlint/binding-darwin-x64": "1.90.0", + "@oxlint/binding-freebsd-x64": "1.90.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.90.0", + "@oxlint/binding-linux-arm-musleabihf": "1.90.0", + "@oxlint/binding-linux-arm64-gnu": "1.90.0", + "@oxlint/binding-linux-arm64-musl": "1.90.0", + "@oxlint/binding-linux-ppc64-gnu": "1.90.0", + "@oxlint/binding-linux-riscv64-gnu": "1.90.0", + "@oxlint/binding-linux-riscv64-musl": "1.90.0", + "@oxlint/binding-linux-s390x-gnu": "1.90.0", + "@oxlint/binding-linux-x64-gnu": "1.90.0", + "@oxlint/binding-linux-x64-musl": "1.90.0", + "@oxlint/binding-openharmony-arm64": "1.90.0", + "@oxlint/binding-win32-arm64-msvc": "1.90.0", + "@oxlint/binding-win32-ia32-msvc": "1.90.0", + "@oxlint/binding-win32-x64-msvc": "1.90.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=7.0.2005", + "vite-plus": "*" + }, + "peerDependenciesMeta": { + "oxlint-tsgolint": { + "optional": true + }, + "vite-plus": { + "optional": true + } + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.32.tgz", + "integrity": "sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.20", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/react": { + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.1.tgz", + "integrity": "sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.1.tgz", + "integrity": "sha512-Y0bARz53lhEC1NMCASs0/j+faB/zqt3R8hpvg1e8+61ZVJ4UL0UdC4cBbXfZMcIuhrfgeILTLe+ZeBCavQPtKQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.28.0" + }, + "peerDependencies": { + "react": "^19.3.1" + } + }, + "node_modules/react-icons": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.7.0.tgz", + "integrity": "sha512-LBLy340Rzqy6+/yVhZKT3B/QpP1BZaesGqasf09HPOBzRarcDIFH0WwXlXQfE7q7ipxK4MSiC5DIBWURCny6fw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-router": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.5.tgz", + "integrity": "sha512-dTgvcXDOrLPrlLHrcZAqWveiK1hMSqN+rGAJzegP8HtmNkfRxOoshGWBNX3ZJ0cZjOHkRdlUJtaIhZMLLyGyPw==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.5.tgz", + "integrity": "sha512-9HcfDMU6JJ/fp6gJZYGwNE6RknVGS4kBjH1HkNw959mCJi70TVwdipQWv2FEol9uGpi+SZTFtVpJPtEQfayeOw==", + "license": "MIT", + "dependencies": { + "react-router": "7.18.5" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rolldown": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.15.tgz", + "integrity": "sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.155.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.15", + "@rolldown/binding-android-arm64": "1.2.15", + "@rolldown/binding-darwin-arm64": "1.2.15", + "@rolldown/binding-darwin-x64": "1.2.15", + "@rolldown/binding-freebsd-x64": "1.2.15", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.15", + "@rolldown/binding-linux-arm64-gnu": "1.2.15", + "@rolldown/binding-linux-arm64-musl": "1.2.15", + "@rolldown/binding-linux-ppc64-gnu": "1.2.15", + "@rolldown/binding-linux-s390x-gnu": "1.2.15", + "@rolldown/binding-linux-x64-gnu": "1.2.15", + "@rolldown/binding-linux-x64-musl": "1.2.15", + "@rolldown/binding-openharmony-arm64": "1.2.15", + "@rolldown/binding-win32-arm64-msvc": "1.2.15", + "@rolldown/binding-win32-x64-msvc": "1.2.15" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sass": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.107.0.tgz", + "integrity": "sha512-+whPilvVNoAD57xvdIPLQT0gXo4RD1lHYw+Uw8zYHlojaeaMDxK14tc0JmEsz/XMns48h3lpypisMP+3E8eHQA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "chokidar": "^5.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-embedded": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.107.0.tgz", + "integrity": "sha512-0SWHSg0yNgjZ1Yxw5QYd7fHla1ilqaXEtDyc0VgW+xMjuxsjRmLR7s9+OOCXYqjjNhjT20Oxl6I1+9ylqnw5XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.5.0", + "colorjs.io": "^0.7.0", + "immutable": "^5.1.5", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "sass-embedded-all-unknown": "1.107.0", + "sass-embedded-android-arm": "1.107.0", + "sass-embedded-android-arm64": "1.107.0", + "sass-embedded-android-riscv64": "1.107.0", + "sass-embedded-android-x64": "1.107.0", + "sass-embedded-darwin-arm64": "1.107.0", + "sass-embedded-darwin-x64": "1.107.0", + "sass-embedded-linux-arm": "1.107.0", + "sass-embedded-linux-arm64": "1.107.0", + "sass-embedded-linux-musl-arm": "1.107.0", + "sass-embedded-linux-musl-arm64": "1.107.0", + "sass-embedded-linux-musl-riscv64": "1.107.0", + "sass-embedded-linux-musl-x64": "1.107.0", + "sass-embedded-linux-riscv64": "1.107.0", + "sass-embedded-linux-x64": "1.107.0", + "sass-embedded-unknown-all": "1.107.0", + "sass-embedded-win32-arm64": "1.107.0", + "sass-embedded-win32-x64": "1.107.0" + } + }, + "node_modules/sass-embedded-all-unknown": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.107.0.tgz", + "integrity": "sha512-Vll3OTXluDCFj1p/QZSFZrRR9sUQ+PkZXn8d9MJEz4Zatozkdxy0AhUVvCjODbonl2/r5iSt4gpoZm3OW9e1tA==", + "cpu": [ + "!arm", + "!arm64", + "!riscv64", + "!x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "sass": "1.107.0" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.107.0.tgz", + "integrity": "sha512-BIy4QhqOC9ltqdQLKbyJXS4QRpoEQFrQxAizYKkDmgAlb4CsUkcPeW2g7T8lEdRD5CC4TNEF1GWisdc2wCN5Vw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.107.0.tgz", + "integrity": "sha512-khlf9rBiUvWILhOutf5EdApHCf9NtZN0xrPopbrW1vSSlCf84aUJ2L+d/EdgqrBMDpjETc1brjOyOl9j2qP0Rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.107.0.tgz", + "integrity": "sha512-jaoqQKgEOTQghqApzNZRqMIYhRnGVFndPK7QZFLkS4PBBBNj2EMrpY/jCh4k2ATpk30S1k7EjMbvHW7lJqCl+Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.107.0.tgz", + "integrity": "sha512-0ETPwPcwtX1/eEsBkTat4jSBtintmQmc+N/An8HHfqymRQsdPfxwnk7WpTHMdVXSFkv6DfzkjFlRmZtXTfSsFA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.107.0.tgz", + "integrity": "sha512-apPK51fNRBOdGxpHNp+6X+YTTt6km3bZO3IB/Z987ASaDtdxjQ2U1LP9smbea6GzJpujuxWUuvw/l4vzLN9Y6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.107.0.tgz", + "integrity": "sha512-d1U7XHQuQb2iuSf+5NxjMMSt7I9yCYGQw3K4NZd32yf5tuhFMTeyiu3nf0+HvLavD2jAkOiykJtbm+zYnwd5HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.107.0.tgz", + "integrity": "sha512-JOk4lk1iYKujZOKXLG1EFWvBxtqN/2mDe6vYw2WJAK1KG1B5Z1l9zRPBXRv+H+YXbObGb8OH6S0AgIvZbBrI0w==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.107.0.tgz", + "integrity": "sha512-HcA2wCqXtcRuGIzS0Qfgk0QQCP9B+57fPWstKozMl/Penl1pXVBA98Ilo64A8wPd2WHYSsY0u5WOAQa3h06IcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.107.0.tgz", + "integrity": "sha512-n1ujZwaQzjQ8etH9dm0uOxNkdnIu/bpY0j0TkrWmdCpsqNCob/noyWbuTofZ3whfz2IijHb9d1YAb/CEqDKoig==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.107.0.tgz", + "integrity": "sha512-waH4HH7o0/7uM3M6vp/SisW63JnR2VLU3B7N2sB/+P9C9GLd4ei6X8AzOzemMXDbRSpkM78vFtF9hOOT4HIHjQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.107.0.tgz", + "integrity": "sha512-ONS/JfxvUn9KyLIsWH+Q6R0axjhRgtk80jfpOwFltqZBF20lXCEdf9PyoDaE0z+4RebK9D5jHzn8FhciIG9PSA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.107.0.tgz", + "integrity": "sha512-iTqvfT21RdnSSF/Fqnlln1gMDF97BfJhabxmz7f3Th0X1YSPX3+XwPLUH1r8RiSIIXcckYGY5adKs/P8iJVgWA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.107.0.tgz", + "integrity": "sha512-aP3z4aXO7kUR7vwcERe7j6EHVEKJPkC1t8JAJJo9wIintYmUnXKP67Tm5Llfp6r5XhJpUFMjCwrBixtfA43+/Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.107.0.tgz", + "integrity": "sha512-fhJs/cx2cV8e7wn8ybnjJrWxsLb9YVALksGE1shOJ5fCE1c4H2K6LkcieDK8gKNdqzcihFW8amIoGuMh1fY2yQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-unknown-all": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.107.0.tgz", + "integrity": "sha512-vjRXQZn8Dek8GqwTZ52vh+YTZLtoH9X8zGcBRKyt5a9yNStoE5N3KXIaeD/2z5jK/Vo9XrsqKJalujugDQnShA==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "!android", + "!darwin", + "!linux", + "!win32" + ], + "dependencies": { + "sass": "1.107.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.107.0.tgz", + "integrity": "sha512-4c8GS5WJcgfDl8ELCqLBw+sNzCMEHhLQ3S8mGp7rxnCcddLmOJwrgPQBPdoOhkWomURzPn8S1BWvUbfgiyAM9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.107.0.tgz", + "integrity": "sha512-RJGBevID/0o1bVboKlzvCZkliIJ8I4ETE4jVKiAF673MrAS3ywl69hKeaWE6Ssl1yPlkrepCTqLSJ8tFngY5Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", + "license": "MIT" + }, + "node_modules/set-cookie-parser": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.3.tgz", + "integrity": "sha512-irZHtTqurLna57KQG/s+fzOwv/J6XSH4cs8M/vsrY3uCaQ3S6+QJguAH0WdN47SXlk82voMZ4naWMQf8fdEoIg==", + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/sync-child-process": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.1.1.tgz", + "integrity": "sha512-54zMOnH5qgjdKW8SGpCx3daSP+v+TtTfOxgPdhUE3P0hytMMpknZfP67S4JeRcx5IQRWJERz6890yO4dkTywww==", + "dev": true, + "license": "MIT", + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.2.0.tgz", + "integrity": "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/validator": { + "version": "13.15.35", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.35.tgz", + "integrity": "sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.5.tgz", + "integrity": "sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.7", + "postcss": "^8.5.30", + "rolldown": "~1.2.14", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.7.1 || ^0.8.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + } + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/package.json b/06_react/uebungen/u19_chuck-norris-api-stefan/package.json new file mode 100644 index 0000000..bfd61cd --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/package.json @@ -0,0 +1,29 @@ +{ + "name": "u19-chuck-norris-api", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "oxlint", + "preview": "vite preview" + }, + "dependencies": { + "axios": "^1.21.0", + "bootstrap": "^5.3.8", + "react": "^19.3.1", + "react-dom": "^19.3.1", + "react-icons": "^5.7.0", + "react-router-dom": "^7.18.5", + "validator": "^13.15.35" + }, + "devDependencies": { + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", + "@vitejs/plugin-react": "^6.1.2", + "oxlint": "^1.90.0", + "sass-embedded": "^1.107.0", + "vite": "^8.3.5" + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/public/favicon.svg b/06_react/uebungen/u19_chuck-norris-api-stefan/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/public/icons.svg b/06_react/uebungen/u19_chuck-norris-api-stefan/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/App.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/App.jsx new file mode 100644 index 0000000..8285606 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/App.jsx @@ -0,0 +1,19 @@ +import Navbar from './components/navs/Navbar'; +import Router from './routes/Router'; +import HeaderMain from './components/headers/HeaderMain'; +import FooterMain from './components/footers/FooterMain'; + +function App() { + return ( + <> + {/* */} + +
+ +
+ {/* */} + + ); +} + +export default App; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/assets/react.svg b/06_react/uebungen/u19_chuck-norris-api-stefan/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/assets/vite.svg b/06_react/uebungen/u19_chuck-norris-api-stefan/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/badjokes/ChuckNorrisJokes.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/badjokes/ChuckNorrisJokes.jsx new file mode 100644 index 0000000..aa62c4d --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/badjokes/ChuckNorrisJokes.jsx @@ -0,0 +1,93 @@ +import { useState, useEffect } from 'react'; + +import './bad.scss'; +import catLoader from './loading.gif'; + +const ChuckNorrisJokes = () => { + const [chuck, setChuck] = useState(''); + + const [error, setError] = useState(''); + const [isLoading, setLoading] = useState(false); + + const [reset, setReset] = useState(0); + + const [cat, setCat] = useState(null); + + const loadingCat = catLoader; + + useEffect(() => { + const catty = document.querySelector('.catty'); + let chucky = ''; + + setLoading(true); + setCat(null); + + fetch('https://cataas.com/cat?json=true') + .then((res) => { + if (!res.ok) { + throw new Error(`${res.status}: ${res.statusText}`); + } + return res.json(); + }) + .then((cat) => { + console.log('cat', cat); + setCat(cat.url); + }) + .catch((error) => { + console.error(error); + }); + + fetch('https://api.chucknorris.io/jokes/random') + .then((res) => { + if (!res.ok) { + throw new Error(`${res.status}: ${res.statusText}`); + } + + return res.json(); + }) + .then((data) => { + chucky = data.value; + }) + .catch((error) => { + console.error(error); + setError(error); + }); + + const cattyLoaded = () => { + setChuck(chucky); + setLoading(false); + }; + + catty.addEventListener('load', cattyLoaded); + + return () => { + catty.removeEventListener('load', cattyLoaded); + }; + }, [reset]); + + const handleClick = (e) => { + setError(''); + setReset(reset + 1); + }; + + return ( +
+ {error &&

error: {error}

} + +
+ {!isLoading &&

{chuck}

} + + {isLoading &&

...bitte warten...

} + + +
+ + {/* {!isLoading && cat && cat} */} + {isLoading && loading} + cat +
+ ); +}; +export default ChuckNorrisJokes; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/badjokes/bad.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/badjokes/bad.scss new file mode 100644 index 0000000..a00dd98 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/badjokes/bad.scss @@ -0,0 +1,31 @@ +.badjokes { + position: relative; + + .error { + color: red; + } + + .bad-jokes-incoming { + position: absolute; + top: 3rem; + left: 1rem; + right: 1rem; + padding: 0 1rem; + text-align: center; + } + + h1 { + color: beige; + font-size: 3rem; + text-shadow: 1px 1px 2px black; + } + + img { + display: block; + margin: 0 auto; + + &.loading { + visibility: collapse; + } + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/badjokes/loading.gif b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/badjokes/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..94f387743bfa3727008243d2c399fa3bddea5375 GIT binary patch literal 143815 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 BKZyVU literal 0 HcmV?d00001 diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/common/Badge.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/common/Badge.jsx new file mode 100644 index 0000000..df1b229 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/common/Badge.jsx @@ -0,0 +1,22 @@ +const Badge = (props) => { + const { text = '', variant = 'secondary', color } = props; + // const inline = typeof color !== 'undefined' ? { backgroundColor: color } : ''; + + // if (color) { + // return ( + // + // {text} + // + // ); + // } else { + // return {text}; + // } + + return ( + + {text} + + ); +}; + +export default Badge; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseContext.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseContext.jsx new file mode 100644 index 0000000..66c0a02 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseContext.jsx @@ -0,0 +1,18 @@ +import { useContext } from 'react'; +import ThemeContext from './theme-switcher/ThemeContext'; + +const ExampleUseContext = (props) => { + // const { } = props; + + const theme = useContext(ThemeContext); + + return ( +

+

useContext

+

+ The theme of this component is: {theme} +

+
+ ); +}; +export default ExampleUseContext; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseEffectDidUpdate.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseEffectDidUpdate.jsx new file mode 100644 index 0000000..1250041 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseEffectDidUpdate.jsx @@ -0,0 +1,30 @@ +import { useState, useEffect } from 'react'; +import { FaPlus } from 'react-icons/fa6'; +const ExampleUseEffectDidUpdate = (props) => { + // const { } = props; + + const [value, setValue] = useState(0); + + useEffect(() => { + // mount + console.log('first render and rerender: ', value); + + return () => { + // unmount + }; + }, [value]); // <-- wenn state sich ändert, wird useEffect erneut ausgeführt (did update) + + return ( +
+

The value is: {value}

+ +
+ ); +}; +export default ExampleUseEffectDidUpdate; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseEffectMount.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseEffectMount.jsx new file mode 100644 index 0000000..a29c2c1 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseEffectMount.jsx @@ -0,0 +1,24 @@ +import { useEffect } from 'react'; + +const ExampleUseEffectMount = (props) => { + // const { } = props; + + console.log(document.querySelector('#box')); // null + useEffect(() => { + //mount + console.log(document.querySelector('#box')); //
// JSX Element liegt als gerendertes HTML vor. + + document.querySelector('#box').style.color = 'white'; + document.querySelector('#box').style.backgroundColor = '#2a2a2a'; + document.querySelector('#box').style.padding = '1rem'; + }, []); + + return ( +
+
+

Box was rendered

+
+
+ ); +}; +export default ExampleUseEffectMount; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseEffectUnMount.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseEffectUnMount.jsx new file mode 100644 index 0000000..112a639 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseEffectUnMount.jsx @@ -0,0 +1,36 @@ +import { useState, useEffect } from 'react'; + +const ExampleUseEffectUnMount = (props) => { + // const { } = props; + + const [timer, setTimer] = useState(0); + + useEffect(() => { + // mount + const interval = setInterval(() => { + setTimer((time) => time + 1); + }, 1000); + + window.addEventListener('resize', handleResize); + + return () => { + // cleanup - unmount + clearInterval(interval); + window.removeEventListener('resize', handleResize); + }; + }, []); // didupdate + + // EventHandler + const handleResize = (e) => { + // console.log('Event: ', e); + const { x, y, width: w, height: h } = document.body.getBoundingClientRect(); // window.outerWidth, + console.log({ x, y, w: parseInt(w), h: parseInt(h) }); + }; + + return ( +
+

Timer: {timer}

+
+ ); +}; +export default ExampleUseEffectUnMount; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseId.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseId.jsx new file mode 100644 index 0000000..90ec7f8 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseId.jsx @@ -0,0 +1,21 @@ +import { useId } from 'react'; +// import { v4 as uid} from 'uuid'; +const ExampleUseId = (props) => { + // const { } = props; + + const id = useId(); // _r_1 + // const id = uid(); // von uuid ⇨ 'b18794e8-5d0d-417c-b361-ba38e78411b4' + + return ( +
+

+ ID: {id} +

+
+ + +
+
+ ); +}; +export default ExampleUseId; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseReducer.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseReducer.jsx new file mode 100644 index 0000000..d44cb1a --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseReducer.jsx @@ -0,0 +1,77 @@ +import { useReducer } from 'react'; +import { FaPlus, FaMinus } from 'react-icons/fa6'; + +const initialState = { + counter: 0, + // more props.... +}; + +// Reducer Funktion verwaltet das state Objekt. Über diese Funktion lässt sich das "komplexere" state-Objekt gezielt verändern. +function reducer(state, action) { + // action Objekt hat immer folgende Eigenschaften: {type: 'ACTION_NAME', payload: changeValue } + const { type, payload = 1 } = action; + + switch (type) { + case 'INCREASE': + return { ...state, counter: state.counter + 1 }; + + case 'DECREASE': + return { ...state, counter: state.counter - 1 }; + case 'DOUBLE': + return { ...state, counter: state.counter * 2 }; + case 'INC_VALUE': + return { ...state, counter: state.counter + payload }; + default: + console.warn('Action Type not found'); + return state; + } +} + +const ExampleUseReducer = (props) => { + // const { } = props; + + // Hooks - Top Level + // const [counter, setCounter] = useState(0); + const [state, dispatch] = useReducer(reducer, initialState); + + const handleClick = (e) => { + const btn = e.currentTarget; + const label = btn.ariaLabel; // btn.getAttribute('aria-label') + switch (label.toLowerCase()) { + case 'increase': + dispatch({ type: 'INCREASE' }); + break; + case 'decrease': + dispatch({ type: 'DECREASE' }); + break; + case 'double': + dispatch({ type: 'DOUBLE' }); + break; + default: //nothing + } + }; + + const handleClickIncValue = (e) => { + dispatch({ type: 'INC_VALUE', payload: 5 }); + }; + + return ( +
+ Counter: {state.counter} + + + + +
+ ); +}; +export default ExampleUseReducer; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseState.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseState.jsx new file mode 100644 index 0000000..1a93578 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/ExampleUseState.jsx @@ -0,0 +1,36 @@ +import { useState } from 'react'; +import { FaPlus, FaMinus } from 'react-icons/fa6'; + +const ExampleUseState = (props) => { + // const { } = props; + const [counter, setCounter] = useState(0); + + const handleClick = (e) => { + const btn = e.currentTarget; + const label = btn.ariaLabel; // btn.getAttribute('aria-label') + switch (label.toLowerCase()) { + case 'increase': + setCounter(counter + 1); + break; + case 'decrease': + setCounter((prevState) => { + return prevState - 1; + }); + break; + default: //nothing + } + }; + + return ( +
+ Counter: {counter} + + +
+ ); +}; +export default ExampleUseState; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/theme-switcher/ThemeContext.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/theme-switcher/ThemeContext.jsx new file mode 100644 index 0000000..dda5e98 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/theme-switcher/ThemeContext.jsx @@ -0,0 +1,8 @@ +import { createContext } from 'react'; + +export const THEME_DEFAULT_VALUE = 'light'; + +const ThemeContext = createContext(THEME_DEFAULT_VALUE); +// createContext -> JSX-Element mit value Attribut +// ... +export default ThemeContext; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/theme-switcher/ThemeProvider.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/theme-switcher/ThemeProvider.jsx new file mode 100644 index 0000000..fa141c5 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/examples/theme-switcher/ThemeProvider.jsx @@ -0,0 +1,25 @@ +import { useState } from 'react'; +import ThemeContext, { THEME_DEFAULT_VALUE } from './ThemeContext'; + +const ThemeProvider = (props) => { + const { children } = props; + + console.log(ThemeContext._currentValue); // 'light' <- _currentValue beinhaltet initialWert. Soll aber in production Umgebung nicht verwendet werden, da kein offizieller Standard. + + const [theme, setTheme] = useState(THEME_DEFAULT_VALUE); + + const handleToggleTheme = (e) => { + console.log('toggle theme'); + setTheme((prevState) => (prevState === 'light' ? 'dark' : 'light')); + }; + + return ( + + + {children} + + ); +}; +export default ThemeProvider; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/footers/FooterMain.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/footers/FooterMain.jsx new file mode 100644 index 0000000..5006bda --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/footers/FooterMain.jsx @@ -0,0 +1,78 @@ +const FooterMain = (props) => { + // const { } = props; + + return ( + + ); +}; +export default FooterMain; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/forms/FormContact.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/forms/FormContact.jsx new file mode 100644 index 0000000..9f2d181 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/forms/FormContact.jsx @@ -0,0 +1,159 @@ +import { useState } from 'react'; +import validate from '../../utils/validators/validate'; + +const INITIAL_FORM_DATA = { + firstname: '', // + lastname: '', + email: '', + message: '', +}; + +const FormContact = (props) => { + // const { } = props; + + const [formData, setFormData] = useState(INITIAL_FORM_DATA); + + const [errors, setErrors] = useState({}); + + // EventHandlers ======= + const handleSubmit = (e) => { + e.preventDefault(); // Standardverhalten (Versenden vom Formular) unterbinden. + + const form = e.currentTarget; + + const errors = validate(formData); + + if (Object.keys(errors).length === 0) { + console.log('Form submitted ....'); + // TODO: send over AJAX/Fetch + form.reset(); + setFormData(INITIAL_FORM_DATA); + setErrors({}); + } else { + console.warn('Form submit error'); + setErrors(errors); + } + }; + + const handleChange = (e) => { + const { name, value } = e.target; + + setFormData((state) => ({ ...state, [name]: value })); + + // console.log({ [e.target.name]: e.target.value }); + // console.log('Formdata', formData); + }; + + const handleBlur = (e) => { + const { name, value } = e.target; + const validationErrors = validate({ ...formData, [name]: value }); + + setErrors((state) => { + const nextErrors = { ...state }; + + if (validationErrors[name]) { + nextErrors[name] = validationErrors[name]; + } else { + delete nextErrors[name]; + } + + return nextErrors; + }); + }; + + return ( +
+
+
+
+ + +
OK
+
{errors?.firstname}
+
+
+
+
+ + +
OK
+
{errors?.lastname}
+
+
+
+ +
+
+
+ + +
OK
+
{errors?.email}
+
+
+
+ +
+
+
+ + +
OK
+
{errors?.message}
+
+
+
+ +
+
+
+ +
+
+
+
+ ); +}; +export default FormContact; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/forms/FormNewsletter.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/forms/FormNewsletter.jsx new file mode 100644 index 0000000..d8c7ec7 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/forms/FormNewsletter.jsx @@ -0,0 +1,35 @@ +const FormNewsletter = (props) => { + // const { } = props; + + // EventHandler + const handleSubmit = (e) => { + e.preventDefault(); // Standardverhalten unterbinden + console.log('Event: ', e); + }; + + return ( +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ ); +}; +export default FormNewsletter; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/headers/HeaderMain.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/headers/HeaderMain.jsx new file mode 100644 index 0000000..acbddb2 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/headers/HeaderMain.jsx @@ -0,0 +1,12 @@ +import LogoMain from '../logos/LogoMain'; + +const HeaderMain = () => { + return ( +
+
+ +
+
+ ); +}; +export default HeaderMain; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/icons/Logo.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/icons/Logo.jsx new file mode 100644 index 0000000..dd3b6f0 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/icons/Logo.jsx @@ -0,0 +1,48 @@ +const Logo = () => { + return ( + + + + + + + + + ); +}; +export default Logo; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/inputs/InputAmount.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/inputs/InputAmount.jsx new file mode 100644 index 0000000..d6ac3f5 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/inputs/InputAmount.jsx @@ -0,0 +1,61 @@ +import { useState } from 'react'; +import { FaMinus, FaPlus } from 'react-icons/fa6'; + +const InputAmount = (props) => { + const [amount, setAmount] = useState(0); + + // const { } = props; + + // Eventhandler + const handleChange = (e) => { + const value = Number(e.target.value); // e.target.valueAsNumber + + // Guard + if (isNaN(value)) return; + + setAmount(value); + }; + const handleClick = (e) => { + console.log('Event: ', e); + console.log(e.currentTarget.name); + switch (e.currentTarget.name) { + case 'increase': + setAmount((prevState) => prevState + 1); + console.log('inc'); + break; + case 'decrease': + setAmount(amount - 1); + console.log('dec'); + break; + default: //nothing + } + }; + + return ( +
+
+ + + + + + + + +
+
+ ); +}; +export default InputAmount; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/lists/ListTodo.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/lists/ListTodo.jsx new file mode 100644 index 0000000..6ac253e --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/lists/ListTodo.jsx @@ -0,0 +1,51 @@ +import { useEffect, useState } from 'react'; + +const ListTodo = (props) => { + // const { } = props; + + const [todos, setTodos] = useState([]); + + useEffect(() => { + fetch('https://dummyjson.com/todos/random/6') + .then((res) => { + if (!res.ok) { + throw new Error('HTTP-Request went wrong'); + } + return res.json(); // -> Promise HTTP-Response->Body + }) + .then((data) => { + setTodos(data); + }) + .catch((err) => { + console.error(err); + }); + + return () => { + // cleanup + }; + }, []); + + return ( +
    + {todos.length > 0 && + todos.map(({ completed, id, todo }, idx) => ( +
  • +
    + + +
    +
  • + ))} +
+ ); +}; +export default ListTodo; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/lists/ListUser.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/lists/ListUser.jsx new file mode 100644 index 0000000..ceb3878 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/lists/ListUser.jsx @@ -0,0 +1,53 @@ +import { useEffect, useState } from 'react'; +import axios from 'axios'; + +const ListUser = (props) => { + // const { } = props; + + const [users, setUsers] = useState([]); + + useEffect(() => { + const fetchUsers = async () => { + try { + const { data } = await axios.get('https://dummyjson.com/users?limit=5&select=firstName,lastName,age,email'); + + if (!data) throw Error('Something went wrong'); + setUsers(data.users); + } catch (error) { + console.error(error); + throw Error(`Error: ${error}`); + } + }; + + fetchUsers(); + + // axios + // .get('https://dummyjson.com/users?limit=10&select=firstName,lastName,age,email') + // .then(({ data }) => { + // setUsers(data.users); + // }) + // .catch((err) => { + // console.error(err); + // }); + + return () => {}; + }, []); + + return ( +
    + {users.length > 0 && + users.map(({ firstName, lastName, age, email }, idx) => ( +
  • +

    + Name: {firstName} {lastName} +
    + Age: {age} +
    + Email: {email} +

    +
  • + ))} +
+ ); +}; +export default ListUser; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/logos/LogoMain.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/logos/LogoMain.jsx new file mode 100644 index 0000000..2649b9e --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/logos/LogoMain.jsx @@ -0,0 +1,15 @@ +import Logo from '../icons/Logo'; + +// import Logo from '/logo-js.min.svg'; +const LogoMain = (props) => { + // const { } = props; + + return ( +
+ {/* JS Course */} + +
Firmen Slogan
+
+ ); +}; +export default LogoMain; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/navs/Navbar.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/navs/Navbar.jsx new file mode 100644 index 0000000..1dc0796 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/components/navs/Navbar.jsx @@ -0,0 +1,110 @@ +import { NavLink } from 'react-router-dom'; + +function Navbar() { + return ( + + ); +} + +export default Navbar; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/layouts/Layout.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/layouts/Layout.jsx new file mode 100644 index 0000000..8b55dbf --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/layouts/Layout.jsx @@ -0,0 +1,20 @@ +import { Outlet } from 'react-router-dom'; +import Navbar from '../components/navs/Navbar'; + +const Layout = (props) => { + // const { } = props; + + return ( + <> +
Header
+ +
+ +
+
+

© copyright 2026

+
+ + ); +}; +export default Layout; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/main.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/main.jsx new file mode 100644 index 0000000..672352b --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/main.jsx @@ -0,0 +1,18 @@ +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import { BrowserRouter } from 'react-router-dom'; + +import App from './App.jsx'; + +import 'bootstrap'; // js +import './styles/main.scss'; + +const root = createRoot(document.getElementById('root')); + +root.render( + + + + + , +); diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/AboutPage.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/AboutPage.jsx new file mode 100644 index 0000000..8112904 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/AboutPage.jsx @@ -0,0 +1,14 @@ +function AboutPage() { + return ( +
+

About

+

+ sit amet consectetur adipisicing elit. Minima, voluptatibus nobis molestiae, dignissimos id dolores minus iste + quisquam harum vitae rem dolorem debitis natus asperiores amet rerum ratione laboriosam quam. Sit corporis + voluptate laboriosam doloribus incidunt voluptatibus repellat. Excepturi vitae perferendis odit +

+
+ ); +} + +export default AboutPage; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/ApiPage.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/ApiPage.jsx new file mode 100644 index 0000000..2715797 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/ApiPage.jsx @@ -0,0 +1,20 @@ +import ListTodo from '../components/lists/ListTodo'; +import ListUser from '../components/lists/ListUser'; + +const ApiPage = (props) => { + // const { } = props; + + return ( +
+
+

APIs auslesen mit React

+

Users

+ +
+

Todos

+ +
+
+ ); +}; +export default ApiPage; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/BadJokesPage.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/BadJokesPage.jsx new file mode 100644 index 0000000..cc0108f --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/BadJokesPage.jsx @@ -0,0 +1,15 @@ +import ChuckNorrisJokes from '../components/badjokes/ChuckNorrisJokes'; + +const BadJokesPage = (props) => { + // const { } = props; + + return ( +
+
+

Wie man das Publikum nicht zum lachen bringt

+ +
+
+ ); +}; +export default BadJokesPage; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/ContactPage.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/ContactPage.jsx new file mode 100644 index 0000000..bfbe7be --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/ContactPage.jsx @@ -0,0 +1,20 @@ +import FormContact from '../components/forms/FormContact'; + +function ContactPage() { + return ( +
+

Kontakt

+

+ Hast du Fragen? Schreib uns eine E-Mail: +
+ kontakt@example.com +
+

+ +
+ +
+ ); +} + +export default ContactPage; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/HomePage.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/HomePage.jsx new file mode 100644 index 0000000..6df6c75 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/HomePage.jsx @@ -0,0 +1,27 @@ +function HomePage() { + return ( + <> +
+
+
+

Übung 19: Chuck Norris-Witze-API

+

+ Erstelle eine neue Komponente ChuckNorrisJokes.jsx im src/components-Ordner, die zufällige Chuck + Norris-Witze von{' '} + + https://api.chucknorris.io/jokes/random + {' '} + abruft und anzeigt. Verwende die fetch-API oder die axios-Bibliothek, um die Daten abzurufen. Behandle Lade- + und Fehlerzustände in der Komponente. +

+

+ Gestalte die Komponente so, dass sie einen Hintergrundgrafik enthält und der Witz in großer Schrift + angezeigt wird. Füge einen Button hinzu, um einen neuen Witz abzurufen. +

+
+
+ + ); +} + +export default HomePage; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/UserPage.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/UserPage.jsx new file mode 100644 index 0000000..3d35b61 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/UserPage.jsx @@ -0,0 +1,24 @@ +import { Outlet } from 'react-router-dom'; + +const UserPage = (props) => { + // const { } = props; + + return ( +
+
+
+

User

+

The nested user site:

+
+
+
+ +
+
+

© copyright 2026

+
+
+
+ ); +}; +export default UserPage; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/UserProfilePage.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/UserProfilePage.jsx new file mode 100644 index 0000000..053f8ce --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/pages/UserProfilePage.jsx @@ -0,0 +1,19 @@ +import { useParams } from 'react-router-dom'; +import Badge from '../components/common/Badge'; + +function UserProfilePage() { + const { userId } = useParams(); + + return ( +
+

+ User Profile +

+

+ sit amet consectetur adipisicing elit. Minima, voluptatibus nobis molestiae, dignissimos id dolores minus iste +

+
+ ); +} + +export default UserProfilePage; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/routes/Router.jsx b/06_react/uebungen/u19_chuck-norris-api-stefan/src/routes/Router.jsx new file mode 100644 index 0000000..7b67f9f --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/routes/Router.jsx @@ -0,0 +1,82 @@ +import { Navigate, Route, Routes } from 'react-router-dom'; +//import { createBrowserRouter, RouterProvider } from 'react-router-dom'; + +// Pages Komponenten +import HomePage from '../pages/HomePage'; +import AboutPage from '../pages/AboutPage'; +import ContactPage from '../pages/ContactPage'; +import UserProfilePage from '../pages/UserProfilePage'; +import UserPage from '../pages/UserPage'; +import ApiPage from '../pages/ApiPage'; +import ChuckNorrisJokes from '../components/badjokes/ChuckNorrisJokes'; + +// import Layout from '../layouts/Layout'; + +// Alternative Definition von Routes über "createBrowserRouter" mit Objekten +// const router = createBrowserRouter([ +// { path: '/', element: }, +// { path: '/about', element: }, +// { path: '/contact', element: }, +// ]); +// // App.jsx +// {/**/}; + +const checkAuth = () => { + const token = localStorage.getItem('token'); + return token && token === 'secret-token' ? true : false; +}; + +const ProtectedRoute = (props) => { + const { redirectTo = '/', children } = props; + + const isAuthenticated = checkAuth(); // => true | false // Authentication - Prüfung + + return isAuthenticated ? children : ; +}; + +const Router = () => { + // const { } = props; + + return ( + + {/* Static Routes */} + } /> + } /> + } /> + } /> + } /> + + {/* Dynamic Routes */} + Flights} /> + } /> + + {/* Nested Routes */} + {/* }> + } /> + } /> + } /> + */} + + }> + Index} /> + Profile} /> + Dashboard} /> + Settings} /> + + + {/* Protected Routes | Geschützte Routen */} + +
+

Admin Dashboard Page

+

Lorem ipsum dolor sit amet consectetur adipisicing elit. Vero atque eveniet hic temporibus

+
+ + } + >
+
+ ); +}; +export default Router; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/01_frameworks/_index.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/01_frameworks/_index.scss new file mode 100644 index 0000000..42edceb --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/01_frameworks/_index.scss @@ -0,0 +1,3 @@ +// Bootstrap 5.3.8 or 6 (6.0.0-alpha.1) straight from node_modules. +// @forward 'bootstrap/scss/bootstrap-grid' +@forward 'bootstrap/scss/bootstrap'; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_gloria-hallelujah-v24-latin.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_gloria-hallelujah-v24-latin.scss new file mode 100644 index 0000000..f46eba2 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_gloria-hallelujah-v24-latin.scss @@ -0,0 +1,8 @@ +// gloria-hallelujah-regular - latin +@font-face { + font-display: swap; + font-family: 'Gloria Hallelujah'; + font-style: normal; + font-weight: 400; + src: url('../../assets/fonts/gloria-hallelujah-v24-latin/gloria-hallelujah-v24-latin-regular.woff2') format('woff2'); +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_index.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_index.scss new file mode 100644 index 0000000..d377888 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_index.scss @@ -0,0 +1,3 @@ +// @forward 'gloria-hallelujah-v24-latin'; +// @forward 'lato-v25-latin'; +// @forward 'source-sans-3-v19-latin'; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_lato-v25-latin.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_lato-v25-latin.scss new file mode 100644 index 0000000..522cfda --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_lato-v25-latin.scss @@ -0,0 +1,89 @@ +// lato-100 - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: normal; + font-weight: 100; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-100.woff2') format('woff2'); +} + +// lato-100italic - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: italic; + font-weight: 100; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-100italic.woff2') format('woff2'); +} + +// lato-300 - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: normal; + font-weight: 300; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-300.woff2') format('woff2'); +} + +// lato-300italic - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: italic; + font-weight: 300; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-300italic.woff2') format('woff2'); +} + +// lato-regular - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: normal; + font-weight: 400; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-regular.woff2') format('woff2'); +} + +// lato-italic - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: italic; + font-weight: 400; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-italic.woff2') format('woff2'); +} + +// lato-700 - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: normal; + font-weight: 700; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-700.woff2') format('woff2'); +} + +// lato-700italic - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: italic; + font-weight: 700; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-700italic.woff2') format('woff2'); +} + +// lato-900 - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: normal; + font-weight: 900; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-900.woff2') format('woff2'); +} + +// lato-900italic - latin +@font-face { + font-display: swap; + font-family: 'Lato'; + font-style: italic; + font-weight: 900; + src: url('../../assets/fonts/lato-v25-latin/lato-v25-latin-900italic.woff2') format('woff2'); +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_source-sans-3-v19-latin.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_source-sans-3-v19-latin.scss new file mode 100644 index 0000000..b732c16 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/02_fonts/_source-sans-3-v19-latin.scss @@ -0,0 +1,143 @@ +// source-sans-3-200 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 200; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-200.woff2') format('woff2'); +} + +// source-sans-3-200italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 200; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-200italic.woff2') format('woff2'); +} + +// source-sans-3-300 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 300; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-300.woff2') format('woff2'); +} + +// source-sans-3-300italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 300; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-300italic.woff2') format('woff2'); +} + +// source-sans-3-regular - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 400; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-regular.woff2') format('woff2'); +} + +// source-sans-3-italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 400; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-italic.woff2') format('woff2'); +} + +// source-sans-3-500 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 500; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-500.woff2') format('woff2'); +} + +// source-sans-3-500italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 500; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-500italic.woff2') format('woff2'); +} + +// source-sans-3-600 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 600; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-600.woff2') format('woff2'); +} + +// source-sans-3-600italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 600; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-600italic.woff2') format('woff2'); +} + +// source-sans-3-700 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 700; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-700.woff2') format('woff2'); +} + +// source-sans-3-700italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 700; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-700italic.woff2') format('woff2'); +} + +// source-sans-3-800 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 800; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-800.woff2') format('woff2'); +} + +// source-sans-3-800italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 800; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-800italic.woff2') format('woff2'); +} + +// source-sans-3-900 - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: normal; + font-weight: 900; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-900.woff2') format('woff2'); +} + +// source-sans-3-900italic - latin +@font-face { + font-display: swap; + font-family: 'Source Sans 3'; + font-style: italic; + font-weight: 900; + src: url('../../assets/fonts/source-sans-3-v19-latin/source-sans-3-v19-latin-900italic.woff2') format('woff2'); +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_colors.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_colors.scss new file mode 100644 index 0000000..a550f3d --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_colors.scss @@ -0,0 +1,13 @@ +/* Color Theme Swatches in Hex */ +$color-1: #5c4b51; +$color-2: #8cbeb2; +$color-3: #f2ebbf; +$color-4: #f3b562; +$color-5: #f06060; + +$color-red: $color-5; +$color-white: white; // falls weiß geändert wird z.B.: #f8f8f8 +$color-black: #101010; + +$color-dark-blue: #283e4a; +$linear-gradient-dark: linear-gradient(180deg, rgba(40, 62, 74, 1) 0%, rgba(24, 32, 38, 1) 100%); diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_index.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_index.scss new file mode 100644 index 0000000..aaf4e12 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_index.scss @@ -0,0 +1,2 @@ +// Variables (colors, typography) are pulled in by the partials that need them via @use. +@forward 'theme'; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_theme.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_theme.scss new file mode 100644 index 0000000..26b9863 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_theme.scss @@ -0,0 +1,52 @@ +@use 'typography' as *; + +// Allgemeine Formatierung +*, +html { + box-sizing: border-box; +} + +html, +body, +#root, +#app { + height: 100%; +} +// Sticky Footer +body, +#root, +#app { + display: flex; + flex-direction: column; +} + +main, +#main { + flex: 1 0 auto; +} + +body > footer, +.footer-main { + flex-shrink: 0; +} +// sticky end + +body { + margin: 0; + padding: 0; + font-family: $font-copy; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: $font-headline; + font-weight: 600; +} + +blockquote { + font-family: $font-quote; +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_typography.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_typography.scss new file mode 100644 index 0000000..7c9b095 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/03_base/_typography.scss @@ -0,0 +1,9 @@ +$fallback-serif: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif; +$fallback-sans-serif: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + +$font-headline: 'Lato', $fallback-serif; +$font-subclaim: $fallback-sans-serif; + +$font-menu: 'Source Sans 3', $fallback-sans-serif; +$font-copy: 'Source Sans 3', $fallback-sans-serif; +$font-quote: 'Gloria Hallelujah', $fallback-serif; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/04_plugins/_index.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/04_plugins/_index.scss new file mode 100644 index 0000000..bd5ba6a --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/04_plugins/_index.scss @@ -0,0 +1,7 @@ +// @use '@fortawesome/fontawesome-free/scss/variables' with ( +// $font-path: '@fa-webfonts' +// ); +// @use '@fortawesome/fontawesome-free/scss/fontawesome'; +// @use '@fortawesome/fontawesome-free/scss/solid'; + +// @use 'toastify-1.12/toastify'; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/04_plugins/toastify-1.12/_toastify.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/04_plugins/toastify-1.12/_toastify.scss new file mode 100644 index 0000000..e359a14 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/04_plugins/toastify-1.12/_toastify.scss @@ -0,0 +1,88 @@ +/*! + * Toastify js 1.12.0 + * https://github.com/apvarun/toastify-js + * @license MIT licensed + * + * Copyright (C) 2018 Varun A P + */ + +.toastify { + padding: 12px 20px; + color: #ffffff; + display: inline-block; + box-shadow: + 0 3px 6px -1px rgba(0, 0, 0, 0.12), + 0 10px 36px -4px rgba(77, 96, 232, 0.3); + background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5); + background: linear-gradient(135deg, #73a5ff, #5477f5); + position: fixed; + opacity: 0; + transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1); + border-radius: 2px; + cursor: pointer; + text-decoration: none; + max-width: calc(50% - 20px); + z-index: 2147483647; +} + +.toastify.on { + opacity: 1; +} + +.toast-close { + background: transparent; + border: 0; + color: white; + cursor: pointer; + font-family: inherit; + font-size: 1em; + opacity: 0.4; + padding: 0 5px; +} + +.toastify-right { + right: 15px; +} + +.toastify-left { + left: 15px; +} + +.toastify-top { + top: -150px; +} + +.toastify-bottom { + bottom: -150px; +} + +.toastify-rounded { + border-radius: 25px; +} + +.toastify-avatar { + width: 1.5em; + height: 1.5em; + margin: -7px 5px; + border-radius: 2px; +} + +.toastify-center { + margin-left: auto; + margin-right: auto; + left: 0; + right: 0; + max-width: fit-content; + max-width: -moz-fit-content; +} + +@media only screen and (max-width: 360px) { + .toastify-right, + .toastify-left { + margin-left: auto; + margin-right: auto; + left: 0; + right: 0; + max-width: fit-content; + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_button.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_button.scss new file mode 100644 index 0000000..1660f6b --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_button.scss @@ -0,0 +1,17 @@ +button, +input { + &.btn-custom { + background-color: #f0f0f0; + color: #333; + border: 1px solid #ccc; + padding: 8px 16px; + border-radius: 0px; + margin: 3px; + &:hover, + &:focus { + background-color: #e0e0e0; + color: #333; + border: 1px solid #ccc; + } + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_chuck-norris-joke.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_chuck-norris-joke.scss new file mode 100644 index 0000000..232b479 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_chuck-norris-joke.scss @@ -0,0 +1,38 @@ +@use '../03_base/colors' as *; + +.chuck-norris-joke { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; + min-height: calc(100vh - 3.5rem); // full screen below the navbar + background: #555 url('../../assets/img/concrete-bg.jpg') center no-repeat fixed; + background-size: cover; + + &::after { + content: ''; + position: absolute; + z-index: 1; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: radial-gradient(circle, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.8) 100%); + } + + > * { + position: relative; + z-index: 2; + } + + .joke-text { + color: $color-white; + text-align: center; + font-size: 3rem; + max-width: 80%; + padding: 2rem; + text-shadow: 2px 2px 5px rgba(black, 0.5); + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_footerMain.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_footerMain.scss new file mode 100644 index 0000000..fd73f7c --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_footerMain.scss @@ -0,0 +1,45 @@ +@use '../03_base/colors' as *; + +.footer-main { + background-color: $color-black; + background: $linear-gradient-dark; + padding: 3rem 0; + [class^='col'] { + color: $color-white; + a { + color: $color-white; + } + h2, + h3, + h4, + h5, + h6 { + font-size: 1.5rem; + color: $color-2; + padding: 0.5rem 0; + margin-bottom: 1rem; + letter-spacing: 2px; + } + } + // Mobile First + .row { + flex-direction: column; + > div { + &:nth-child(1) { + order: 3; + } + &:nth-child(2) { + order: 2; + } + &:nth-child(3) { + order: 1; + } + } + } + @media (min-width: 992px) { + // @include media-breakpoint-up(md) { + .row { + flex-direction: row; + } + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_header-main.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_header-main.scss new file mode 100644 index 0000000..2884477 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_header-main.scss @@ -0,0 +1,15 @@ +.m-header-main { + width: 100%; + height: 400px; + + // https://cssreference.io/property/background/ + background: #efefef url('../../assets/img/header-bg.webp') center no-repeat border-box; + background-size: cover; + + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + + border: 20px solid rgba(white, 0.25); +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_index.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_index.scss new file mode 100644 index 0000000..484b0de --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_index.scss @@ -0,0 +1,8 @@ +@forward 'button'; +// @forward 'chuck-norris-joke'; +@forward 'footerMain'; +@forward 'header-main'; +@forward 'input-amount'; +@forward 'logo-main'; +// @forward 'menu-main'; +// @forward 'product-manager'; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_input-amount.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_input-amount.scss new file mode 100644 index 0000000..8701a7c --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_input-amount.scss @@ -0,0 +1,27 @@ +.m-input-amount { + .input-group { + .input-group-text { + padding: 0; + display: inline-block; + overflow: hidden; + button { + border-radius: 0; + } + } + input { + max-width: 85px; + text-align: center; + } + /* Für Chrome, Safari, Edge und Opera */ + input::-webkit-outer-spin-button, + input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } + + /* Für Firefox */ + input[type='number'] { + appearance: textfield; + } + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_logo-main.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_logo-main.scss new file mode 100644 index 0000000..399bd12 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_logo-main.scss @@ -0,0 +1,21 @@ +.logo-main { + margin: 0; + + img, + svg { + width: 320px; + height: auto; + max-width: 320px; + } + + figcaption { + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_menu-main.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_menu-main.scss new file mode 100644 index 0000000..df4627e --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_menu-main.scss @@ -0,0 +1,20 @@ +@use '../03_base/colors' as *; +@use '../03_base/typography' as *; + +// Main navigation = Bootstrap 6 navbar (see includes/menu-main.html). +// Only the look from frontend-gulp is added here: black bar, uppercase links. +.menu-main { + background-color: $color-black; + font-family: $font-menu; + + .nav-link { + text-transform: uppercase; + } +} + +// Mobile drawer: Bootstrap 6 alpha keeps it white although the navbar is dark +// (data-bs-theme="dark"), which leaves the light link text invisible. Give it the bar's colour. +.menu-main .drawer { + background-color: $color-black; + color: $color-white; +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_product-manager.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_product-manager.scss new file mode 100644 index 0000000..4f3ed4d --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/05_modules/_product-manager.scss @@ -0,0 +1,47 @@ +.product-manager { + .nav-products-actions { + ul { + padding: 0; + margin: 0; + list-style: none; + display: flex; + justify-content: flex-end; + + li { + button { + margin: 0.5rem 0 0.5rem 0.5rem; + } + } + } + } + + table { + .th-actions { + width: 200px; + } + .th-dragger { + width: 50px; + } + + td { + vertical-align: middle; + button { + margin: 0 2px; + } + } + + tbody:empty::after { + content: 'loading products...'; + width: max-content; + display: inline-block; + color: #999; + padding: 1rem; + } + tfoot .row > * { + margin-bottom: 0.5rem; + @media (min-width: 992px) { + margin-bottom: 0; + } + } + } +} diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/main.scss b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/main.scss new file mode 100644 index 0000000..297e74f --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/styles/main.scss @@ -0,0 +1,13 @@ +// Single stylesheet entry, linked in src/html/includes/head.html. +// Same folders as in frontend-gulp; @use instead of the deprecated @import. + +// 01 Frameworks +@use '01_frameworks' as *; +// 02 Fonts +@use '02_fonts' as *; +// 03 Base +@use '03_base' as *; +// 04 Plugins +@use '04_plugins' as *; +// 05 Modules +@use '05_modules' as *; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/src/utils/validators/validate.js b/06_react/uebungen/u19_chuck-norris-api-stefan/src/utils/validators/validate.js new file mode 100644 index 0000000..9d778df --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/src/utils/validators/validate.js @@ -0,0 +1,39 @@ +import isEmail from 'validator/lib/isEmail'; +import isLength from 'validator/lib/isLength'; +import isEmpty from 'validator/lib/isEmpty'; + +const validate = (formData) => { + const errors = {}; + const firstname = formData.firstname.trim(); + const lastname = formData.lastname.trim(); + const email = formData.email.trim(); + const message = formData.message.trim(); + + if (isEmpty(firstname)) { + errors.firstname = 'Firstname is required'; + } else if (!isLength(firstname, { min: 2, max: 50 })) { + errors.firstname = 'Firstname must be between 2 and 50 characters'; + } + + if (isEmpty(lastname)) { + errors.lastname = 'Lastname is required'; + } else if (!isLength(lastname, { min: 2, max: 60 })) { + errors.lastname = 'Lastname must be between 2 and 60 characters'; + } + + if (isEmpty(email)) { + errors.email = 'Email is required'; + } else if (!isEmail(email)) { + errors.email = 'Email is invalid'; + } + + if (isEmpty(message)) { + errors.message = 'Message is required'; + } else if (!isLength(message, { min: 10, max: 1000 })) { + errors.message = 'Message must be between 10 and 1000 characters'; + } + + return errors; +}; + +export default validate; diff --git a/06_react/uebungen/u19_chuck-norris-api-stefan/vite.config.js b/06_react/uebungen/u19_chuck-norris-api-stefan/vite.config.js new file mode 100644 index 0000000..24ad103 --- /dev/null +++ b/06_react/uebungen/u19_chuck-norris-api-stefan/vite.config.js @@ -0,0 +1,15 @@ +import react from '@vitejs/plugin-react'; +import { defineConfig } from 'vite'; + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], + css: { + preprocessorOptions: { + scss: { + quietDeps: true, // Unix + silenceDeprecations: ['color-functions', 'global-builtin', 'import', 'legacy-js-api', 'if-function'], + }, + }, + }, +}); diff --git a/06_react/uebungen/u19_chuck-norris-api/package.json b/06_react/uebungen/u19_chuck-norris-api/package.json index a002476..bfd61cd 100644 --- a/06_react/uebungen/u19_chuck-norris-api/package.json +++ b/06_react/uebungen/u19_chuck-norris-api/package.json @@ -23,7 +23,7 @@ "@types/react-dom": "^19.3.0", "@vitejs/plugin-react": "^6.1.2", "oxlint": "^1.90.0", - "sass-embedded": "^1.106.1", + "sass-embedded": "^1.107.0", "vite": "^8.3.5" } } diff --git a/06_react/uebungen/u19_chuck-norris-api.zip b/06_react/uebungen/ubeungen-19_chuck-norris-api.zip similarity index 100% rename from 06_react/uebungen/u19_chuck-norris-api.zip rename to 06_react/uebungen/ubeungen-19_chuck-norris-api.zip diff --git a/06_react/unterricht/tag38/01_react-with-forms/package-lock.json b/06_react/unterricht/tag38/01_react-with-forms/package-lock.json new file mode 100644 index 0000000..6e2d7e8 --- /dev/null +++ b/06_react/unterricht/tag38/01_react-with-forms/package-lock.json @@ -0,0 +1,2369 @@ +{ + "name": "react-with-forms", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "react-with-forms", + "version": "0.0.0", + "dependencies": { + "bootstrap": "^5.3.8", + "joi": "^18.3.0", + "react": "^19.3.1", + "react-dom": "^19.3.1", + "react-hook-form": "^7.91.0", + "react-icons": "^5.7.0", + "react-router-dom": "^7.18.5", + "validator": "^13.15.35" + }, + "devDependencies": { + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", + "@vitejs/plugin-react": "^6.1.2", + "oxlint": "^1.90.0", + "sass-embedded": "^1.106.1", + "vite": "^8.3.5" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.16.0.tgz", + "integrity": "sha512-FWa0sPlqYGJgpTs6OxBRcL/AW4JT0OIO+W1ajerluoTVh8CV0B7XM1qsNCRgnkSCkRCgOICKHRQlY17jrsm0+Q==", + "dev": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@hapi/address": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/formula": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/hoek": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/tlds": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.7.tgz", + "integrity": "sha512-MgNjRwy9Ti92yVAixLmDc8dd1bJIKwO9qlWCfFQRwRmUEDPQHYn4G6hwPFvFGUTzAa0FsS+inMjLin7GnyBRhA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/topo": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.155.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.155.0.tgz", + "integrity": "sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/oxc-project" + } + }, + "node_modules/@oxlint/binding-android-arm-eabi": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.90.0.tgz", + "integrity": "sha512-sgfalb1HuxYjiAa4wESZ626z1FGusqNcXYHyB5oIOEprS2sbPg0UYEfo83uF1GNG70DIfZxHkXuE6KFrlSdn8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-android-arm64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.90.0.tgz", + "integrity": "sha512-RcKhz1ETMq+fazE9TKS2+5NIRGwigm/nW8egqF0LI+A8Yw2iW5r0E/C3XAPRiwIm/vcPiutIRIa6IQCIKhZsTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-arm64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.90.0.tgz", + "integrity": "sha512-PSrxMvP6mx+p1karZcUxLdy9lpaP+JWQPti4al9FgTaPhxE+pT/BjhGExloVVSWgZgIfOlLOjVyyq8BXlodhLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-x64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.90.0.tgz", + "integrity": "sha512-OLbU9qsrV2Q8QxT2OEzOPdO8zCCpyI8qB+hDI8yr6RsYELtkf0FAZhJdfjM/RnLHKzt44HWwAPnk92vBtKofvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-freebsd-x64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.90.0.tgz", + "integrity": "sha512-fBA4pWyVDARmNucQqpyFuPC49xYf1r+sX7dxPL5fNPQrSMLum39Sn56tZ9JPleWC7FzLPwSQ7plYYfirYBHF8A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-gnueabihf": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.90.0.tgz", + "integrity": "sha512-zhxH78eP2nR6/pGdhBc7MIfjhhcgATeu8fkmkFJbuzfk6Cj0FzBxyEhL85yDqrCybjx+G2YDzZGsxIO9kvO4Iw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-musleabihf": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.90.0.tgz", + "integrity": "sha512-MvYmpHyJqUJjEvkZbJHdwfdL45cGn8EVBkYmoXFiaYFW9suoD3dbJl5mBdpy0DVgdjlyddmldbRtk3cCgETadQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.90.0.tgz", + "integrity": "sha512-L13Sy+Kg0nZhwTsToniqjUFPA2TuM6962qCZ5Wp5KeB517Tw7ApdLTTtlb+bF86fcZZa2EtvCVvAJxk4Dya/MQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-musl": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.90.0.tgz", + "integrity": "sha512-wFDdZWGpzIPFdJFjSLWnKB0TGzFriTKUIrl04iMqMyM9BBIJTuerfCHYa0WpDSjr5x3lcW/CHLyacSt886WpGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-ppc64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.90.0.tgz", + "integrity": "sha512-FRywfn+MoKn8xpBSzgNwNVliSKRI2QXkxi/iF7o6FEQs8Bh8z2RpVTaFAcO3pchXjvB2eGNFIoLLQABIQ+u7VA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.90.0.tgz", + "integrity": "sha512-IS2PaUgpc/qeLADTyhUNmdx3x4ijs9pjJdPKBYHaT+mAE7k3FsjnHPTjhpsak1b++h6CIPhv6WX9Z+y7Pw0voQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-musl": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.90.0.tgz", + "integrity": "sha512-s7JFKRkGS8O7i2ZVODfuO++NC7sH6HDqpMn8lYxw91w0SXJOxnAVjQ8utvmDwLMMT0jaSkuOKuUYJDGDtu4sHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-s390x-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.90.0.tgz", + "integrity": "sha512-b0GxrOQr5VONCkd7KLSqmP6b6nqZuTpuS8QPQHzltmqdXP5bY0Jl0CZ0QmlCTrS3ExaLYbioFYOARzNbYvcApQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.90.0.tgz", + "integrity": "sha512-iaJeShJtgUp8rZbt9YUdTAGOpmX5KogCLba17Jp1tWdJ3F4M3D2g2TKUyI1FMTHxKH9NNHuQcuC2kZRg6IV7yQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-musl": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.90.0.tgz", + "integrity": "sha512-/aZoXnL5WBLCXuzfHqvEFXcm4iwYmr/cYByHDTXzLFzJdE5DC7bm6phpWqHv6BeqpVgY9IpBAxGDv2WEkl5JCg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-openharmony-arm64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.90.0.tgz", + "integrity": "sha512-SMhk7ozwoxYDKfYqGZCQEfULOKDneF9uhaoIf2neoDLWvNtjY9yVeL7YHmE5L9WdKvMpWNwwZxhenxBu6AgfOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-arm64-msvc": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.90.0.tgz", + "integrity": "sha512-KBvR3A9fO7fCi2vCP8ifWvlia7tGEQV9NaYh+IGwa/7Groy48Mt/UaYqMK9/zOtAWl20BUCf6RPqzJ32fRw33Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-ia32-msvc": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.90.0.tgz", + "integrity": "sha512-+x42rDHQGbTCuT3EzpWAzhP3NoVPE/cJsG4gnrakOSg0olV+GCdMpPU23Nvrl3zZMnXxFZdTtDv4D3SuaA5ZeQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-x64-msvc": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.90.0.tgz", + "integrity": "sha512-30JiaFEBUB9peEOcvVM8ggo88SoN/IdSr9DW505JdBji/R6dM66gKEiG65hw6qcaF2f4mO0cEJ+RwRZprmun9g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", + "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", + "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", + "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", + "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", + "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", + "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", + "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", + "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.15.tgz", + "integrity": "sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.15.tgz", + "integrity": "sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.15.tgz", + "integrity": "sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.15.tgz", + "integrity": "sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.15.tgz", + "integrity": "sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.15.tgz", + "integrity": "sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.15.tgz", + "integrity": "sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.15.tgz", + "integrity": "sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.15.tgz", + "integrity": "sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.15.tgz", + "integrity": "sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.15.tgz", + "integrity": "sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.15.tgz", + "integrity": "sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.15.tgz", + "integrity": "sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.15.tgz", + "integrity": "sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.15.tgz", + "integrity": "sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", + "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.3.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.2.tgz", + "integrity": "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "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", + "oxc-transform-react": "^0.152.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "oxc-transform-react": { + "optional": true + } + } + }, + "node_modules/bootstrap": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz", + "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/colorjs.io": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.7.1.tgz", + "integrity": "sha512-LY7OHnJZxHwT5UlzNa9bbhHHDbzB6yE5+3MIPwJEQKRvSCt/T4G7epsj+9j2BExUIIfXFIJGsIXUKdfrK9Q5tA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/color" + } + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/immutable": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/joi": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-18.3.1.tgz", + "integrity": "sha512-mV9M4Llh4va3NT90p7KBtQhoZqjs8xLX7EWYE4y/GG3yLF6REbIBEHSUb0UX1JXRht2w5tiLSsvmpYc5akiqIw==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/address": "^5.1.1", + "@hapi/formula": "^3.0.2", + "@hapi/hoek": "^11.0.7", + "@hapi/pinpoint": "^2.0.1", + "@hapi/tlds": "^1.1.1", + "@hapi/topo": "^6.0.2", + "@standard-schema/spec": "^1.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/nanoid": { + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/oxlint": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.90.0.tgz", + "integrity": "sha512-RkTN9EmgIUpLuhNoLhO3OliMGJlvb3Dk7XVjBZnfoMCHrVpuz5ESd97klfiyYeV7XfA2lNLnDCPMkUI+Qw5How==", + "dev": true, + "license": "MIT", + "bin": { + "oxlint": "bin/oxlint" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/oxc-project" + }, + "optionalDependencies": { + "@oxlint/binding-android-arm-eabi": "1.90.0", + "@oxlint/binding-android-arm64": "1.90.0", + "@oxlint/binding-darwin-arm64": "1.90.0", + "@oxlint/binding-darwin-x64": "1.90.0", + "@oxlint/binding-freebsd-x64": "1.90.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.90.0", + "@oxlint/binding-linux-arm-musleabihf": "1.90.0", + "@oxlint/binding-linux-arm64-gnu": "1.90.0", + "@oxlint/binding-linux-arm64-musl": "1.90.0", + "@oxlint/binding-linux-ppc64-gnu": "1.90.0", + "@oxlint/binding-linux-riscv64-gnu": "1.90.0", + "@oxlint/binding-linux-riscv64-musl": "1.90.0", + "@oxlint/binding-linux-s390x-gnu": "1.90.0", + "@oxlint/binding-linux-x64-gnu": "1.90.0", + "@oxlint/binding-linux-x64-musl": "1.90.0", + "@oxlint/binding-openharmony-arm64": "1.90.0", + "@oxlint/binding-win32-arm64-msvc": "1.90.0", + "@oxlint/binding-win32-ia32-msvc": "1.90.0", + "@oxlint/binding-win32-x64-msvc": "1.90.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=7.0.2005", + "vite-plus": "*" + }, + "peerDependenciesMeta": { + "oxlint-tsgolint": { + "optional": true + }, + "vite-plus": { + "optional": true + } + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.32.tgz", + "integrity": "sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.20", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.1.tgz", + "integrity": "sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.1.tgz", + "integrity": "sha512-Y0bARz53lhEC1NMCASs0/j+faB/zqt3R8hpvg1e8+61ZVJ4UL0UdC4cBbXfZMcIuhrfgeILTLe+ZeBCavQPtKQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.28.0" + }, + "peerDependencies": { + "react": "^19.3.1" + } + }, + "node_modules/react-hook-form": { + "version": "7.91.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.91.0.tgz", + "integrity": "sha512-5BEBUnCBwa28AFXYTYmOaB/+CSpJ/+CWVASHEvIGUzFdHyUiPHeRhG7r5hOZ8nZi0yP7pbHdFNXO/p31EKTJFQ==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-icons": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.7.0.tgz", + "integrity": "sha512-LBLy340Rzqy6+/yVhZKT3B/QpP1BZaesGqasf09HPOBzRarcDIFH0WwXlXQfE7q7ipxK4MSiC5DIBWURCny6fw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-router": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.5.tgz", + "integrity": "sha512-dTgvcXDOrLPrlLHrcZAqWveiK1hMSqN+rGAJzegP8HtmNkfRxOoshGWBNX3ZJ0cZjOHkRdlUJtaIhZMLLyGyPw==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.5.tgz", + "integrity": "sha512-9HcfDMU6JJ/fp6gJZYGwNE6RknVGS4kBjH1HkNw959mCJi70TVwdipQWv2FEol9uGpi+SZTFtVpJPtEQfayeOw==", + "license": "MIT", + "dependencies": { + "react-router": "7.18.5" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rolldown": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.15.tgz", + "integrity": "sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.155.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.15", + "@rolldown/binding-android-arm64": "1.2.15", + "@rolldown/binding-darwin-arm64": "1.2.15", + "@rolldown/binding-darwin-x64": "1.2.15", + "@rolldown/binding-freebsd-x64": "1.2.15", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.15", + "@rolldown/binding-linux-arm64-gnu": "1.2.15", + "@rolldown/binding-linux-arm64-musl": "1.2.15", + "@rolldown/binding-linux-ppc64-gnu": "1.2.15", + "@rolldown/binding-linux-s390x-gnu": "1.2.15", + "@rolldown/binding-linux-x64-gnu": "1.2.15", + "@rolldown/binding-linux-x64-musl": "1.2.15", + "@rolldown/binding-openharmony-arm64": "1.2.15", + "@rolldown/binding-win32-arm64-msvc": "1.2.15", + "@rolldown/binding-win32-x64-msvc": "1.2.15" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sass": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.107.0.tgz", + "integrity": "sha512-+whPilvVNoAD57xvdIPLQT0gXo4RD1lHYw+Uw8zYHlojaeaMDxK14tc0JmEsz/XMns48h3lpypisMP+3E8eHQA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "chokidar": "^5.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-embedded": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.107.0.tgz", + "integrity": "sha512-0SWHSg0yNgjZ1Yxw5QYd7fHla1ilqaXEtDyc0VgW+xMjuxsjRmLR7s9+OOCXYqjjNhjT20Oxl6I1+9ylqnw5XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.5.0", + "colorjs.io": "^0.7.0", + "immutable": "^5.1.5", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "sass-embedded-all-unknown": "1.107.0", + "sass-embedded-android-arm": "1.107.0", + "sass-embedded-android-arm64": "1.107.0", + "sass-embedded-android-riscv64": "1.107.0", + "sass-embedded-android-x64": "1.107.0", + "sass-embedded-darwin-arm64": "1.107.0", + "sass-embedded-darwin-x64": "1.107.0", + "sass-embedded-linux-arm": "1.107.0", + "sass-embedded-linux-arm64": "1.107.0", + "sass-embedded-linux-musl-arm": "1.107.0", + "sass-embedded-linux-musl-arm64": "1.107.0", + "sass-embedded-linux-musl-riscv64": "1.107.0", + "sass-embedded-linux-musl-x64": "1.107.0", + "sass-embedded-linux-riscv64": "1.107.0", + "sass-embedded-linux-x64": "1.107.0", + "sass-embedded-unknown-all": "1.107.0", + "sass-embedded-win32-arm64": "1.107.0", + "sass-embedded-win32-x64": "1.107.0" + } + }, + "node_modules/sass-embedded-all-unknown": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.107.0.tgz", + "integrity": "sha512-Vll3OTXluDCFj1p/QZSFZrRR9sUQ+PkZXn8d9MJEz4Zatozkdxy0AhUVvCjODbonl2/r5iSt4gpoZm3OW9e1tA==", + "cpu": [ + "!arm", + "!arm64", + "!riscv64", + "!x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "sass": "1.107.0" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.107.0.tgz", + "integrity": "sha512-BIy4QhqOC9ltqdQLKbyJXS4QRpoEQFrQxAizYKkDmgAlb4CsUkcPeW2g7T8lEdRD5CC4TNEF1GWisdc2wCN5Vw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.107.0.tgz", + "integrity": "sha512-khlf9rBiUvWILhOutf5EdApHCf9NtZN0xrPopbrW1vSSlCf84aUJ2L+d/EdgqrBMDpjETc1brjOyOl9j2qP0Rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.107.0.tgz", + "integrity": "sha512-jaoqQKgEOTQghqApzNZRqMIYhRnGVFndPK7QZFLkS4PBBBNj2EMrpY/jCh4k2ATpk30S1k7EjMbvHW7lJqCl+Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.107.0.tgz", + "integrity": "sha512-0ETPwPcwtX1/eEsBkTat4jSBtintmQmc+N/An8HHfqymRQsdPfxwnk7WpTHMdVXSFkv6DfzkjFlRmZtXTfSsFA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.107.0.tgz", + "integrity": "sha512-apPK51fNRBOdGxpHNp+6X+YTTt6km3bZO3IB/Z987ASaDtdxjQ2U1LP9smbea6GzJpujuxWUuvw/l4vzLN9Y6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.107.0.tgz", + "integrity": "sha512-d1U7XHQuQb2iuSf+5NxjMMSt7I9yCYGQw3K4NZd32yf5tuhFMTeyiu3nf0+HvLavD2jAkOiykJtbm+zYnwd5HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.107.0.tgz", + "integrity": "sha512-JOk4lk1iYKujZOKXLG1EFWvBxtqN/2mDe6vYw2WJAK1KG1B5Z1l9zRPBXRv+H+YXbObGb8OH6S0AgIvZbBrI0w==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.107.0.tgz", + "integrity": "sha512-HcA2wCqXtcRuGIzS0Qfgk0QQCP9B+57fPWstKozMl/Penl1pXVBA98Ilo64A8wPd2WHYSsY0u5WOAQa3h06IcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.107.0.tgz", + "integrity": "sha512-n1ujZwaQzjQ8etH9dm0uOxNkdnIu/bpY0j0TkrWmdCpsqNCob/noyWbuTofZ3whfz2IijHb9d1YAb/CEqDKoig==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.107.0.tgz", + "integrity": "sha512-waH4HH7o0/7uM3M6vp/SisW63JnR2VLU3B7N2sB/+P9C9GLd4ei6X8AzOzemMXDbRSpkM78vFtF9hOOT4HIHjQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.107.0.tgz", + "integrity": "sha512-ONS/JfxvUn9KyLIsWH+Q6R0axjhRgtk80jfpOwFltqZBF20lXCEdf9PyoDaE0z+4RebK9D5jHzn8FhciIG9PSA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.107.0.tgz", + "integrity": "sha512-iTqvfT21RdnSSF/Fqnlln1gMDF97BfJhabxmz7f3Th0X1YSPX3+XwPLUH1r8RiSIIXcckYGY5adKs/P8iJVgWA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.107.0.tgz", + "integrity": "sha512-aP3z4aXO7kUR7vwcERe7j6EHVEKJPkC1t8JAJJo9wIintYmUnXKP67Tm5Llfp6r5XhJpUFMjCwrBixtfA43+/Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.107.0.tgz", + "integrity": "sha512-fhJs/cx2cV8e7wn8ybnjJrWxsLb9YVALksGE1shOJ5fCE1c4H2K6LkcieDK8gKNdqzcihFW8amIoGuMh1fY2yQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-unknown-all": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.107.0.tgz", + "integrity": "sha512-vjRXQZn8Dek8GqwTZ52vh+YTZLtoH9X8zGcBRKyt5a9yNStoE5N3KXIaeD/2z5jK/Vo9XrsqKJalujugDQnShA==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "!android", + "!darwin", + "!linux", + "!win32" + ], + "dependencies": { + "sass": "1.107.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.107.0.tgz", + "integrity": "sha512-4c8GS5WJcgfDl8ELCqLBw+sNzCMEHhLQ3S8mGp7rxnCcddLmOJwrgPQBPdoOhkWomURzPn8S1BWvUbfgiyAM9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.107.0.tgz", + "integrity": "sha512-RJGBevID/0o1bVboKlzvCZkliIJ8I4ETE4jVKiAF673MrAS3ywl69hKeaWE6Ssl1yPlkrepCTqLSJ8tFngY5Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", + "license": "MIT" + }, + "node_modules/set-cookie-parser": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.3.tgz", + "integrity": "sha512-irZHtTqurLna57KQG/s+fzOwv/J6XSH4cs8M/vsrY3uCaQ3S6+QJguAH0WdN47SXlk82voMZ4naWMQf8fdEoIg==", + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/sync-child-process": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.1.1.tgz", + "integrity": "sha512-54zMOnH5qgjdKW8SGpCx3daSP+v+TtTfOxgPdhUE3P0hytMMpknZfP67S4JeRcx5IQRWJERz6890yO4dkTywww==", + "dev": true, + "license": "MIT", + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.2.0.tgz", + "integrity": "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/validator": { + "version": "13.15.35", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.35.tgz", + "integrity": "sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.5.tgz", + "integrity": "sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.7", + "postcss": "^8.5.30", + "rolldown": "~1.2.14", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.7.1 || ^0.8.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + } + } +} diff --git a/06_react/unterricht/tag38/01_react-with-forms/src/components/forms/joi/FormContact.jsx b/06_react/unterricht/tag38/01_react-with-forms/src/components/forms/joi/FormContact.jsx index 2e17e5c..60fbd79 100644 --- a/06_react/unterricht/tag38/01_react-with-forms/src/components/forms/joi/FormContact.jsx +++ b/06_react/unterricht/tag38/01_react-with-forms/src/components/forms/joi/FormContact.jsx @@ -26,6 +26,7 @@ const FormContact = (props) => { if (Object.keys(errors).length === 0) { console.log('Form submitted ....'); // TODO: send over AJAX/Fetch + form.reset(); setFormData(INITIAL_FORM_DATA); setErrors({}); diff --git a/06_react/unterricht/tag38/02_react-api-with-hooks/package-lock.json b/06_react/unterricht/tag38/02_react-api-with-hooks/package-lock.json new file mode 100644 index 0000000..1275097 --- /dev/null +++ b/06_react/unterricht/tag38/02_react-api-with-hooks/package-lock.json @@ -0,0 +1,2701 @@ +{ + "name": "react-api-with-hooks", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "react-api-with-hooks", + "version": "0.0.0", + "dependencies": { + "axios": "^1.21.0", + "bootstrap": "^5.3.8", + "joi": "^18.3.1", + "react": "^19.3.1", + "react-dom": "^19.3.1", + "react-hook-form": "^7.91.0", + "react-icons": "^5.7.0", + "react-router-dom": "^7.18.5", + "validator": "^13.15.35" + }, + "devDependencies": { + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", + "@vitejs/plugin-react": "^6.1.2", + "oxlint": "^1.90.0", + "sass-embedded": "^1.107.0", + "vite": "^8.3.5" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.16.0.tgz", + "integrity": "sha512-FWa0sPlqYGJgpTs6OxBRcL/AW4JT0OIO+W1ajerluoTVh8CV0B7XM1qsNCRgnkSCkRCgOICKHRQlY17jrsm0+Q==", + "dev": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@hapi/address": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/formula": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/hoek": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/tlds": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.7.tgz", + "integrity": "sha512-MgNjRwy9Ti92yVAixLmDc8dd1bJIKwO9qlWCfFQRwRmUEDPQHYn4G6hwPFvFGUTzAa0FsS+inMjLin7GnyBRhA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/topo": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.155.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.155.0.tgz", + "integrity": "sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/oxc-project" + } + }, + "node_modules/@oxlint/binding-android-arm-eabi": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.90.0.tgz", + "integrity": "sha512-sgfalb1HuxYjiAa4wESZ626z1FGusqNcXYHyB5oIOEprS2sbPg0UYEfo83uF1GNG70DIfZxHkXuE6KFrlSdn8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-android-arm64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.90.0.tgz", + "integrity": "sha512-RcKhz1ETMq+fazE9TKS2+5NIRGwigm/nW8egqF0LI+A8Yw2iW5r0E/C3XAPRiwIm/vcPiutIRIa6IQCIKhZsTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-arm64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.90.0.tgz", + "integrity": "sha512-PSrxMvP6mx+p1karZcUxLdy9lpaP+JWQPti4al9FgTaPhxE+pT/BjhGExloVVSWgZgIfOlLOjVyyq8BXlodhLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-x64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.90.0.tgz", + "integrity": "sha512-OLbU9qsrV2Q8QxT2OEzOPdO8zCCpyI8qB+hDI8yr6RsYELtkf0FAZhJdfjM/RnLHKzt44HWwAPnk92vBtKofvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-freebsd-x64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.90.0.tgz", + "integrity": "sha512-fBA4pWyVDARmNucQqpyFuPC49xYf1r+sX7dxPL5fNPQrSMLum39Sn56tZ9JPleWC7FzLPwSQ7plYYfirYBHF8A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-gnueabihf": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.90.0.tgz", + "integrity": "sha512-zhxH78eP2nR6/pGdhBc7MIfjhhcgATeu8fkmkFJbuzfk6Cj0FzBxyEhL85yDqrCybjx+G2YDzZGsxIO9kvO4Iw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-musleabihf": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.90.0.tgz", + "integrity": "sha512-MvYmpHyJqUJjEvkZbJHdwfdL45cGn8EVBkYmoXFiaYFW9suoD3dbJl5mBdpy0DVgdjlyddmldbRtk3cCgETadQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.90.0.tgz", + "integrity": "sha512-L13Sy+Kg0nZhwTsToniqjUFPA2TuM6962qCZ5Wp5KeB517Tw7ApdLTTtlb+bF86fcZZa2EtvCVvAJxk4Dya/MQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-musl": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.90.0.tgz", + "integrity": "sha512-wFDdZWGpzIPFdJFjSLWnKB0TGzFriTKUIrl04iMqMyM9BBIJTuerfCHYa0WpDSjr5x3lcW/CHLyacSt886WpGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-ppc64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.90.0.tgz", + "integrity": "sha512-FRywfn+MoKn8xpBSzgNwNVliSKRI2QXkxi/iF7o6FEQs8Bh8z2RpVTaFAcO3pchXjvB2eGNFIoLLQABIQ+u7VA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.90.0.tgz", + "integrity": "sha512-IS2PaUgpc/qeLADTyhUNmdx3x4ijs9pjJdPKBYHaT+mAE7k3FsjnHPTjhpsak1b++h6CIPhv6WX9Z+y7Pw0voQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-musl": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.90.0.tgz", + "integrity": "sha512-s7JFKRkGS8O7i2ZVODfuO++NC7sH6HDqpMn8lYxw91w0SXJOxnAVjQ8utvmDwLMMT0jaSkuOKuUYJDGDtu4sHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-s390x-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.90.0.tgz", + "integrity": "sha512-b0GxrOQr5VONCkd7KLSqmP6b6nqZuTpuS8QPQHzltmqdXP5bY0Jl0CZ0QmlCTrS3ExaLYbioFYOARzNbYvcApQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-gnu": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.90.0.tgz", + "integrity": "sha512-iaJeShJtgUp8rZbt9YUdTAGOpmX5KogCLba17Jp1tWdJ3F4M3D2g2TKUyI1FMTHxKH9NNHuQcuC2kZRg6IV7yQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-musl": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.90.0.tgz", + "integrity": "sha512-/aZoXnL5WBLCXuzfHqvEFXcm4iwYmr/cYByHDTXzLFzJdE5DC7bm6phpWqHv6BeqpVgY9IpBAxGDv2WEkl5JCg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-openharmony-arm64": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.90.0.tgz", + "integrity": "sha512-SMhk7ozwoxYDKfYqGZCQEfULOKDneF9uhaoIf2neoDLWvNtjY9yVeL7YHmE5L9WdKvMpWNwwZxhenxBu6AgfOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-arm64-msvc": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.90.0.tgz", + "integrity": "sha512-KBvR3A9fO7fCi2vCP8ifWvlia7tGEQV9NaYh+IGwa/7Groy48Mt/UaYqMK9/zOtAWl20BUCf6RPqzJ32fRw33Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-ia32-msvc": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.90.0.tgz", + "integrity": "sha512-+x42rDHQGbTCuT3EzpWAzhP3NoVPE/cJsG4gnrakOSg0olV+GCdMpPU23Nvrl3zZMnXxFZdTtDv4D3SuaA5ZeQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-x64-msvc": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.90.0.tgz", + "integrity": "sha512-30JiaFEBUB9peEOcvVM8ggo88SoN/IdSr9DW505JdBji/R6dM66gKEiG65hw6qcaF2f4mO0cEJ+RwRZprmun9g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", + "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", + "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", + "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", + "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", + "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", + "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", + "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", + "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.15.tgz", + "integrity": "sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.15.tgz", + "integrity": "sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.15.tgz", + "integrity": "sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.15.tgz", + "integrity": "sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.15.tgz", + "integrity": "sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.15.tgz", + "integrity": "sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.15.tgz", + "integrity": "sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.15.tgz", + "integrity": "sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.15.tgz", + "integrity": "sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.15.tgz", + "integrity": "sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.15.tgz", + "integrity": "sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.15.tgz", + "integrity": "sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.15.tgz", + "integrity": "sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.15.tgz", + "integrity": "sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.15.tgz", + "integrity": "sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", + "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.3.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.2.tgz", + "integrity": "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "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", + "oxc-transform-react": "^0.152.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "oxc-transform-react": { + "optional": true + } + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.21.0.tgz", + "integrity": "sha512-YCzXMB53Q9PZBsh7yN7wtapit4WepwcHS2fP8QhGsBxSz5YtgYobV7GGlWlAJi+RxfU77GQTQi2DSLUma42EYA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.6", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/bootstrap": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz", + "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/colorjs.io": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.7.1.tgz", + "integrity": "sha512-LY7OHnJZxHwT5UlzNa9bbhHHDbzB6yE5+3MIPwJEQKRvSCt/T4G7epsj+9j2BExUIIfXFIJGsIXUKdfrK9Q5tA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/color" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/follow-redirects": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.2.tgz", + "integrity": "sha512-/kVP2U8z596Ia0gwFrwyIeo74ta5aVmSeU1FfAUMAmcEP5EP7zydmag3SLiN64NaRKef3lxsq7i/g7ltJQDGow==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/immutable": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/joi": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-18.3.1.tgz", + "integrity": "sha512-mV9M4Llh4va3NT90p7KBtQhoZqjs8xLX7EWYE4y/GG3yLF6REbIBEHSUb0UX1JXRht2w5tiLSsvmpYc5akiqIw==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/address": "^5.1.1", + "@hapi/formula": "^3.0.2", + "@hapi/hoek": "^11.0.7", + "@hapi/pinpoint": "^2.0.1", + "@hapi/tlds": "^1.1.1", + "@hapi/topo": "^6.0.2", + "@standard-schema/spec": "^1.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/oxlint": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.90.0.tgz", + "integrity": "sha512-RkTN9EmgIUpLuhNoLhO3OliMGJlvb3Dk7XVjBZnfoMCHrVpuz5ESd97klfiyYeV7XfA2lNLnDCPMkUI+Qw5How==", + "dev": true, + "license": "MIT", + "bin": { + "oxlint": "bin/oxlint" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/oxc-project" + }, + "optionalDependencies": { + "@oxlint/binding-android-arm-eabi": "1.90.0", + "@oxlint/binding-android-arm64": "1.90.0", + "@oxlint/binding-darwin-arm64": "1.90.0", + "@oxlint/binding-darwin-x64": "1.90.0", + "@oxlint/binding-freebsd-x64": "1.90.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.90.0", + "@oxlint/binding-linux-arm-musleabihf": "1.90.0", + "@oxlint/binding-linux-arm64-gnu": "1.90.0", + "@oxlint/binding-linux-arm64-musl": "1.90.0", + "@oxlint/binding-linux-ppc64-gnu": "1.90.0", + "@oxlint/binding-linux-riscv64-gnu": "1.90.0", + "@oxlint/binding-linux-riscv64-musl": "1.90.0", + "@oxlint/binding-linux-s390x-gnu": "1.90.0", + "@oxlint/binding-linux-x64-gnu": "1.90.0", + "@oxlint/binding-linux-x64-musl": "1.90.0", + "@oxlint/binding-openharmony-arm64": "1.90.0", + "@oxlint/binding-win32-arm64-msvc": "1.90.0", + "@oxlint/binding-win32-ia32-msvc": "1.90.0", + "@oxlint/binding-win32-x64-msvc": "1.90.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=7.0.2005", + "vite-plus": "*" + }, + "peerDependenciesMeta": { + "oxlint-tsgolint": { + "optional": true + }, + "vite-plus": { + "optional": true + } + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.32.tgz", + "integrity": "sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.20", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/react": { + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.1.tgz", + "integrity": "sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.1.tgz", + "integrity": "sha512-Y0bARz53lhEC1NMCASs0/j+faB/zqt3R8hpvg1e8+61ZVJ4UL0UdC4cBbXfZMcIuhrfgeILTLe+ZeBCavQPtKQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.28.0" + }, + "peerDependencies": { + "react": "^19.3.1" + } + }, + "node_modules/react-hook-form": { + "version": "7.91.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.91.0.tgz", + "integrity": "sha512-5BEBUnCBwa28AFXYTYmOaB/+CSpJ/+CWVASHEvIGUzFdHyUiPHeRhG7r5hOZ8nZi0yP7pbHdFNXO/p31EKTJFQ==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-icons": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.7.0.tgz", + "integrity": "sha512-LBLy340Rzqy6+/yVhZKT3B/QpP1BZaesGqasf09HPOBzRarcDIFH0WwXlXQfE7q7ipxK4MSiC5DIBWURCny6fw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-router": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.5.tgz", + "integrity": "sha512-dTgvcXDOrLPrlLHrcZAqWveiK1hMSqN+rGAJzegP8HtmNkfRxOoshGWBNX3ZJ0cZjOHkRdlUJtaIhZMLLyGyPw==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.5.tgz", + "integrity": "sha512-9HcfDMU6JJ/fp6gJZYGwNE6RknVGS4kBjH1HkNw959mCJi70TVwdipQWv2FEol9uGpi+SZTFtVpJPtEQfayeOw==", + "license": "MIT", + "dependencies": { + "react-router": "7.18.5" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rolldown": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.15.tgz", + "integrity": "sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.155.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.15", + "@rolldown/binding-android-arm64": "1.2.15", + "@rolldown/binding-darwin-arm64": "1.2.15", + "@rolldown/binding-darwin-x64": "1.2.15", + "@rolldown/binding-freebsd-x64": "1.2.15", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.15", + "@rolldown/binding-linux-arm64-gnu": "1.2.15", + "@rolldown/binding-linux-arm64-musl": "1.2.15", + "@rolldown/binding-linux-ppc64-gnu": "1.2.15", + "@rolldown/binding-linux-s390x-gnu": "1.2.15", + "@rolldown/binding-linux-x64-gnu": "1.2.15", + "@rolldown/binding-linux-x64-musl": "1.2.15", + "@rolldown/binding-openharmony-arm64": "1.2.15", + "@rolldown/binding-win32-arm64-msvc": "1.2.15", + "@rolldown/binding-win32-x64-msvc": "1.2.15" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sass": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.107.0.tgz", + "integrity": "sha512-+whPilvVNoAD57xvdIPLQT0gXo4RD1lHYw+Uw8zYHlojaeaMDxK14tc0JmEsz/XMns48h3lpypisMP+3E8eHQA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "chokidar": "^5.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-embedded": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.107.0.tgz", + "integrity": "sha512-0SWHSg0yNgjZ1Yxw5QYd7fHla1ilqaXEtDyc0VgW+xMjuxsjRmLR7s9+OOCXYqjjNhjT20Oxl6I1+9ylqnw5XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.5.0", + "colorjs.io": "^0.7.0", + "immutable": "^5.1.5", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "sass-embedded-all-unknown": "1.107.0", + "sass-embedded-android-arm": "1.107.0", + "sass-embedded-android-arm64": "1.107.0", + "sass-embedded-android-riscv64": "1.107.0", + "sass-embedded-android-x64": "1.107.0", + "sass-embedded-darwin-arm64": "1.107.0", + "sass-embedded-darwin-x64": "1.107.0", + "sass-embedded-linux-arm": "1.107.0", + "sass-embedded-linux-arm64": "1.107.0", + "sass-embedded-linux-musl-arm": "1.107.0", + "sass-embedded-linux-musl-arm64": "1.107.0", + "sass-embedded-linux-musl-riscv64": "1.107.0", + "sass-embedded-linux-musl-x64": "1.107.0", + "sass-embedded-linux-riscv64": "1.107.0", + "sass-embedded-linux-x64": "1.107.0", + "sass-embedded-unknown-all": "1.107.0", + "sass-embedded-win32-arm64": "1.107.0", + "sass-embedded-win32-x64": "1.107.0" + } + }, + "node_modules/sass-embedded-all-unknown": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.107.0.tgz", + "integrity": "sha512-Vll3OTXluDCFj1p/QZSFZrRR9sUQ+PkZXn8d9MJEz4Zatozkdxy0AhUVvCjODbonl2/r5iSt4gpoZm3OW9e1tA==", + "cpu": [ + "!arm", + "!arm64", + "!riscv64", + "!x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "sass": "1.107.0" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.107.0.tgz", + "integrity": "sha512-BIy4QhqOC9ltqdQLKbyJXS4QRpoEQFrQxAizYKkDmgAlb4CsUkcPeW2g7T8lEdRD5CC4TNEF1GWisdc2wCN5Vw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.107.0.tgz", + "integrity": "sha512-khlf9rBiUvWILhOutf5EdApHCf9NtZN0xrPopbrW1vSSlCf84aUJ2L+d/EdgqrBMDpjETc1brjOyOl9j2qP0Rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.107.0.tgz", + "integrity": "sha512-jaoqQKgEOTQghqApzNZRqMIYhRnGVFndPK7QZFLkS4PBBBNj2EMrpY/jCh4k2ATpk30S1k7EjMbvHW7lJqCl+Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.107.0.tgz", + "integrity": "sha512-0ETPwPcwtX1/eEsBkTat4jSBtintmQmc+N/An8HHfqymRQsdPfxwnk7WpTHMdVXSFkv6DfzkjFlRmZtXTfSsFA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.107.0.tgz", + "integrity": "sha512-apPK51fNRBOdGxpHNp+6X+YTTt6km3bZO3IB/Z987ASaDtdxjQ2U1LP9smbea6GzJpujuxWUuvw/l4vzLN9Y6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.107.0.tgz", + "integrity": "sha512-d1U7XHQuQb2iuSf+5NxjMMSt7I9yCYGQw3K4NZd32yf5tuhFMTeyiu3nf0+HvLavD2jAkOiykJtbm+zYnwd5HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.107.0.tgz", + "integrity": "sha512-JOk4lk1iYKujZOKXLG1EFWvBxtqN/2mDe6vYw2WJAK1KG1B5Z1l9zRPBXRv+H+YXbObGb8OH6S0AgIvZbBrI0w==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.107.0.tgz", + "integrity": "sha512-HcA2wCqXtcRuGIzS0Qfgk0QQCP9B+57fPWstKozMl/Penl1pXVBA98Ilo64A8wPd2WHYSsY0u5WOAQa3h06IcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.107.0.tgz", + "integrity": "sha512-n1ujZwaQzjQ8etH9dm0uOxNkdnIu/bpY0j0TkrWmdCpsqNCob/noyWbuTofZ3whfz2IijHb9d1YAb/CEqDKoig==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.107.0.tgz", + "integrity": "sha512-waH4HH7o0/7uM3M6vp/SisW63JnR2VLU3B7N2sB/+P9C9GLd4ei6X8AzOzemMXDbRSpkM78vFtF9hOOT4HIHjQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.107.0.tgz", + "integrity": "sha512-ONS/JfxvUn9KyLIsWH+Q6R0axjhRgtk80jfpOwFltqZBF20lXCEdf9PyoDaE0z+4RebK9D5jHzn8FhciIG9PSA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.107.0.tgz", + "integrity": "sha512-iTqvfT21RdnSSF/Fqnlln1gMDF97BfJhabxmz7f3Th0X1YSPX3+XwPLUH1r8RiSIIXcckYGY5adKs/P8iJVgWA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.107.0.tgz", + "integrity": "sha512-aP3z4aXO7kUR7vwcERe7j6EHVEKJPkC1t8JAJJo9wIintYmUnXKP67Tm5Llfp6r5XhJpUFMjCwrBixtfA43+/Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.107.0.tgz", + "integrity": "sha512-fhJs/cx2cV8e7wn8ybnjJrWxsLb9YVALksGE1shOJ5fCE1c4H2K6LkcieDK8gKNdqzcihFW8amIoGuMh1fY2yQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-unknown-all": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.107.0.tgz", + "integrity": "sha512-vjRXQZn8Dek8GqwTZ52vh+YTZLtoH9X8zGcBRKyt5a9yNStoE5N3KXIaeD/2z5jK/Vo9XrsqKJalujugDQnShA==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "!android", + "!darwin", + "!linux", + "!win32" + ], + "dependencies": { + "sass": "1.107.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.107.0.tgz", + "integrity": "sha512-4c8GS5WJcgfDl8ELCqLBw+sNzCMEHhLQ3S8mGp7rxnCcddLmOJwrgPQBPdoOhkWomURzPn8S1BWvUbfgiyAM9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.107.0.tgz", + "integrity": "sha512-RJGBevID/0o1bVboKlzvCZkliIJ8I4ETE4jVKiAF673MrAS3ywl69hKeaWE6Ssl1yPlkrepCTqLSJ8tFngY5Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", + "license": "MIT" + }, + "node_modules/set-cookie-parser": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.3.tgz", + "integrity": "sha512-irZHtTqurLna57KQG/s+fzOwv/J6XSH4cs8M/vsrY3uCaQ3S6+QJguAH0WdN47SXlk82voMZ4naWMQf8fdEoIg==", + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/sync-child-process": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.1.1.tgz", + "integrity": "sha512-54zMOnH5qgjdKW8SGpCx3daSP+v+TtTfOxgPdhUE3P0hytMMpknZfP67S4JeRcx5IQRWJERz6890yO4dkTywww==", + "dev": true, + "license": "MIT", + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.2.0.tgz", + "integrity": "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/validator": { + "version": "13.15.35", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.35.tgz", + "integrity": "sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.5.tgz", + "integrity": "sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.7", + "postcss": "^8.5.30", + "rolldown": "~1.2.14", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.7.1 || ^0.8.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + } + } +} diff --git a/06_react/unterricht/tag38/02_react-api-with-hooks/package.json b/06_react/unterricht/tag38/02_react-api-with-hooks/package.json index ab968d8..afa00c4 100644 --- a/06_react/unterricht/tag38/02_react-api-with-hooks/package.json +++ b/06_react/unterricht/tag38/02_react-api-with-hooks/package.json @@ -12,7 +12,7 @@ "dependencies": { "axios": "^1.21.0", "bootstrap": "^5.3.8", - "joi": "^18.3.0", + "joi": "^18.3.1", "react": "^19.3.1", "react-dom": "^19.3.1", "react-hook-form": "^7.91.0", @@ -25,7 +25,7 @@ "@types/react-dom": "^19.3.0", "@vitejs/plugin-react": "^6.1.2", "oxlint": "^1.90.0", - "sass-embedded": "^1.106.1", + "sass-embedded": "^1.107.0", "vite": "^8.3.5" } } diff --git a/06_react/unterricht/tag38/02_react-api-with-hooks/src/components/examples/ExampleUseEffectMount.jsx b/06_react/unterricht/tag38/02_react-api-with-hooks/src/components/examples/ExampleUseEffectMount.jsx index a29c2c1..80bd65c 100644 --- a/06_react/unterricht/tag38/02_react-api-with-hooks/src/components/examples/ExampleUseEffectMount.jsx +++ b/06_react/unterricht/tag38/02_react-api-with-hooks/src/components/examples/ExampleUseEffectMount.jsx @@ -1,21 +1,24 @@ -import { useEffect } from 'react'; +import { useEffect, useId } from 'react'; const ExampleUseEffectMount = (props) => { // const { } = props; - console.log(document.querySelector('#box')); // null + const id = useId(); + + console.log(document.getElementById(`box${id}`)); // null useEffect(() => { //mount - console.log(document.querySelector('#box')); //
// JSX Element liegt als gerendertes HTML vor. + console.log(document.getElementById(`box${id}`)); //
// JSX Element liegt als gerendertes HTML vor. + const box = document.getElementById(`box${id}`); - document.querySelector('#box').style.color = 'white'; - document.querySelector('#box').style.backgroundColor = '#2a2a2a'; - document.querySelector('#box').style.padding = '1rem'; + box.style.color = 'white'; + box.style.backgroundColor = '#2a2a2a'; + box.style.padding = '1rem'; }, []); return (
-
+

Box was rendered

diff --git a/06_react/unterricht/tag38/02_react-api-with-hooks/src/pages/HomePage.jsx b/06_react/unterricht/tag38/02_react-api-with-hooks/src/pages/HomePage.jsx index 789f090..b9d1853 100644 --- a/06_react/unterricht/tag38/02_react-api-with-hooks/src/pages/HomePage.jsx +++ b/06_react/unterricht/tag38/02_react-api-with-hooks/src/pages/HomePage.jsx @@ -20,6 +20,7 @@ function HomePage() {

Example useEffect (mount)

+

Example useEffect (did update)