From e3bb5d36b9f4910c49f9ddb7a935b10bec6c4619 Mon Sep 17 00:00:00 2001 From: rxf Date: Mon, 10 Nov 2025 16:10:33 +0100 Subject: [PATCH] nochmal --- docs/Server-Ideen.pdf | Bin 0 -> 24072 bytes .../Anleitung für Wireguard (VPN).pdf | Bin 0 -> 53366 bytes sternwarte/beoanswer/.gitignore | 30 + sternwarte/beoanswer/ACHTUNG.md | 13 + sternwarte/beoanswer/DEPLOYMENT.md | 123 + sternwarte/beoanswer/Dockerfile | 12 + sternwarte/beoanswer/README.md | 273 ++ sternwarte/beoanswer/cors-proxy.php | 114 + sternwarte/beoanswer/docker-compose.yml | 12 + sternwarte/beoanswer/eslint.config.js | 29 + sternwarte/beoanswer/index.html | 13 + sternwarte/beoanswer/package-lock.json | 2900 +++++++++++++++++ sternwarte/beoanswer/package.json | 30 + sternwarte/beoanswer/public/anleitung.html | 147 + sternwarte/beoanswer/public/vite.svg | 1 + sternwarte/beoanswer/sofueDB.php | 398 +++ sternwarte/beoanswer/src/App.css | 122 + sternwarte/beoanswer/src/App.jsx | 330 ++ sternwarte/beoanswer/src/FormContext.jsx | 57 + sternwarte/beoanswer/src/assets/react.svg | 1 + .../beoanswer/src/components/Bemerkungen.jsx | 44 + .../beoanswer/src/components/BesucherBar.jsx | 57 + .../beoanswer/src/components/ConfirmModal.jsx | 65 + .../beoanswer/src/components/FandStattVer.jsx | 41 + .../beoanswer/src/components/LastButtons.jsx | 301 ++ .../beoanswer/src/components/LastLine.jsx | 13 + sternwarte/beoanswer/src/components/Modal.css | 220 ++ sternwarte/beoanswer/src/components/Modal.jsx | 74 + .../beoanswer/src/components/Spende.jsx | 48 + .../beoanswer/src/components/Verschoben.jsx | 67 + sternwarte/beoanswer/src/index.css | 69 + sternwarte/beoanswer/src/main.jsx | 10 + sternwarte/beoanswer/vite.config.js | 32 + .../beoanswer.html | 0 .../{beoanswer => beoanswer_old}/beoanswer.md | 0 .../beoanswer.php | 0 .../css/basscss-custom.css | 0 .../css/mystyle.css | 0 .../js/beoanswer.js | 0 .../js/jquery-ui-slider-access-addon.js | 0 .../js/version.js | 0 sternwarte/checkfuehrung/Entwicklung | 0 sternwarte/checkfuehrung/Produktion | 0 sternwarte/checkfuehrung/checkfuehrung.js | 39 +- sternwarte/intern/anmeld/css/anmeld.css | 4 + sternwarte/intern/anmeld/js/anmeld.js | 22 +- sternwarte/intern/anmeld/js/version.js | 7 +- sternwarte/storno/js/storno.js | 41 +- 48 files changed, 5683 insertions(+), 76 deletions(-) create mode 100644 docs/Server-Ideen.pdf create mode 100644 sternwarte/Anleitungen/Anleitung für Wireguard (VPN).pdf create mode 100644 sternwarte/beoanswer/.gitignore create mode 100644 sternwarte/beoanswer/ACHTUNG.md create mode 100644 sternwarte/beoanswer/DEPLOYMENT.md create mode 100644 sternwarte/beoanswer/Dockerfile create mode 100644 sternwarte/beoanswer/README.md create mode 100644 sternwarte/beoanswer/cors-proxy.php create mode 100644 sternwarte/beoanswer/docker-compose.yml create mode 100644 sternwarte/beoanswer/eslint.config.js create mode 100644 sternwarte/beoanswer/index.html create mode 100644 sternwarte/beoanswer/package-lock.json create mode 100644 sternwarte/beoanswer/package.json create mode 100644 sternwarte/beoanswer/public/anleitung.html create mode 100644 sternwarte/beoanswer/public/vite.svg create mode 100755 sternwarte/beoanswer/sofueDB.php create mode 100644 sternwarte/beoanswer/src/App.css create mode 100644 sternwarte/beoanswer/src/App.jsx create mode 100644 sternwarte/beoanswer/src/FormContext.jsx create mode 100644 sternwarte/beoanswer/src/assets/react.svg create mode 100644 sternwarte/beoanswer/src/components/Bemerkungen.jsx create mode 100644 sternwarte/beoanswer/src/components/BesucherBar.jsx create mode 100644 sternwarte/beoanswer/src/components/ConfirmModal.jsx create mode 100644 sternwarte/beoanswer/src/components/FandStattVer.jsx create mode 100644 sternwarte/beoanswer/src/components/LastButtons.jsx create mode 100644 sternwarte/beoanswer/src/components/LastLine.jsx create mode 100644 sternwarte/beoanswer/src/components/Modal.css create mode 100644 sternwarte/beoanswer/src/components/Modal.jsx create mode 100644 sternwarte/beoanswer/src/components/Spende.jsx create mode 100644 sternwarte/beoanswer/src/components/Verschoben.jsx create mode 100644 sternwarte/beoanswer/src/index.css create mode 100644 sternwarte/beoanswer/src/main.jsx create mode 100644 sternwarte/beoanswer/vite.config.js rename sternwarte/{beoanswer => beoanswer_old}/beoanswer.html (100%) rename sternwarte/{beoanswer => beoanswer_old}/beoanswer.md (100%) rename sternwarte/{beoanswer => beoanswer_old}/beoanswer.php (100%) rename sternwarte/{beoanswer => beoanswer_old}/css/basscss-custom.css (100%) rename sternwarte/{beoanswer => beoanswer_old}/css/mystyle.css (100%) rename sternwarte/{beoanswer => beoanswer_old}/js/beoanswer.js (100%) rename sternwarte/{beoanswer => beoanswer_old}/js/jquery-ui-slider-access-addon.js (100%) rename sternwarte/{beoanswer => beoanswer_old}/js/version.js (100%) create mode 100644 sternwarte/checkfuehrung/Entwicklung create mode 100644 sternwarte/checkfuehrung/Produktion diff --git a/docs/Server-Ideen.pdf b/docs/Server-Ideen.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6140e12f30297d7bd4a332d05aaad2b3a23ca331 GIT binary patch literal 24072 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%0D; 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 CEhql~ literal 0 HcmV?d00001 diff --git a/sternwarte/Anleitungen/Anleitung für Wireguard (VPN).pdf b/sternwarte/Anleitungen/Anleitung für Wireguard (VPN).pdf new file mode 100644 index 0000000000000000000000000000000000000000..43653062be8a60e00323f4e8fcede5741c4aad53 GIT binary patch literal 53366 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 +``` + +## Schritt 6: Testen + +1. Lokaler Test des Production Builds: +```bash +npm run preview:prod +``` + +2. Live-Test mit echter URL: +``` +https://dein-server.com/beoanswer/?id=123 +``` + +## Troubleshooting + +- **CORS Fehler**: Backend CORS Headers prüfen +- **404 Fehler**: Webserver Routing konfigurieren +- **API Fehler**: Environment Variable und Backend-URL prüfen +- **Asset Loading**: Base URL in Vite Config setzen falls nötig \ No newline at end of file diff --git a/sternwarte/beoanswer/Dockerfile b/sternwarte/beoanswer/Dockerfile new file mode 100644 index 0000000..d11c625 --- /dev/null +++ b/sternwarte/beoanswer/Dockerfile @@ -0,0 +1,12 @@ +FROM node:25-alpine + +WORKDIR /app + +COPY package*.json ./ +RUN npm install + +COPY . . + +EXPOSE 5173 + +CMD ["npm", "run", "dev", "--", "--host"] diff --git a/sternwarte/beoanswer/README.md b/sternwarte/beoanswer/README.md new file mode 100644 index 0000000..a21ce3e --- /dev/null +++ b/sternwarte/beoanswer/README.md @@ -0,0 +1,273 @@ +# BeoAnswer React App + +Eine React-Anwendung zur Nachbearbeitung von Sonderführungen mit Backend-Integration. + +## 📋 Features + +- **Interaktive Formulare** für Führungsnachbearbeitung +- **Backend-Integration** mit PHP über FormData +- **HTTP Basic Authentication** Support +- **Professionelle Modal-Dialoge** anstatt Browser-Alerts +- **Intelligente Navigation** mit Zurück-Button +- **Automatisches Fenster schließen** nach Aktionen +- **Environment-Variable Konfiguration** +- **Responsive Design** + +## 🚀 Quick Start + +### Voraussetzungen + +- Node.js (v16 oder höher) +- npm oder yarn + +### Installation + +```bash +# Repository klonen +git clone +cd beoanswer_react + +# Dependencies installieren +npm install + +# Terser für Production Builds installieren +npm install --save-dev terser + +# Environment-Datei erstellen +cp .env.example .env +``` + +### Konfiguration + +Erstelle eine `.env` Datei und passe die Werte an: + +```env +# Backend API Configuration +VITE_API_URL=/api/intern/sofue/php/sofueDB.php + +# HTTP Basic Authentication für geschütztes Backend +VITE_API_USERNAME=dein_username +VITE_API_PASSWORD=dein_passwort +``` + +### Development + +```bash +# Development Server starten +npm run dev + +# App öffnet sich auf http://localhost:5173 +# Mit URL-Parameter: http://localhost:5173/?id=123 +``` + +### Production + +```bash +# Production Build erstellen +npm run build:prod + +# Production Preview +npm run preview:prod + +# Build-Dateien befinden sich in ./dist/ +``` + +## 📦 Versionsverwaltung + +Die App zeigt automatisch die Version aus der `package.json` und das aktuelle Build-Datum an. + +### Version erhöhen + +```bash +# Patch-Version erhöhen (1.0.0 → 1.0.1) +npm version patch + +# Minor-Version erhöhen (1.0.0 → 1.1.0) +npm version minor + +# Major-Version erhöhen (1.0.0 → 2.0.0) +npm version major +``` + +### Manuell in package.json + +```json +{ + "version": "1.2.3" +} +``` + +**Wichtig:** Nach Versionänderungen den Development Server neu starten: +```bash +npm run dev +``` + +## 🛠 Scripts + +```bash +npm run dev # Development Server +npm run build # Standard Build +npm run build:prod # Production Build +npm run preview # Preview des Builds +npm run preview:prod # Preview des Production Builds +npm run lint # Code Linting +``` + +## 🌐 Deployment + +### 1. Environment Variables setzen + +Für Production eine `.env.production` erstellen: + +```env +VITE_API_URL=https://dein-server.com/intern/sofue/php/sofueDB.php +VITE_API_USERNAME=production_user +VITE_API_PASSWORD=production_password +``` + +### 2. Build erstellen + +```bash +npm run build:prod +``` + +### 3. Dateien auf Server kopieren + +```bash +# Beispiel mit rsync +rsync -avz dist/ user@server:/var/www/html/beoanswer/ + +# Oder mit scp +scp -r dist/* user@server:/var/www/html/beoanswer/ +``` + +### 4. Webserver konfigurieren + +Siehe [DEPLOYMENT.md](./DEPLOYMENT.md) für detaillierte Anweisungen. + +## 📱 Verwendung + +### URL-Parameter + +Die App erwartet einen `id` URL-Parameter: + +``` +https://dein-server.com/beoanswer/?id=123 +``` + +### Workflow + +1. **Link aus E-Mail** öffnen +2. **Formular ausfüllen**: + - Ja/Nein ob Führung stattfand + - Bei "Ja": Besucherzahl, Spenden-Art, etc. + - Bei "Nein": Absage oder Verschiebung +3. **Daten speichern** - Fenster schließt automatisch + +### Navigation + +- **Zurück-Button**: Schrittweise Navigation rückwärts +- **Abbruch**: Bestätigung mit Modal, dann Fenster schließen +- **Anleitung**: Hilfe-Modal mit Workflow-Beschreibung + +## 🔧 Entwicklung + +### Projektstruktur + +``` +src/ +├── App.jsx # Hauptkomponente mit Routing-Logik +├── FormContext.jsx # Globaler State für Formulardaten +├── main.jsx # React App Entry Point +├── App.css # Haupt-Styling +├── components/ +│ ├── BesucherBar.jsx # Eingabe für Besucher/Betrag +│ ├── Bemerkungen.jsx # Textarea für Bemerkungen +│ ├── FandStattVer.jsx # Radio-Button Komponente +│ ├── LastButtons.jsx # Abbruch/Anleitung/Senden Buttons +│ ├── LastLine.jsx # Version/Datum Anzeige +│ ├── Modal.jsx # Standard Modal Dialog +│ ├── ConfirmModal.jsx # Bestätigungs Modal +│ ├── Spende.jsx # Spenden-Art Auswahl +│ └── Verschoben.jsx # Datum-Eingabe für Verschiebung +``` + +### FormContext + +Zentrale State-Verwaltung für alle Formulardaten: + +```javascript +const { formData, updateFormData, resetFormData } = useFormData() + +// Daten setzen +updateFormData('besucher', '15') + +// Daten lesen +console.log(formData.besucher) + +// Formular zurücksetzen +resetFormData() +``` + +### Backend Integration + +Die App sendet Daten via FormData an das PHP Backend: + +```javascript +const backendData = new FormData() +backendData.append('cmd', 'UPDATEAFTER') +backendData.append('id', id) +backendData.append('besucher', formData.besucher) +// ...weitere Felder +``` + +## 🐛 Troubleshooting + +### Build-Fehler: "terser not found" + +```bash +npm install --save-dev terser +``` + +### CORS-Fehler im Development + +Vite Proxy ist konfiguriert für `localhost:8080`. Anpassen in `vite.config.js`: + +```javascript +proxy: { + '/api': 'http://localhost:8080' +} +``` + +### Environment Variables werden nicht geladen + +1. Development Server neu starten +2. Variablen müssen mit `VITE_` beginnen +3. `.env` Datei im Projektroot erstellen + +### Modal-Buttons haben keinen Abstand + +Browser-Cache leeren oder Hard-Refresh (`Ctrl+F5`). + +## 📄 Weitere Dokumentation + +- [DEPLOYMENT.md](./DEPLOYMENT.md) - Detaillierte Deployment-Anweisungen +- [.env.example](./.env.example) - Environment Variable Template + +## 🤝 Beitragen + +1. Feature Branch erstellen +2. Änderungen committen +3. Version mit `npm version` erhöhen +4. Build testen: `npm run build:prod` +5. Pull Request erstellen + +## 📝 Lizenz + +Private Projekt - Alle Rechte vorbehalten. + +--- + +**Version:** Automatisch aus package.json +**Build-Datum:** Automatisch generiert +**Letztes Update:** Oktober 2025 diff --git a/sternwarte/beoanswer/cors-proxy.php b/sternwarte/beoanswer/cors-proxy.php new file mode 100644 index 0000000..70f2227 --- /dev/null +++ b/sternwarte/beoanswer/cors-proxy.php @@ -0,0 +1,114 @@ + + } +} + +// Option 3: Letzter Fallback - aber sicherer als Klartext +if (!$username || !$password) { + // Base64-kodiert (minimal obfuskiert, aber nicht wirklich sicher) + $encoded = 'YmVvZ3J1cHBlOkFya3RVaHI='; // beogruppe:ArktUhr + $decoded = base64_decode($encoded); + list($username, $password) = explode(':', $decoded, 2); +} + +// Sicherheitscheck +if (!$username || !$password) { + http_response_code(500); + echo 'Server configuration error'; + exit(); +} + +// POST-Daten aus dem Frontend übernehmen +$postData = $_POST; + +// Debug-Log (optional, für Entwicklung) +error_log("CORS-Proxy: Weiterleitung an Backend mit " . count($postData) . " Parametern"); + +// cURL-Request an das geschützte Backend +$ch = curl_init(); +curl_setopt($ch, CURLOPT_URL, $backendUrl); +curl_setopt($ch, CURLOPT_POST, true); +curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); +curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); +curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); +curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); +curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); +curl_setopt($ch, CURLOPT_TIMEOUT, 30); + +// Response vom Backend holen +$response = curl_exec($ch); +$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); +$error = curl_error($ch); +curl_close($ch); + +// Fehlerbehandlung +if ($response === false) { + http_response_code(500); + echo "Backend-Verbindungsfehler: " . $error; + exit(); +} + +// HTTP-Status vom Backend übernehmen +http_response_code($httpCode); + +// Content-Type vom Backend übernehmen (falls JSON) +if (strpos($response, '{') === 0 || strpos($response, '[') === 0) { + header('Content-Type: application/json'); +} else { + header('Content-Type: text/plain'); +} + +// Response vom Backend weiterleiten +echo $response; +?> \ No newline at end of file diff --git a/sternwarte/beoanswer/docker-compose.yml b/sternwarte/beoanswer/docker-compose.yml new file mode 100644 index 0000000..866d388 --- /dev/null +++ b/sternwarte/beoanswer/docker-compose.yml @@ -0,0 +1,12 @@ +services: + beoanswer_rect: + build: . + ports: + - "5173:5173" + volumes: + - .:/app # Source-Code in Container mounten + - /app/node_modules # node_modules im Container behalten + environment: + - NODE_ENV=development + command: ["npm", "run", "dev", "--", "--host"] + diff --git a/sternwarte/beoanswer/eslint.config.js b/sternwarte/beoanswer/eslint.config.js new file mode 100644 index 0000000..cee1e2c --- /dev/null +++ b/sternwarte/beoanswer/eslint.config.js @@ -0,0 +1,29 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{js,jsx}'], + extends: [ + js.configs.recommended, + reactHooks.configs['recommended-latest'], + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + rules: { + 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }], + }, + }, +]) diff --git a/sternwarte/beoanswer/index.html b/sternwarte/beoanswer/index.html new file mode 100644 index 0000000..25491ef --- /dev/null +++ b/sternwarte/beoanswer/index.html @@ -0,0 +1,13 @@ + + + + + + + beoanswer + + +
+ + + diff --git a/sternwarte/beoanswer/package-lock.json b/sternwarte/beoanswer/package-lock.json new file mode 100644 index 0000000..3877cf6 --- /dev/null +++ b/sternwarte/beoanswer/package-lock.json @@ -0,0 +1,2900 @@ +{ + "name": "beoanswer_react", + "version": "1.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "beoanswer_react", + "version": "1.0.1", + "dependencies": { + "react": "^19.1.1", + "react-dom": "^19.1.1" + }, + "devDependencies": { + "@eslint/js": "^9.36.0", + "@types/react": "^19.1.16", + "@types/react-dom": "^19.1.9", + "@vitejs/plugin-react": "^5.0.4", + "eslint": "^9.36.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.22", + "globals": "^16.4.0", + "terser": "^5.44.0", + "vite": "^7.1.7" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz", + "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.11.tgz", + "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz", + "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.11.tgz", + "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz", + "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz", + "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz", + "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz", + "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz", + "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz", + "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz", + "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz", + "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz", + "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz", + "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz", + "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz", + "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz", + "integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz", + "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz", + "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz", + "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz", + "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz", + "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz", + "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz", + "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz", + "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz", + "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz", + "integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz", + "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.43", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.43.tgz", + "integrity": "sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", + "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", + "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", + "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", + "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", + "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", + "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", + "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", + "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", + "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", + "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", + "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", + "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", + "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", + "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", + "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", + "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", + "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", + "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", + "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", + "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", + "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", + "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", + "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.2.tgz", + "integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.0.tgz", + "integrity": "sha512-4LuWrg7EKWgQaMJfnN+wcmbAW+VSsCmqGohftWjuct47bv8uE4n/nPpq4XjJPsxgq00GGG5J8dvBczp8uxScew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.4", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.43", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.20", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.20.tgz", + "integrity": "sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", + "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.8.19", + "caniuse-lite": "^1.0.30001751", + "electron-to-chromium": "^1.5.238", + "node-releases": "^2.0.26", + "update-browserslist-db": "^1.1.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001751", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", + "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.243", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.243.tgz", + "integrity": "sha512-ZCphxFW3Q1TVhcgS9blfut1PX8lusVi2SvXQgmEEnK4TCmE1JhH2JkjJN+DNt0pJJwfBri5AROBnz2b/C+YU9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz", + "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.11", + "@esbuild/android-arm": "0.25.11", + "@esbuild/android-arm64": "0.25.11", + "@esbuild/android-x64": "0.25.11", + "@esbuild/darwin-arm64": "0.25.11", + "@esbuild/darwin-x64": "0.25.11", + "@esbuild/freebsd-arm64": "0.25.11", + "@esbuild/freebsd-x64": "0.25.11", + "@esbuild/linux-arm": "0.25.11", + "@esbuild/linux-arm64": "0.25.11", + "@esbuild/linux-ia32": "0.25.11", + "@esbuild/linux-loong64": "0.25.11", + "@esbuild/linux-mips64el": "0.25.11", + "@esbuild/linux-ppc64": "0.25.11", + "@esbuild/linux-riscv64": "0.25.11", + "@esbuild/linux-s390x": "0.25.11", + "@esbuild/linux-x64": "0.25.11", + "@esbuild/netbsd-arm64": "0.25.11", + "@esbuild/netbsd-x64": "0.25.11", + "@esbuild/openbsd-arm64": "0.25.11", + "@esbuild/openbsd-x64": "0.25.11", + "@esbuild/openharmony-arm64": "0.25.11", + "@esbuild/sunos-x64": "0.25.11", + "@esbuild/win32-arm64": "0.25.11", + "@esbuild/win32-ia32": "0.25.11", + "@esbuild/win32-x64": "0.25.11" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz", + "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.1", + "@eslint/core": "^0.16.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.38.0", + "@eslint/plugin-kit": "^0.4.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.24.tgz", + "integrity": "sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "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/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "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/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "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", + "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", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz", + "integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "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.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", + "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", + "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.0" + } + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", + "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.5", + "@rollup/rollup-android-arm64": "4.52.5", + "@rollup/rollup-darwin-arm64": "4.52.5", + "@rollup/rollup-darwin-x64": "4.52.5", + "@rollup/rollup-freebsd-arm64": "4.52.5", + "@rollup/rollup-freebsd-x64": "4.52.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", + "@rollup/rollup-linux-arm-musleabihf": "4.52.5", + "@rollup/rollup-linux-arm64-gnu": "4.52.5", + "@rollup/rollup-linux-arm64-musl": "4.52.5", + "@rollup/rollup-linux-loong64-gnu": "4.52.5", + "@rollup/rollup-linux-ppc64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-musl": "4.52.5", + "@rollup/rollup-linux-s390x-gnu": "4.52.5", + "@rollup/rollup-linux-x64-gnu": "4.52.5", + "@rollup/rollup-linux-x64-musl": "4.52.5", + "@rollup/rollup-openharmony-arm64": "4.52.5", + "@rollup/rollup-win32-arm64-msvc": "4.52.5", + "@rollup/rollup-win32-ia32-msvc": "4.52.5", + "@rollup/rollup-win32-x64-gnu": "4.52.5", + "@rollup/rollup-win32-x64-msvc": "4.52.5", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/terser": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "7.1.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz", + "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "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", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.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 + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/sternwarte/beoanswer/package.json b/sternwarte/beoanswer/package.json new file mode 100644 index 0000000..a81c402 --- /dev/null +++ b/sternwarte/beoanswer/package.json @@ -0,0 +1,30 @@ +{ + "name": "beoanswer_react", + "private": true, + "version": "1.0.2", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "build:prod": "vite build --mode production", + "preview": "vite preview", + "preview:prod": "vite preview --mode production", + "lint": "eslint ." + }, + "dependencies": { + "react": "^19.1.1", + "react-dom": "^19.1.1" + }, + "devDependencies": { + "@eslint/js": "^9.36.0", + "@types/react": "^19.1.16", + "@types/react-dom": "^19.1.9", + "@vitejs/plugin-react": "^5.0.4", + "eslint": "^9.36.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.22", + "globals": "^16.4.0", + "terser": "^5.44.0", + "vite": "^7.1.7" + } +} diff --git a/sternwarte/beoanswer/public/anleitung.html b/sternwarte/beoanswer/public/anleitung.html new file mode 100644 index 0000000..7656e84 --- /dev/null +++ b/sternwarte/beoanswer/public/anleitung.html @@ -0,0 +1,147 @@ + + + + + + BeoAnswer - Anleitung + + + +

📋 BeoAnswer - Anleitung

+ +
+ Willkommen! Diese Anleitung hilft Ihnen bei der Nachbearbeitung von Sonderführungen. +
+ +

🚀 Schnellstart

+

Die Anwendung führt Sie Schritt für Schritt durch die Nachbearbeitung. Folgen Sie einfach den Anweisungen auf dem Bildschirm.

+ +

📝 Workflow

+ +
+

1. Grundfrage beantworten

+

"Fand die Führung statt?"

+
    +
  • Ja: Weiter zu Schritt 2
  • +
  • Nein: Weiter zu Schritt 5
  • +
+
+ +
+

2. Besucherzahl eingeben (nur bei "Ja")

+

Geben Sie die Anzahl der Teilnehmer ein und klicken Sie auf "OK".

+
Sie können auch die Enter-Taste drücken.
+
+ +
+

3. Spenden-Art auswählen (nur bei "Ja")

+

Wählen Sie aus:

+
    +
  • Barspende: Weiter zu Schritt 4
  • +
  • Wird überwiesen: Weiter zu Schritt 5
  • +
  • Spendenkässle: Weiter zu Schritt 5
  • +
  • Keine Spende: Weiter zu Schritt 5
  • +
+
+ +
+

4. Spendenbetrag eingeben (nur bei Barspende)

+

Geben Sie den Betrag der Barspende in Euro ein.

+
+ +
+

5. Bemerkungen hinzufügen (optional)

+

Hier können Sie zusätzliche Informationen zur Führung eingeben:

+
    +
  • Besonderheiten
  • +
  • Probleme
  • +
  • Feedback der Teilnehmer
  • +
  • Sonstige Anmerkungen
  • +
+
Verwenden Sie Strg+Enter (oder Cmd+Enter) zum schnellen Speichern.
+
+ +

❌ Bei abgesagten/verschobenen Führungen

+ +
+

1. Grund auswählen

+

"Die Führung wurde"

+
    +
  • Abgesagt: Direkt zum Senden
  • +
  • Verschoben: Weiter zu Schritt 2
  • +
+
+ +
+

2. Neues Datum eingeben (nur bei "Verschoben")

+

Wählen Sie das neue Datum und die Uhrzeit für die verschobene Führung.

+
+ +

🔄 Navigation

+
    +
  • Zurück-Button: Geht einen Schritt zurück und löscht die entsprechenden Eingaben
  • +
  • Abbruch: Bricht den Vorgang ab (mit Sicherheitsabfrage)
  • +
  • Anleitung: Zeigt diese Hilfe an
  • +
  • Senden: Speichert alle Daten und schließt das Fenster
  • +
+ +

✅ Abschluss

+

Nach dem Klick auf "Senden" werden die Daten gespeichert und das Fenster schließt sich automatisch. Sie kehren zur ursprünglichen Anwendung zurück.

+ +
+ Fragen oder Probleme? Wenden Sie sich an den Administrator. +
+ + \ No newline at end of file diff --git a/sternwarte/beoanswer/public/vite.svg b/sternwarte/beoanswer/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/sternwarte/beoanswer/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sternwarte/beoanswer/sofueDB.php b/sternwarte/beoanswer/sofueDB.php new file mode 100755 index 0000000..7842b0c --- /dev/null +++ b/sternwarte/beoanswer/sofueDB.php @@ -0,0 +1,398 @@ +sub(new DateInterval('P9M')); + $lastdate = $lastdate->format('Y-m-d'); + if($st == 4) { + $where ="where stattgefunden = 1 and deleted = 0 "; + } else { + $where = "where status = '$st' and deleted = 0"; + if ($termin == 'neu') { + $where = $where . " and wtermin >= now()"; + } + } + + // Anzahl der Records holen + $query = "select count(*) as count from $table $where "; + $row = getFromDbase($db,$query,true); + $count = $row['count']; + + // Anzahl der Seiten ausrechnen + $totalpages = ceil($count/$anz); + // Falls die angeforderte Seit > als die ANzahl der Seiten ist, die letzte Seite übergeben + if($pagnbr > $totalpages) $pagnbr = $totalpages; + // Start-Record berechnen + $start = $anz * ($pagnbr-1); + if($start <0) { + $start = 0; + } + $where = $where . " and DATE(wtermin) >= '$lastdate'"; + $query = "select * from $table $where order by wtermin desc limit $start,$anz"; + $rows = getFromDbase($db, $query, false); + + $response->page = $pagnbr; + $response->total = $totalpages; // Es wird immer 1 Page übergeben + $cnt = 0; + foreach($rows as $row) { + $response->rows[$cnt]['id'] = $row['id']; + $response->rows[$cnt]['cell'] = $row; + $cnt++; + } + $response->records = $count; + return ($response); +} + +# string substr ( string $string , int $start [, int $length ] ) +# Beo-Daten holen +function getBeos($db, $what, $cond) { + $retur = array(); + if($cond == "") { + $query = "select $what from beos order by $what"; + } else { + $a = strpos($cond,'empty'); + if ( $a !== false) { + $b = substr($cond,0,$a); + $query = "select $what from beos where $b '' order by $what"; + } else { + $query = "select $what from beos where $cond order by $what"; + } + } +# echo $query; + $rows = getFromDbase($db, $query, false); + foreach($rows as $row) { + $retur[] = $row[$what]; + } + return ($retur); +} + +# Statistikdaten für das laufende (oder ein altes) Jahr holen und übergeben +# Ausgaben: JSON: +# { year: 2018, +# data:[ +# { month: 1, angefragt: 10, zugesagt: 7, abgesagt: 3, stattgefunden: 6 }, +# { month: 2, angefragt: 8, zugesagt: 6, abgesagt: 2, stattgefunden: 5 }, +# { month: 3, angefragt: 23, zugesagt: 20, abgesagt: 3, stattgefunden: 15 }, +# ... +# { month: 12, angefragt: 34, zugesagt: 22, abgesagt: 12, stattgefunden: 10 }, +function getStatistik($db, $year) { + +} + + +# Daten eines BEO holen, mit Name als Suchkriterium +function getOneBEO($db, $name) { + $query = "select * from beos where name = '$name'"; + return getFromDbase($db, $query, true); +} + +function updateEntry($db, $post) { + global $table; + $oldinhalt = getOneRecord($db, $post['id']); + $data = "mitarbeiter='" . $post['mitarbeiter'] . + "', status='" . $post['status'] . + "', bemerkung='" . $post['bemerkung'] . + "', wtermin='" . $post['wtermin'] . + "', atermin='" . $post['atermin'] . + "', allwett=''" . + ", erledigt_datum='" . $post['erledigt_datum'] . "'"; + $id = $post['id']; + $query = "update $table set $data where id='$id'"; + $ret = cudDbase($db, $query); + $newinhalt = getOneRecord($db, $post['id']); + $ma = $post['mitarbeiter']; + $oldTermin = $oldinhalt['wtermin']; + return $ret; +} + +function updateAfter($db,$post) { + global $table; + $oldinhalt = getOneRecord($db, $post['id']); + $data = "stattgefunden='" . $post['stattgefunden'] . + "', anzahl_echt='" . $post['besucher'] . + "', remarks='" . $post['remark'] . + "', bezahlt='" . $post['bezahlt'] . "'"; + // if (!empty($post['wtermin'])) { + // $data .= ", wtermin='" . $post['wtermin'] . "'"; + // $ma = $oldInhalt['mitarbeiter']; + // sendMailTo($ma, $oldinhalt, $post['wtermin'], "Wunsch"); + // } + if (!empty($post['status'])) { + $data .= ", status='" . $post['status'] . "'"; + } + $id = $post['id']; + $query = "update $table set $data where id='$id'"; + $ret = cudDbase($db, $query); + return($ret); +} + +function deleteEntry($db, $id) { + global $table; + $query = "update $table set deleted=true where id='$id'"; + return cudDbase($db, $query); +} + +function getDBdata() { + global $host, $dbase, $user, $pass; + + $erg = "HOST: >" . $host . "<   Dbase: >" . $dbase . "<   user/pass: >" . $user . "/" . $pass . "<"; + return $erg; +} + + +function findBeoVorname($who) { + global $db; + $names = explode(",",$who); + $erg = getbeos($db,'vorname',"name='".$names[0]."'"); + return ($erg[0]); +} + +function findBeoEmail($who) { + global $db; + $names = explode(",",$who); + $erg = getbeos($db,'email_1',"name='".$names[0]."'"); + return ($erg[0]); +} + + +function wterminstr($t) { + $tage = array( + "So", + "Mo", + "Di", + "Mi", + "Do", + "Fr", + "Sa" + ); + $dati = strtotime($t); + $dt = $tage[date("w",$dati)] . ", " . date('d.m.Y H:i',$dati); + return $dt; +} +function sendMail2Beo($ma, $termin) { + $dt = wterminstr($termin); + $body = "Hallo " . findBeoVorname($ma) .", + + vielen Dank für die Bereitschaft, die Sonderführung am {$dt} zu übernehmen. + Bitte den Termin nicht vergessen und bitte ggf. auch das Teammitglied, das die + Führung mitmacht, informieren. + + Der Termin wurde in den Sternwartenkalender eingetragen. + + Die Kontaktdaten sind auf der Sonderführungsseite ( https://sternwarte-welzheim.de/intern/sofue/sofue.php ) zu finden. + + Viele Grüße + Reinhard + + Diese Meldung wurde automatisch erzeugt. Es kann nicht geantwortet werden."; + + $betreff = "Vereinbarte Sonderführung am " .$dt; + $absender = "noreply@sternwarte-welzheim.de"; + sendmail($betreff, $absender, $body, [], ['rexfue@gmail.com'], [findBeoEmail($ma)]); +} + +function sendMailZusage($to, $mitarbeiter, $termin) { + $dt = wterminstr($termin); + $betreff = "ZUSAGE - Sternwartenführung am {$dt} Uhr"; + $absender = "anmeldung@sternwarte-welzheim.de"; + $ge1 = ($mitarbeiter['gender'] == 'm') ? "unser ehrenamtlicher Mitarbeiter, Herr" : "unsere ehrenamtliche Mitarbeiterin, Frau"; + $ge2 = ($mitarbeiter['gender'] == 'm') ? "ihn" : "sie"; + $ge3 = ($mitarbeiter['gender'] == 'm') ? "Herrn" : "Frau"; + $body = " + Guten Tag, + + für Ihren Wunschtermin, {$dt} Uhr, hat sich {$ge1} {$mitarbeiter['vorname']} {$mitarbeiter['name']} bereit erklärt, + die Sonderführung zu übernehmen. Sie erreichen {$ge2} über die e-mail-Adresse: {$mitarbeiter['email_1']} + + Um nähere Besuchsmodalitäten zu klären, bitten wir Sie, mit {$ge3} {$mitarbeiter['name']} Kontakt aufzunehmen. + + Wir bitten Sie, die Spende in Höhe von €50.00 auf unten aufgeführtes Konto zu überweisen oder in bar zur Führung mitzubringen. + + Gesellschaft zur Förderung des Planetariums Stuttgart und der Sternwarte Welzheim e.V. + BANKVERBINDUNG: Deutsche Bank AG Stuttgart + IBAN DE18 6007 0070 0122 0383 00 + BIC: DEUTDESSXXX + + + Mit sternfreundlichen Grüßen + Reinhard X. Fürst + Sternwarte Welzheim + "; + sendmail($betreff, $absender, $body, [$mitarbeiter['email_1']], ['rexfue@gmail.com'], [$to]); +} + +function sendMail2Liste($to, $erg) { + $betreff = "Anfrage Sonderführung am {$erg['wtermin']}"; + $absender = "sonderfuehrung@sternwarte-welzheim.de"; + $body = " + Liebe BEOs, + + wer kann folgende Sonderführung übernehmen? + + Viele Grüße + Reinhard + + ---------------------------------------------------------------------------------------------------"; + + $body = $body . " + Name, Vorname: " . $erg['name'] . " " . $erg['vorname'] . " + Verein / Organisation : " . $erg['verein'] . " + Wunsch - Termin: " . $erg['wtermin'] . " + Teilnehmerzahl ca.: " . $erg['anzahl'] . " + + Weitere Fragen oder Mitteilungen: " . $erg['mitteilung'] . " + Spendenbescheinigung: " . $erg['spende'] . " + ---------------------------------------------------------------------------------------------------"; + sendmail($betreff, $absender, $body, [], [], [$to]); +} + +// Sonderführung in den Kalender eintragen +function put2kalender($db, $data, $termin, $ma) { + $start = substr($termin,0,16); + $title = "WK, SF " . $data['name'] . ", " . $ma; + $sql = "INSERT into kalender (start, end, title, description) VALUES ('" . $start . "', DATE_ADD('" . $start . "',INTERVAL 2 HOUR), '" . $title . "', '')"; + $erg = cudDbase($db, $sql); + $mist = 23; +} + + +// Hier gehts dann los: +// Alle Paramater aus dem Ajax-Call auslesen +// Mögliche Aufrufe: +/* + * cmd=GET param=ID id=5 bringt das eine Record mit ID=5 + * cmd=GET param=STATUS staus=offen bringt ALLE records mit stautus='offen' in zeitlich absteigender Reihenfoleg + */ + +$erg = ""; +$cmd = $_POST["cmd"]; + +/* +$x = "# "; +foreach ($_POST as $key => $value) { + $x = $x . $key . " " . $value . "\n"; +} +$x = $x . '# '; +echo $x; +*/ + +switch ($cmd) { + case 'GET_ONE': + $erg = getOneRecord($db, $_POST["id"]); + break; + case 'GET_ONETERMIN': + $erg = getOneRecordTermin($db, $_POST["termin"]); + break; + case 'GET_MANY': + $st = $_POST['status']; + $anzahl = $_POST['rows']; + $page = $_POST['page']; + $termin = $_POST['termin']; + $erg = getRecords($db,$st, $termin ,$anzahl,$page); + break; + case 'GET_BEOS': + $erg = getBeos($db,$_POST['what'],$_POST['cond']); +// echo '#' . $erg ; + break; + case 'GET_ONEBEO': + $erg = getOneBEO($db,$_POST['name']); + // echo '#' . $erg ; + break; + # case GET_FUEH: +# $erg = getFuehrung_findet_statt($db); +# break; + case 'GET_STAT': +# $erg = getStatistik($db,$_POST['year']); + break; + case 'UPDATE': + $erg = updateEntry($db, $_POST); + break; + case 'UPDATEAFTER': + $erg = updateAfter($db, $_POST); + break; + case 'DELETE': + $erg = deleteEntry($db, $_POST['id']); + break; + case 'SENDMAILZUSAGE': +// function sendMailZusage($to, $mitarbeiter, $termin) { + $erg = getOneRecord($db, $_POST["id"]); + $names = explode(",",$_POST['mitarbeiter']); + $ma = getOneBEO($db, $names[0]); + sendMailZusage($erg['email'], $ma, $_POST['termin']); + break; + case 'SENDMAIL2BEO': +// function sendMail2Beo($ma, $termin) { + sendMail2beo($_POST['ma'], $_POST['termin']); + break; + case 'SENDMAIL2LISTE': + $erg = getOneRecord($db, $_POST["id"]); + sendMail2Liste($_POST['to'],$erg); + break; + case 'PUT2KALENDER': + $erg = getOneRecord($db, $_POST["id"]); + put2kalender($db, $erg, $_POST['termin'], $_POST['mitarbeiter']); + break; + case 'SHOWDB': + $erg = getDBdata(); + break; +} +header("Content-type: text/json;charset=utf-8"); + +echo json_encode($erg); + +?> + diff --git a/sternwarte/beoanswer/src/App.css b/sternwarte/beoanswer/src/App.css new file mode 100644 index 0000000..11d145a --- /dev/null +++ b/sternwarte/beoanswer/src/App.css @@ -0,0 +1,122 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.wrapper { + max-width: 600px; + margin: auto; + border: 1px solid blue; + background: lightgray; + border-radius: 10px; +} + +button { + background-color: lightskyblue; + font-weight: bold; +} + + +.nachbearbeitung { + background-color: yellow; + height: 50px; + padding-top: 12px; +} + +section { + border-bottom : 1px solid rgb(187, 185, 185); + text-align: left; + margin: 0 auto 20px auto; + padding: 0 0em 1em 2em; + font-weight: bold; +} + +.infeldsm { + width: 12em; +} + +.fstdiv { + margin-bottom: 1em; +} + +.fsLabel { + margin-right: 20px; + margin-bottom: 3rem; +} + +.okbutton { + margin-left: 2em; +} + +.radiogroup { + display: flex; + flex-direction: column; + gap: 10px; +} + +.selspende { + display: flex; + align-items: center; +} + +.spendeok { + margin-left: 2em; +} +.bemerkdiv { + display: flex; + align-items: center; +} + +.beminfeld { + width: 14em; +} + +.lastline { + border-top: 1px solid blue; + display: flex; + justify-content: space-between; + margin: auto; + padding: 15px; + font-size: 80%; +} + +.lastbuttons { + display: flex; + justify-content: space-around; + align-content: space-around; + flex-wrap: wrap; + width: 80%; + margin: auto; + margin-bottom: 20px; + gap: 15px; +} + +.umbruch { + display: none; +} + +.btnsend { + background-color: blue; + color: white; +} + +.btnsend :hover { + border-color: #646cff; +} + + +@media (max-width: 480px) { + .umbruch { + display: block; + } + + .lastline { + font-size: 50%; + } +} + +input[type="radio"] { + margin-right: 10px; +} \ No newline at end of file diff --git a/sternwarte/beoanswer/src/App.jsx b/sternwarte/beoanswer/src/App.jsx new file mode 100644 index 0000000..ff57000 --- /dev/null +++ b/sternwarte/beoanswer/src/App.jsx @@ -0,0 +1,330 @@ +import { useState, useEffect } from 'react' +import { FormProvider, useFormData } from './FormContext' +import packageJson from '../package.json' +import './App.css' +import FandStattVer from './components/FandStattVer.jsx' +import BesucherBar from './components/BesucherBar.jsx' +import Spende from './components/Spende.jsx' +import LastLine from './components/LastLine.jsx' +import Bemerkungen from './components/Bemerkungen.jsx' +import LastButtons from './components/LastButtons.jsx' +import Verschoben from './components/Verschoben.jsx' + + +function AppContent() { + // States für Backend-Daten + const [datum, setDatum] = useState("") + const [name, setName] = useState("") + const [loading, setLoading] = useState(true) + const [error, setError] = useState(null) + const [mitsend, setMitsend] = useState(false) + const [mitback, setMitback] = useState(false) + + const version = packageJson.version + const vdate = new Date().toLocaleDateString('de-DE') + + // States + const [schritt, setSchritt] = useState(0) + const [pfad, setPfad] = useState('') + + // Hole formData aus dem Context + const { formData, updateFormData } = useFormData() + + // URL-Parameter und Backend-Aufruf + useEffect(() => { + const fetchData = async () => { + // API URL aus Environment Variable laden + const APIURL = import.meta.env.VITE_API_URL + + if (!APIURL) { + throw new Error('API URL nicht konfiguriert. Bitte VITE_API_URL in .env Datei setzen.') + } + + try { + // URL-Parameter auslesen + const urlParams = new URLSearchParams(window.location.search) + const id = urlParams.get('id') + + if (!id) { + throw new Error('Keine ID in der URL gefunden. Bitte rufen Sie die Seite mit ?id=123 auf.') + } + + console.log('Loading data for ID:', id) + + // Backend-Aufruf mit HTTP Basic Auth + const formData = new FormData() + formData.append('cmd', 'GET_ONE') + formData.append('id', id) + + // HTTP Basic Authentication Header erstellen + const username = import.meta.env.VITE_API_USERNAME + const password = import.meta.env.VITE_API_PASSWORD + const headers = {} + + if (username && password) { + const credentials = btoa(`${username}:${password}`) + headers['Authorization'] = `Basic ${credentials}` + } + + const response = await fetch(APIURL, { + method: 'POST', + headers: headers, + body: formData + }) + + if (!response.ok) { + throw new Error(`Daten konnten nicht geladen werden. Server-Fehler: ${response.status}`) + } + + const data = await response.json() + + console.log('Received data:', data) // Debug-Ausgabe + + // Anpassung an die Datenbankfelder der SoFue2 Tabelle + if (!data.wtermin || !data.name) { + throw new Error('Unvollständige Daten vom Server erhalten.') + } + + // Daten aus Backend setzen + // wtermin ist vermutlich ein datetime, also nur das Datum extrahieren + const terminDate = new Date(data.wtermin) + const formatiertesDatum = terminDate.toLocaleDateString('de-DE') + + setDatum(formatiertesDatum) + setName(data.name + (data.vorname ? ' ' + data.vorname : '')) + + console.log('Data loaded:', data) + setLoading(false) + + } catch (err) { + console.error('Error loading data:', err) + setError(err.message) + setLoading(false) + } + } + + fetchData() + }, []) // Leere Dependency-Array = nur beim ersten Laden ausführen + + + // Callbacks: + const handleFandStattVerNext = (auswahl) => { + auswahl && setPfad(auswahl) + handleNext() + } + + const handleNext = () => { + setSchritt((schritt) => schritt + 1) + } + + const handleBack = () => { + if (schritt > 0) { + const neuerSchritt = schritt - 1 + setSchritt(neuerSchritt) + + // Entsprechende FormData-Felder zurücksetzen je nach Schritt und Pfad + if (pfad === 'ja') { + // JA-Pfad rückwärts + if (schritt === 1) { + // Von Besucher zurück zu ja/nein → Pfad löschen + setPfad('') + updateFormData('stattgefunden', '') + } else if (schritt === 2) { + // Von Spende zurück zu Besucher → Besucher löschen + updateFormData('besucher', '') + } else if (schritt === 3) { + // Von Betrag/Bemerkungen zurück zu Spende → Spende löschen + updateFormData('spendenArt', '') + } else if (schritt === 4) { + // Von Bemerkungen zurück → Betrag löschen (bei Bar-Spende) + updateFormData('betrag', '') + } else if (schritt === 5) { + // Von Senden zurück → Bemerkungen löschen + updateFormData('bemerkungen', '') + } + } else if (pfad === 'nein') { + // NEIN-Pfad rückwärts + if (schritt === 1) { + // Von abgesagt/verschoben zurück zu ja/nein → Pfad löschen + setPfad('') + updateFormData('stattgefunden', '') + } else if (schritt === 2) { + // Von Datum/Senden zurück zu abgesagt/verschoben → abgesagt löschen + updateFormData('abgesagt', '') + } else if (schritt === 3) { + // Von Senden zurück → neues Datum löschen (bei verschoben) + updateFormData('neuesDatum', '') + } + } + } + } + + const setBackButton = () => { + setMitback(true) + } + + // Welche Komponeneten werden angezeigt: + const renderCoponents = () => { + const components = [] + + // Schritt 0: ja/nein - Auswahl + components.push( + 1} /> + ) + if (schritt === 0) { + // Bei ja/nein Auswahl: Kein Zurück-Button, kein Senden-Button + components.push() + return components + } + + // JA-Pfad: + if (pfad === 'ja') { + // Schritt 1: Besucher-Anzahl + if (schritt >= 1) { + components.push( 1} /> + ) + } + + // Schritt 2: Spende + if (schritt >= 2) { + components.push( 2} /> + ) + } + + // Schritt 3: Betrag der Spende (nur bei Bar-Spende) + if ((schritt >= 3) && (formData.spendenArt === 'bar')) { + components.push( 3} /> + ) + } + + // Schritt 4 (bei Bar-Spende) oder Schritt 3 (bei anderen Spenden): Bemerkungen + const bemerkungsSchritt = (formData.spendenArt === 'bar') ? 4 : 3 + if (schritt >= bemerkungsSchritt) { + components.push( bemerkungsSchritt} /> + ) + } + + } + // NEIN - Pfad + if (pfad === 'nein') { + + // Schritt 1: abgesagt / verschoben + if (schritt >= 1) { + components.push( + 1} /> + ) + } + + // Schritt 2: Ende wenn abgesagt bzw. neues Datum bei verschoben + if (schritt >= 2 && formData.abgesagt === 'verschoben') { + components.push( 2} /> + ) + } + + } + + // Zurück-Button nur anzeigen wenn nicht bei ja/nein Auswahl + const backVerfuegbar = schritt > 0 + + // LastButtons IMMER anzeigen, aber Senden-Button nur wenn bereit + const sendenBereit = () => { + if (pfad === 'ja') { + // JA-Pfad: vollständig wenn Bemerkungen-Schritt ABGESCHLOSSEN ist + const bemerkungsSchritt = (formData.spendenArt === 'bar') ? 4 : 3 + return schritt > bemerkungsSchritt // NACH dem Bemerkungsschritt, nicht beim Erreichen + } else if (pfad === 'nein') { + // NEIN-Pfad: vollständig wenn abgesagt ODER verschoben mit Datum + if (formData.abgesagt === 'abgesagt') { + return schritt >= 2 // Beim Erreichen von Schritt 2 (nach Auswahl abgesagt) + } else if (formData.abgesagt === 'verschoben') { + return schritt >= 3 && formData.neuesDatum // Beim Erreichen von Schritt 3 mit Datum + } + } + return false + } + + // LastButtons immer anzeigen + components.push() + + return components + } + + // Loading und Error States + if (loading) { + return ( +
+
+

Lade Daten...

+

Bitte warten Sie, während die Führungsdaten geladen werden.

+
+
+ ) + } + + if (error) { + return ( +
+
+

+ Fehler beim Laden der Daten +

+
+

❌ Die Anwendung kann nicht gestartet werden

+

Grund: {error}

+
+

Mögliche Lösungen:

+
    +
  • Überprüfen Sie die URL - sie sollte eine ID enthalten (z.B. ?id=123)
  • +
  • Stellen Sie sicher, dass das Backend erreichbar ist
  • +
  • Kontaktieren Sie den Administrator
  • +
+ +
+
+
+ ) + } + + return ( +
+
+

+ Sonderführung vom
{datum} +

+

für {name}

+

Nachbearbeitung

+
+ {renderCoponents().map(component => component)} + +
+ ) +} + +function App() { + return ( + + + + ) +} + +export default App diff --git a/sternwarte/beoanswer/src/FormContext.jsx b/sternwarte/beoanswer/src/FormContext.jsx new file mode 100644 index 0000000..4f35f29 --- /dev/null +++ b/sternwarte/beoanswer/src/FormContext.jsx @@ -0,0 +1,57 @@ +// ======================================== +// FormContext.jsx - Globaler State für alle Formulardaten +// ======================================== +import { createContext, useContext, useState } from 'react' + +const FormContext = createContext() + +export function FormProvider({ children }) { + + const [formData, setFormData] = useState({ + stattgefunden: '', + besucher: '', // war: besucherAnzahl + spendenArt: '', + betrag: '', // war: barspende + bemerkungen: '', + neuesDatum: '', // war: neuertermin + abgesagt: '', // für abgesagt/verschoben + // Weitere Felder können hier hinzugefügt werden + }) + + const updateFormData = (field, value) => { + setFormData(prev => { + const newData = { + ...prev, + [field]: value + } + return newData + }) + } + + const resetFormData = () => { + + setFormData({ + stattgefunden: '', + besucher: '', + spendenArt: '', + betrag: '', + bemerkungen: '', + neuesDatum: '', + abgesagt: '' + }) + } + + return ( + + {children} + + ) +} + +export function useFormData() { + const context = useContext(FormContext) + if (!context) { + throw new Error('useFormData muss innerhalb von FormProvider verwendet werden. Stelle sicher, dass deine Komponente von umschlossen ist.') + } + return context +} diff --git a/sternwarte/beoanswer/src/assets/react.svg b/sternwarte/beoanswer/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/sternwarte/beoanswer/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sternwarte/beoanswer/src/components/Bemerkungen.jsx b/sternwarte/beoanswer/src/components/Bemerkungen.jsx new file mode 100644 index 0000000..dc28ed7 --- /dev/null +++ b/sternwarte/beoanswer/src/components/Bemerkungen.jsx @@ -0,0 +1,44 @@ +import { useState } from 'react' +import { useFormData } from '../FormContext' + +export default function Bemerkungen({ onNext, isCompleted }) { + + const { formData, updateFormData } = useFormData() + const [wert, setWert] = useState(formData.bemerkungen || '') + + + const handleOK = () => { + updateFormData('bemerkungen', wert) + onNext() + } + + const handleKeyDown = (e) => { + // Ctrl+Enter oder Cmd+Enter zum Speichern + if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') { + handleOK() + } + } + + return ( +
+

Bemerkungen (optional):

+
+