From b2577c249aca2c15bb7efb8670c0ba0632618a6e Mon Sep 17 00:00:00 2001 From: Philippe Torrel Date: Mon, 26 Oct 2026 14:25:47 +0100 Subject: [PATCH] --- 06_react/faq/app-diagram.webp | Bin 0 -> 16412 bytes 06_react/uebungen/u15_routing/.gitignore | 24 + 06_react/uebungen/u15_routing/.oxlintrc.json | 8 + 06_react/uebungen/u15_routing/README.md | 16 + 06_react/uebungen/u15_routing/index.html | 14 + 06_react/uebungen/u15_routing/package.json | 27 + .../uebungen/u15_routing/public/favicon.svg | 1 + .../uebungen/u15_routing/public/icons.svg | 24 + 06_react/uebungen/u15_routing/src/App.jsx | 107 ++ .../uebungen/u15_routing/src/assets/react.svg | 1 + .../uebungen/u15_routing/src/assets/vite.svg | 1 + 06_react/uebungen/u15_routing/src/main.jsx | 15 + 06_react/uebungen/u15_routing/vite.config.js | 7 + 06_react/uebungen/uebungen-15_routing.zip | Bin 0 -> 20045 bytes .../01_components-with-hooks/src/App.jsx | 8 + .../src/components/buttons/Button.jsx | 2 +- .../tag36/02_react-router-simple/.gitignore | 24 + .../02_react-router-simple/.oxlintrc.json | 8 + .../tag36/02_react-router-simple/README.md | 16 + .../tag36/02_react-router-simple/index.html | 13 + .../02_react-router-simple/package-lock.json | 1415 +++++++++++++++++ .../tag36/02_react-router-simple/package.json | 26 + .../02_react-router-simple/public/favicon.svg | 1 + .../02_react-router-simple/public/icons.svg | 24 + .../tag36/02_react-router-simple/src/App.jsx | 97 ++ .../src/assets/hero.png | Bin 0 -> 13057 bytes .../src/assets/react.svg | 1 + .../src/assets/vite.svg | 1 + .../tag36/02_react-router-simple/src/main.jsx | 13 + .../02_react-router-simple/vite.config.js | 15 + 30 files changed, 1908 insertions(+), 1 deletion(-) create mode 100644 06_react/faq/app-diagram.webp create mode 100644 06_react/uebungen/u15_routing/.gitignore create mode 100644 06_react/uebungen/u15_routing/.oxlintrc.json create mode 100644 06_react/uebungen/u15_routing/README.md create mode 100644 06_react/uebungen/u15_routing/index.html create mode 100644 06_react/uebungen/u15_routing/package.json create mode 100644 06_react/uebungen/u15_routing/public/favicon.svg create mode 100644 06_react/uebungen/u15_routing/public/icons.svg create mode 100644 06_react/uebungen/u15_routing/src/App.jsx create mode 100644 06_react/uebungen/u15_routing/src/assets/react.svg create mode 100644 06_react/uebungen/u15_routing/src/assets/vite.svg create mode 100644 06_react/uebungen/u15_routing/src/main.jsx create mode 100644 06_react/uebungen/u15_routing/vite.config.js create mode 100644 06_react/uebungen/uebungen-15_routing.zip create mode 100644 06_react/unterricht/tag36/02_react-router-simple/.gitignore create mode 100644 06_react/unterricht/tag36/02_react-router-simple/.oxlintrc.json create mode 100644 06_react/unterricht/tag36/02_react-router-simple/README.md create mode 100644 06_react/unterricht/tag36/02_react-router-simple/index.html create mode 100644 06_react/unterricht/tag36/02_react-router-simple/package-lock.json create mode 100644 06_react/unterricht/tag36/02_react-router-simple/package.json create mode 100644 06_react/unterricht/tag36/02_react-router-simple/public/favicon.svg create mode 100644 06_react/unterricht/tag36/02_react-router-simple/public/icons.svg create mode 100644 06_react/unterricht/tag36/02_react-router-simple/src/App.jsx create mode 100644 06_react/unterricht/tag36/02_react-router-simple/src/assets/hero.png create mode 100644 06_react/unterricht/tag36/02_react-router-simple/src/assets/react.svg create mode 100644 06_react/unterricht/tag36/02_react-router-simple/src/assets/vite.svg create mode 100644 06_react/unterricht/tag36/02_react-router-simple/src/main.jsx create mode 100644 06_react/unterricht/tag36/02_react-router-simple/vite.config.js diff --git a/06_react/faq/app-diagram.webp b/06_react/faq/app-diagram.webp new file mode 100644 index 0000000000000000000000000000000000000000..130300f651a46f39e25d2d90cc256efe6bc82cdd GIT binary patch literal 16412 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

&Cu{fYO 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 + + + + + + + u15_routing + + +

+ + + diff --git a/06_react/uebungen/u15_routing/package.json b/06_react/uebungen/u15_routing/package.json new file mode 100644 index 0000000..e5eedf7 --- /dev/null +++ b/06_react/uebungen/u15_routing/package.json @@ -0,0 +1,27 @@ +{ + "name": "u15_routing", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "oxlint", + "preview": "vite preview" + }, + "dependencies": { + "bootstrap": "^5.3.8", + "react": "^19.3.1", + "react-dom": "^19.3.1", + "react-icons": "^5.7.0", + "react-router-dom": "^7.18.4" + }, + "devDependencies": { + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", + "@vitejs/plugin-react": "^6.1.2", + "oxlint": "^1.89.0", + "sass-embedded": "^1.106.1", + "vite": "^8.3.5" + } +} diff --git a/06_react/uebungen/u15_routing/public/favicon.svg b/06_react/uebungen/u15_routing/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/06_react/uebungen/u15_routing/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/06_react/uebungen/u15_routing/public/icons.svg b/06_react/uebungen/u15_routing/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/06_react/uebungen/u15_routing/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/06_react/uebungen/u15_routing/src/App.jsx b/06_react/uebungen/u15_routing/src/App.jsx new file mode 100644 index 0000000..0a9cf2a --- /dev/null +++ b/06_react/uebungen/u15_routing/src/App.jsx @@ -0,0 +1,107 @@ +import { BrowserRouter, Link, Routes, Route } from 'react-router-dom'; + +const Navbar = (props) => { + return ( + + ); +}; + +function App() { + return ( + + +
+ + +

Home

+

Lorem, ipsum dolor sit amet consectetur adipisicing elit. Ad, voluptatibus.

+ + } + /> + +

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 +

+ + } + /> +
+
+
+

Übung 15: Komponenten von React Router aufteilen

+

+ In dem vorherigen Beispiel haben wir die einzelnen Komponenten für ein einfaches Verständnis der + Funktionsweise von React Router in einer Datei definiert. In einer echten Anwendung würdest du die + Komponenten wahrscheinlich in separate Dateien aufteilen und importieren. +

+

Genau das ist nun deine Aufgabe:

+
    +
  • Teile die Komponenten Navbar, HomePage und AboutPage in separate Dateien auf.
  • +
  • + {' '} + Importiere die Komponenten in der App.jsx-Datei. +
  • +
  • Passe die Pfade in den Link-Komponenten und Route-Komponenten entsprechend an.
  • +
  • + {' '} + Füge eine weitere Seite hinzu, z.B. eine Kontaktseite, und verlinke sie in der Navigationsleiste. +
  • +
  • + {' '} + Die <BrowserRouter>-Komponente sollte nur einmal in der Anwendung verwendet + werden. Üblicherweise wird sie in der main.jsx-Datei um die gesamte Anwendung gewickelt. +
  • +
+

+ Tipp: Du kannst die Dateien Navbar.jsx wie gewohnt im components-Ordner erstellen und die + Seitenkomponenten HomePage.jsx, AboutPage.jsx und ContactPage.jsx in einem pages-Ordner ablegen. Das sorgt + für eine bessere Struktur und Übersichtlichkeit deiner Anwendung. +

+
+
+
+
+ ); +} + +export default App; diff --git a/06_react/uebungen/u15_routing/src/assets/react.svg b/06_react/uebungen/u15_routing/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/06_react/uebungen/u15_routing/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/06_react/uebungen/u15_routing/src/assets/vite.svg b/06_react/uebungen/u15_routing/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/06_react/uebungen/u15_routing/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/06_react/uebungen/u15_routing/src/main.jsx b/06_react/uebungen/u15_routing/src/main.jsx new file mode 100644 index 0000000..65c3023 --- /dev/null +++ b/06_react/uebungen/u15_routing/src/main.jsx @@ -0,0 +1,15 @@ +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; + +import App from './App.jsx'; + +import 'bootstrap/dist/css/bootstrap.min.css'; +// import './styles/main.scss'; + +const root = createRoot(document.getElementById('root')); + +root.render( + + + , +); diff --git a/06_react/uebungen/u15_routing/vite.config.js b/06_react/uebungen/u15_routing/vite.config.js new file mode 100644 index 0000000..8b0f57b --- /dev/null +++ b/06_react/uebungen/u15_routing/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) diff --git a/06_react/uebungen/uebungen-15_routing.zip b/06_react/uebungen/uebungen-15_routing.zip new file mode 100644 index 0000000000000000000000000000000000000000..5baee240fdea3db79f16c7419c9dcd4e367effc9 GIT binary patch literal 20045 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 VbeG5i0K|9SBzGwS+8;-u{|5

Example useState

+
+ diff --git a/06_react/unterricht/tag36/01_components-with-hooks/src/components/buttons/Button.jsx b/06_react/unterricht/tag36/01_components-with-hooks/src/components/buttons/Button.jsx index 1cbdc14..0c8abfe 100644 --- a/06_react/unterricht/tag36/01_components-with-hooks/src/components/buttons/Button.jsx +++ b/06_react/unterricht/tag36/01_components-with-hooks/src/components/buttons/Button.jsx @@ -9,7 +9,7 @@ const Button = (props) => { }; return ( - ); diff --git a/06_react/unterricht/tag36/02_react-router-simple/.gitignore b/06_react/unterricht/tag36/02_react-router-simple/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/06_react/unterricht/tag36/02_react-router-simple/.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/unterricht/tag36/02_react-router-simple/.oxlintrc.json b/06_react/unterricht/tag36/02_react-router-simple/.oxlintrc.json new file mode 100644 index 0000000..1255078 --- /dev/null +++ b/06_react/unterricht/tag36/02_react-router-simple/.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/unterricht/tag36/02_react-router-simple/README.md b/06_react/unterricht/tag36/02_react-router-simple/README.md new file mode 100644 index 0000000..d937833 --- /dev/null +++ b/06_react/unterricht/tag36/02_react-router-simple/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/unterricht/tag36/02_react-router-simple/index.html b/06_react/unterricht/tag36/02_react-router-simple/index.html new file mode 100644 index 0000000..9c360e8 --- /dev/null +++ b/06_react/unterricht/tag36/02_react-router-simple/index.html @@ -0,0 +1,13 @@ + + + + + + + 02_react-router-simple + + +
+ + + diff --git a/06_react/unterricht/tag36/02_react-router-simple/package-lock.json b/06_react/unterricht/tag36/02_react-router-simple/package-lock.json new file mode 100644 index 0000000..8a064fa --- /dev/null +++ b/06_react/unterricht/tag36/02_react-router-simple/package-lock.json @@ -0,0 +1,1415 @@ +{ + "name": "02_react-router-simple", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "02_react-router-simple", + "version": "0.0.0", + "dependencies": { + "bootstrap": "^5.3.8", + "react": "^19.3.1", + "react-dom": "^19.3.1", + "react-icons": "^5.7.0", + "react-router-dom": "^7.18.4" + }, + "devDependencies": { + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", + "@vitejs/plugin-react": "^6.1.2", + "oxlint": "^1.88.0", + "vite": "^8.3.4" + } + }, + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.89.0.tgz", + "integrity": "sha512-Pflpba5F3gRAQ12sWglRxvWTHEdAusNDvmi4Y5N1T5SY1AGkM7AixOnET8qkrnLJ/F32qAlNokO6eCknT8tmnw==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.89.0.tgz", + "integrity": "sha512-dYmyD1x7LaPlb79vZWUcpTShk8dI9z1I+IubtqrBxWNJaDhQdPHwcsvg7q5StTU4xWyd9AwPfLaTYFZY8NZgtQ==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.89.0.tgz", + "integrity": "sha512-Z/oxOPiIqiS7fItRdxaaOEC+6GD3OpGi0IxoR0dMefzQHolsKLzScw2DNcu/5gUPok3tv+G9mslvYB5bo3i0qg==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.89.0.tgz", + "integrity": "sha512-eAjTkHSjAxrdCPJxO6y5sPQL5pYLKb2kvxZz9UU7tXnOZk9I/HLtkvx9S7GHY883k+AmL/eC7mqFt+w7WCwk0w==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.89.0.tgz", + "integrity": "sha512-0lNCA9Tl1n1FKpqy2/9ckp0kIuSrtJ/l9bMRgaEhOtM7TsOHshFuwOcvW8oA9teXLMOJT61LjEKWiaHDFGxF/w==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.89.0.tgz", + "integrity": "sha512-OTFEvi9W+JczaZD1Caj17SGCoW8H7TE+fvx0D7ATEWa1Lohn91UMxFQ6r145SiGy/yCxeIwptMys/RAM7gSVSQ==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.89.0.tgz", + "integrity": "sha512-fRxgNHvBLswj6MrhW2uBq5UDhPRQlCbHeq/Nf8yuG9zOxhDsXqX/mi2PX1axgsQxMm88el7HLiJAzglAnflYxw==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.89.0.tgz", + "integrity": "sha512-v9ENzHvwrQoYSWTtviH1pOYc7R9UovDxVofnck50cNmPihRRTcrg5X0UlRbLOZ7IVtxPOlh2hb7kDO+FpE8SfQ==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.89.0.tgz", + "integrity": "sha512-vfffe8mQ484AzVadlUOFpgL+JDwhvs9hrzxTgQP1FVfi4ZEUUYeffXlzC9dFV7Dgnu5s/KrNKvfmG6HxBd/ISQ==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.89.0.tgz", + "integrity": "sha512-Buonlp4hVS7RGNP5M7bPpGNQrenyzA2C64JcO/oz9C1c6dGOXJ7VEAnaiAMY7voou0JYyCJdvDVlFQc5DZX3DQ==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.89.0.tgz", + "integrity": "sha512-1eVwJJrJ3lYIPT+cm7BcBBZZXY6IQZP/oyonaruTor/MrVyWOpvnwt1oD5CLdsHg5aVBIxXodQSvt+1gK6ck5w==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.89.0.tgz", + "integrity": "sha512-fRQQsKUGShdEL5Fl9o9uhj3grkZbeXKLv0icQ5tspUCNYSDy8wzzEcP1WC2bKdTQ0rSszbKlO3iiHORxV22DLg==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.89.0.tgz", + "integrity": "sha512-dEtYjIy6+fHcjKklsmtmMkZRhwHr2UbzjmpvuPtQYSeN9awQ2hx5JLms5Wvri+8P/NZtD8v5hfgHALUql+/Ycg==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.89.0.tgz", + "integrity": "sha512-hqjwIj5KOYM8Wjef/p7IruNi1iByLhSzbMBk62y22P/E8q7Jj0Pp+DeUTKTRYyZYCDtU1wEGlnWOnttHbyNIww==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.89.0.tgz", + "integrity": "sha512-iAQN3e6o9UgUCcdGwqRx/jYcKbG3HK7ur3rH6lTqVcQeNGZ85AeWIg6cgn/edwFQ0ofEZZItMwkzyCVTahnvEA==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.89.0.tgz", + "integrity": "sha512-MNxjEByz3N/7Q4qFQuPWvc14TpN9LoD3pECEDsJTZbP/wyB7U+hduUXEl7QAbbgVezFwsb9sWtNUO6XVBndOhg==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.89.0.tgz", + "integrity": "sha512-xxe+i9wfuFso/VnoL4mfj0UlzE+cfCFiUB06vkXCMyQdgVVmItF5FfAF4tATAktSU6uHruWR+FjqvAT9cHZZzg==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.89.0.tgz", + "integrity": "sha512-saFy07cO94E664glwgLmKLI40HgTL1PY86y4T6+ud4niX4H0Kdqjcmqmjps7mQNdBytV5guGbXDdyQtRfeLbLA==", + "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.89.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.89.0.tgz", + "integrity": "sha512-hLFJ/o0f/dTJh/EW0vmcbREYSQO9tYgfiAAlsOkiLFiJuRRWvYtFELUXN5o2ijpSo/tlO1n+YlWN58tZwPG18A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "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/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/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/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/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/oxlint": { + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.89.0.tgz", + "integrity": "sha512-a25hkfo61okGPvJz432fRIPoxlKtNnOVy9w4rzrmGgNm4iVTPwpSQlmdqNWnp6p9QyyPVfAZRgnf5XvSBZFk/A==", + "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.89.0", + "@oxlint/binding-android-arm64": "1.89.0", + "@oxlint/binding-darwin-arm64": "1.89.0", + "@oxlint/binding-darwin-x64": "1.89.0", + "@oxlint/binding-freebsd-x64": "1.89.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.89.0", + "@oxlint/binding-linux-arm-musleabihf": "1.89.0", + "@oxlint/binding-linux-arm64-gnu": "1.89.0", + "@oxlint/binding-linux-arm64-musl": "1.89.0", + "@oxlint/binding-linux-ppc64-gnu": "1.89.0", + "@oxlint/binding-linux-riscv64-gnu": "1.89.0", + "@oxlint/binding-linux-riscv64-musl": "1.89.0", + "@oxlint/binding-linux-s390x-gnu": "1.89.0", + "@oxlint/binding-linux-x64-gnu": "1.89.0", + "@oxlint/binding-linux-x64-musl": "1.89.0", + "@oxlint/binding-openharmony-arm64": "1.89.0", + "@oxlint/binding-win32-arm64-msvc": "1.89.0", + "@oxlint/binding-win32-ia32-msvc": "1.89.0", + "@oxlint/binding-win32-x64-msvc": "1.89.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=7.0.2003", + "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.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.31.tgz", + "integrity": "sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==", + "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-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.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.4.tgz", + "integrity": "sha512-PUPQcMhMGRAslLcvtlPz/kmzBEWPhLdgLFrL7pLNepBL6dX0lWj4WD2cUYVgYCuT3jxvghYFg81cDTj44DhetQ==", + "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.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.4.tgz", + "integrity": "sha512-yrfmJHIpDG7taCpqKjT1G5B6q3O2K+RN8/fgNf0lTjCwiPbQ0ei6vXX9ZjQR+7ld8Tr7Z5xmyMnZ8YJrphWQUw==", + "license": "MIT", + "dependencies": { + "react-router": "7.18.4" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "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/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/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/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/tag36/02_react-router-simple/package.json b/06_react/unterricht/tag36/02_react-router-simple/package.json new file mode 100644 index 0000000..ae1b8ba --- /dev/null +++ b/06_react/unterricht/tag36/02_react-router-simple/package.json @@ -0,0 +1,26 @@ +{ + "name": "02_react-router-simple", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "oxlint", + "preview": "vite preview" + }, + "dependencies": { + "bootstrap": "^5.3.8", + "react": "^19.3.1", + "react-dom": "^19.3.1", + "react-icons": "^5.7.0", + "react-router-dom": "^7.18.4" + }, + "devDependencies": { + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", + "@vitejs/plugin-react": "^6.1.2", + "oxlint": "^1.88.0", + "vite": "^8.3.4" + } +} diff --git a/06_react/unterricht/tag36/02_react-router-simple/public/favicon.svg b/06_react/unterricht/tag36/02_react-router-simple/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/06_react/unterricht/tag36/02_react-router-simple/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/06_react/unterricht/tag36/02_react-router-simple/public/icons.svg b/06_react/unterricht/tag36/02_react-router-simple/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/06_react/unterricht/tag36/02_react-router-simple/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/06_react/unterricht/tag36/02_react-router-simple/src/App.jsx b/06_react/unterricht/tag36/02_react-router-simple/src/App.jsx new file mode 100644 index 0000000..dca6b04 --- /dev/null +++ b/06_react/unterricht/tag36/02_react-router-simple/src/App.jsx @@ -0,0 +1,97 @@ +import { BrowserRouter, Link, Routes, Route } from 'react-router-dom'; + +const Navbar = (props) => { + // const { } = props; + + return ( + + ); +}; + +const HomePage = () => { + return ( +
+

Home

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptate sapiente ut soluta magnam id quasi + praesentium, doloremque voluptatibus veritatis enim fugit accusamus quam porro autem dolorum? Quasi culpa nihil + dolor? +

+
+ ); +}; +const AboutPage = () => { + return ( +
+

About

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptate sapiente ut soluta magnam id quasi + praesentium, doloremque voluptatibus veritatis enim fugit accusamus quam porro autem dolorum? Quasi culpa nihil + dolor? +

+
+ ); +}; +const ContactPage = () => { + return ( +
+

Contact

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptate sapiente ut soluta magnam id quasi + praesentium, doloremque voluptatibus veritatis enim fugit accusamus quam porro autem dolorum? Quasi culpa nihil + dolor? +

+
+ ); +}; + +function App() { + return ( + + +
+ + } /> + } /> + } /> + +
+
+ ); +} +export default App; diff --git a/06_react/unterricht/tag36/02_react-router-simple/src/assets/hero.png b/06_react/unterricht/tag36/02_react-router-simple/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..02251f4b956c55af2d76fd0788124d7eee2b45eb GIT binary patch literal 13057 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 P00000NkvXXu0mjft=yBf literal 0 HcmV?d00001 diff --git a/06_react/unterricht/tag36/02_react-router-simple/src/assets/react.svg b/06_react/unterricht/tag36/02_react-router-simple/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/06_react/unterricht/tag36/02_react-router-simple/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/06_react/unterricht/tag36/02_react-router-simple/src/assets/vite.svg b/06_react/unterricht/tag36/02_react-router-simple/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/06_react/unterricht/tag36/02_react-router-simple/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/06_react/unterricht/tag36/02_react-router-simple/src/main.jsx b/06_react/unterricht/tag36/02_react-router-simple/src/main.jsx new file mode 100644 index 0000000..c1e82de --- /dev/null +++ b/06_react/unterricht/tag36/02_react-router-simple/src/main.jsx @@ -0,0 +1,13 @@ +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; + +// css import von bootstrap 5.3.8 +import 'bootstrap/dist/css/bootstrap.min.css'; + +import App from './App.jsx'; + +createRoot(document.getElementById('root')).render( + + + , +); diff --git a/06_react/unterricht/tag36/02_react-router-simple/vite.config.js b/06_react/unterricht/tag36/02_react-router-simple/vite.config.js new file mode 100644 index 0000000..24ad103 --- /dev/null +++ b/06_react/unterricht/tag36/02_react-router-simple/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'], + }, + }, + }, +});