From 54455e5b6c0965d3e07323ef18c19bba2eb2f682 Mon Sep 17 00:00:00 2001 From: Sanders Date: Thu, 4 Dec 2025 16:31:18 +0300 Subject: [PATCH] Init --- .idea/.gitignore | 8 + .idea/compiler.xml | 18 + .idea/encodings.xml | 6 + .idea/jarRepositories.xml | 20 + .idea/misc.xml | 12 + .idea/vcs.xml | 6 + GEMINI.md | 74 + TODO.md | 100 + frontend/.gitignore | 24 + frontend/README.md | 73 + frontend/eslint.config.js | 23 + frontend/index.html | 13 + frontend/package-lock.json | 4140 +++++++++++++++++ frontend/package.json | 41 + frontend/postcss.config.js | 6 + frontend/public/vite.svg | 1 + frontend/src/App.css | 42 + frontend/src/App.tsx | 50 + frontend/src/assets/react.svg | 1 + frontend/src/components/Lobby.tsx | 103 + frontend/src/components/StartScreen.tsx | 95 + frontend/src/hooks/GameContext.tsx | 132 + frontend/src/index.css | 33 + frontend/src/main.tsx | 10 + frontend/src/types/index.ts | 41 + frontend/tailwind.config.js | 11 + frontend/tsconfig.app.json | 28 + frontend/tsconfig.json | 7 + frontend/tsconfig.node.json | 26 + frontend/vite.config.ts | 18 + pom.xml | 57 + .../telegaapp/TelegaAppApplication.java | 13 + .../example/telegaapp/bot/TelegramBot.java | 77 + .../telegaapp/config/WebSocketConfig.java | 55 + .../controller/SocketController.java | 67 + .../controller/WebAppController.java | 27 + .../example/telegaapp/dto/CreateRequest.java | 9 + .../example/telegaapp/dto/JoinRequest.java | 10 + .../telegaapp/dto/TeamJoinRequest.java | 9 + .../example/telegaapp/model/GameState.java | 9 + .../com/example/telegaapp/model/Player.java | 16 + .../com/example/telegaapp/model/Room.java | 43 + .../com/example/telegaapp/model/Team.java | 21 + .../telegaapp/service/GameService.java | 86 + .../telegaapp/service/WordService.java | 25 + src/main/resources/application.properties | 5 + .../static/assets/index-Plf17G8e.css | 1 + .../resources/static/assets/index-WmiXnQva.js | 16 + src/main/resources/static/index.html | 14 + src/main/resources/static/vite.svg | 1 + target/classes/application.properties | 5 + .../telegaapp/TelegaAppApplication.class | Bin 0 -> 758 bytes .../example/telegaapp/bot/TelegramBot.class | Bin 0 -> 4110 bytes .../telegaapp/config/WebSocketConfig$1.class | Bin 0 -> 2401 bytes .../WebSocketConfig$StompPrincipal.class | Bin 0 -> 723 bytes .../telegaapp/config/WebSocketConfig.class | Bin 0 -> 2406 bytes .../controller/SocketController.class | Bin 0 -> 5234 bytes .../controller/WebAppController.class | Bin 0 -> 2012 bytes .../example/telegaapp/dto/CreateRequest.class | Bin 0 -> 2243 bytes .../example/telegaapp/dto/JoinRequest.class | Bin 0 -> 2661 bytes .../telegaapp/dto/TeamJoinRequest.class | Bin 0 -> 2223 bytes .../example/telegaapp/model/GameState.class | Bin 0 -> 1344 bytes .../com/example/telegaapp/model/Player.class | Bin 0 -> 3584 bytes .../telegaapp/model/Room$Settings.class | Bin 0 -> 2485 bytes .../com/example/telegaapp/model/Room.class | Bin 0 -> 5919 bytes .../com/example/telegaapp/model/Team.class | Bin 0 -> 3360 bytes .../telegaapp/service/GameService.class | Bin 0 -> 5343 bytes .../telegaapp/service/WordService.class | Bin 0 -> 2002 bytes .../classes/static/assets/index-Plf17G8e.css | 1 + .../classes/static/assets/index-WmiXnQva.js | 16 + target/classes/static/index.html | 14 + target/classes/static/vite.svg | 1 + 72 files changed, 5760 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 GEMINI.md create mode 100644 TODO.md create mode 100644 frontend/.gitignore create mode 100644 frontend/README.md create mode 100644 frontend/eslint.config.js create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/postcss.config.js create mode 100644 frontend/public/vite.svg create mode 100644 frontend/src/App.css create mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/assets/react.svg create mode 100644 frontend/src/components/Lobby.tsx create mode 100644 frontend/src/components/StartScreen.tsx create mode 100644 frontend/src/hooks/GameContext.tsx create mode 100644 frontend/src/index.css create mode 100644 frontend/src/main.tsx create mode 100644 frontend/src/types/index.ts create mode 100644 frontend/tailwind.config.js create mode 100644 frontend/tsconfig.app.json create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.node.json create mode 100644 frontend/vite.config.ts create mode 100644 pom.xml create mode 100644 src/main/java/com/example/telegaapp/TelegaAppApplication.java create mode 100644 src/main/java/com/example/telegaapp/bot/TelegramBot.java create mode 100644 src/main/java/com/example/telegaapp/config/WebSocketConfig.java create mode 100644 src/main/java/com/example/telegaapp/controller/SocketController.java create mode 100644 src/main/java/com/example/telegaapp/controller/WebAppController.java create mode 100644 src/main/java/com/example/telegaapp/dto/CreateRequest.java create mode 100644 src/main/java/com/example/telegaapp/dto/JoinRequest.java create mode 100644 src/main/java/com/example/telegaapp/dto/TeamJoinRequest.java create mode 100644 src/main/java/com/example/telegaapp/model/GameState.java create mode 100644 src/main/java/com/example/telegaapp/model/Player.java create mode 100644 src/main/java/com/example/telegaapp/model/Room.java create mode 100644 src/main/java/com/example/telegaapp/model/Team.java create mode 100644 src/main/java/com/example/telegaapp/service/GameService.java create mode 100644 src/main/java/com/example/telegaapp/service/WordService.java create mode 100644 src/main/resources/application.properties create mode 100644 src/main/resources/static/assets/index-Plf17G8e.css create mode 100644 src/main/resources/static/assets/index-WmiXnQva.js create mode 100644 src/main/resources/static/index.html create mode 100644 src/main/resources/static/vite.svg create mode 100644 target/classes/application.properties create mode 100644 target/classes/com/example/telegaapp/TelegaAppApplication.class create mode 100644 target/classes/com/example/telegaapp/bot/TelegramBot.class create mode 100644 target/classes/com/example/telegaapp/config/WebSocketConfig$1.class create mode 100644 target/classes/com/example/telegaapp/config/WebSocketConfig$StompPrincipal.class create mode 100644 target/classes/com/example/telegaapp/config/WebSocketConfig.class create mode 100644 target/classes/com/example/telegaapp/controller/SocketController.class create mode 100644 target/classes/com/example/telegaapp/controller/WebAppController.class create mode 100644 target/classes/com/example/telegaapp/dto/CreateRequest.class create mode 100644 target/classes/com/example/telegaapp/dto/JoinRequest.class create mode 100644 target/classes/com/example/telegaapp/dto/TeamJoinRequest.class create mode 100644 target/classes/com/example/telegaapp/model/GameState.class create mode 100644 target/classes/com/example/telegaapp/model/Player.class create mode 100644 target/classes/com/example/telegaapp/model/Room$Settings.class create mode 100644 target/classes/com/example/telegaapp/model/Room.class create mode 100644 target/classes/com/example/telegaapp/model/Team.class create mode 100644 target/classes/com/example/telegaapp/service/GameService.class create mode 100644 target/classes/com/example/telegaapp/service/WordService.class create mode 100644 target/classes/static/assets/index-Plf17G8e.css create mode 100644 target/classes/static/assets/index-WmiXnQva.js create mode 100644 target/classes/static/index.html create mode 100644 target/classes/static/vite.svg diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..00eeaf3 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..63e9001 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..f24c79d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/GEMINI.md b/GEMINI.md new file mode 100644 index 0000000..b032da8 --- /dev/null +++ b/GEMINI.md @@ -0,0 +1,74 @@ +# Project: TelegaApp (Alias Game WebApp) + +## Overview +This project is a Spring Boot backend application designed to serve as the host for a Telegram WebApp game, specifically "Alias". The application integrates with the Telegram Bot API to manage the bot interface and will serve the game logic and web resources. + +## Technology Stack +* **Language:** Java 17 +* **Framework:** Spring Boot 3.2.5 +* **Build Tool:** Maven +* **Telegram Library:** `telegrambots-spring-boot-starter` (6.9.7.1) +* **Frontend (Planned):** React, TypeScript, Vite (to be integrated into `src/main/resources/static`) + +## Architecture & Structure +The project follows a standard Maven and Spring Boot directory structure: + +* `src/main/java/com/example/telegaapp`: Source code root. + * `TelegaAppApplication.java`: Entry point. + * `bot/TelegramBot.java`: Handles Telegram updates (Long Polling) and WebApp launching. + * `controller/`: REST and potentially WebSocket controllers. +* `src/main/resources`: Configuration and static assets. + * `application.properties`: Configuration for server port and Telegram credentials. + * `static/`: Location for the built frontend application. + +## Building and Running + +### Prerequisites +* JDK 17+ +* Maven + +### Commands +* **Run Application:** + ```bash + mvn spring-boot:run + ``` +* **Build JAR:** + ```bash + mvn clean package + ``` +* **Run Tests:** + ```bash + mvn test + ``` + +## Configuration +Configuration is managed in `src/main/resources/application.properties`. +Key properties: +* `server.port`: Defaults to `8080`. +* `telegram.bot.username`: The username of the bot. +* `telegram.bot.token`: The authentication token from BotFather. +* `telegram.webapp.url`: The HTTPS URL where the WebApp is hosted (required for the WebApp button). + +## Architecture & Design Principles + +### Extensibility & Scalability +* **Interface-Driven Design:** Core components (like Word providers, Game rules) must be defined by interfaces. This allows swapping implementations (e.g., switching from JSON files to a Database) without modifying the business logic. +* **Loose Coupling:** + * The **WebSocket Controller** should act *only* as a router/adapter. It converts incoming messages to Service calls and Service events to outgoing messages. It should contain *zero* game logic. + * The **Game Service** should not know about WebSocket implementation details. +* **State Management:** While currently In-Memory, the design must support migrating the `GameState` to an external store (Redis) in the future. Avoid relying on object identity (`==`) for game entities; use IDs. + +### Coding Standards & Best Practices + +* **Comments & Documentation:** + * **Mandatory Javadoc:** All public interfaces, classes, and complex methods must have Javadoc explaining *what* they do and *how* to use them. + * **"Why" over "What":** Inline comments are required for complex algorithmic logic (e.g., score calculation, state transitions). Focus on explaining the *intent* and the *reasoning* behind the code, not just translating syntax into English. +* **DTOs (Data Transfer Objects):** Strict separation between Domain models (internal logic) and DTOs (API contracts). Never return a mutable entity directly to the client. +* **Error Handling:** Use global exception handlers (`@ControllerAdvice` / `@MessageExceptionHandler`). Failures should be graceful and informative to the user. +* **Testing:** Logic should be testable in isolation. Unit tests for the Game Engine are critical. + +## Current Status +* Basic Spring Boot application setup. +* Telegram Bot polling implemented (`TelegramBot.java`). +* `/start` command sends a button to open the Web App. +* **Pending:** WebSocket setup, Game logic service, Frontend implementation. \ No newline at end of file diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..59f8a88 --- /dev/null +++ b/TODO.md @@ -0,0 +1,100 @@ +# План реализации игры "Alias" для Telegram WebApp + +## Технологический стек +* **Backend:** Java 17+, Spring Boot, Spring WebSocket (STOMP). +* **Frontend:** React, TypeScript, Vite, Tailwind CSS. +* **Хранение данных:** In-Memory (Java Collections). +* **Интеграция:** Telegram WebApp SDK. + +--- + +## Этап 1: Настройка Backend (Spring Boot) + +- [x] **1.1. Обновление зависимостей (`pom.xml`)** + - Добавить `spring-boot-starter-websocket`. + - Добавить `lombok` (для сокращения бойлерплейта). + +- [x] **1.2. Модели данных (Domain)** + - `Player` (sessionId, nickname, teamId). + - `Team` (name, score, players). + - `Room` (roomId, teams, gameState, currentSettings). + - `GameState` (LOBBY, PLAYING, PAUSED, FINISHED). + +- [x] **1.3. Сервисный слой (`GameService`)** + - Логика создания комнаты (генерация 4-значного кода). + - Логика присоединения игрока. + - Управление состоянием игры (старт раунда, переключение хода). + - Обработка действий (слово угадано/пропущено). + +- [x] **1.4. WebSocket Конфигурация** + - Настройка `WebSocketMessageBroker`. + - Эндпоинты: `/app/create`, `/app/join`, `/app/game-action`. + - Топики для подписки: `/topic/room/{roomId}`. + +- [x] **1.5. Словари слов** + - Создать JSON файлы с наборами слов (Easy, Medium, Hard). + - Реализовать загрузчик слов при старте приложения. + +--- + +## Этап 2: Настройка Frontend (React + Vite) + +- [x] **2.1. Инициализация проекта** + - Создать папку `frontend` внутри корня. + - Установить React + TypeScript через Vite. + - Настроить Proxy для разработки (чтобы запросы шли на Spring Boot порт 8080). + +- [x] **2.2. UI Библиотеки и Стили** + - Установить Tailwind CSS. + - Установить `framer-motion` для красивых анимаций карточек. + - Установить `@twa-dev/sdk` для типизации Telegram WebApp. + - Настроить тему, использующую `Telegram.WebApp.themeParams`. + +- [x] **2.3. Клиент WebSocket** + - Настроить `sockjs-client` и `@stomp/stompjs`. + - Создать хук или контекст для управления соединением (`useWebSocket`). + +--- + +## Этап 3: Реализация интерфейса и логики (Frontend) + +- [x] **3.1. Экран "Приветствие" (Home)** + - Кнопка "Создать игру". + - Поле ввода кода комнаты + кнопка "Войти". + +- [x] **3.2. Экран "Лобби" (Lobby)** + - Список подключенных игроков. + - UI для перетаскивания/выбора команды (Team A / Team B). + - Настройки хоста: Выбор набора слов, длительность раунда, кол-во очков для победы. + - Кнопка "Начать игру" (только для хоста). + +- [ ] **3.3. Экран "Игра" (Game)** + - **Роль "Объясняющий":** + - Карточка со словом по центру. + - Жесты (Swipe) или кнопки: Вверх/Вправо - Угадал, Вниз/Влево - Пропустил. + - Таймер обратного отсчета. + - **Роль "Отгадывающий":** + - Статус "Слушаем {PlayerName}". + - Таймер. + - Анимация при угадывании. + +- [ ] **3.4. Экран "Результаты раунда"** + - Список слов, которые были сыграны в раунде (возможность оспорить/изменить статус, если успеем). + - Текущий счет команд. + - Кнопка "Следующий раунд". + +- [ ] **3.5. Экран "Победа"** + - Поздравление победителей. + - Кнопка "В лобби". + +--- + +## Этап 4: Тестирование и Сборка + +- [x] **4.1. Сборка** + - Настроить Maven плагин (`frontend-maven-plugin`) для сборки React приложения и копирования его в `src/main/resources/static`. + - Проверка сборки единого JAR файла. + +- [ ] **4.2. Тестирование** + - Проверка работы через ngrok (для HTTPS) внутри Telegram. + - Проверка работы WebSocket при сворачивании приложения (reconnection logic). diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..d2e7761 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js new file mode 100644 index 0000000..5e6b472 --- /dev/null +++ b/frontend/eslint.config.js @@ -0,0 +1,23 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]) diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..072a57e --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + frontend + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..75e925f --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,4140 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "@stomp/stompjs": "^7.2.1", + "@twa-dev/sdk": "^8.0.2", + "clsx": "^2.1.1", + "framer-motion": "^12.23.25", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "sockjs-client": "^1.6.1", + "tailwind-merge": "^3.4.0" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@tailwindcss/postcss": "^4.1.17", + "@types/node": "^24.10.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@types/sockjs-client": "^1.5.4", + "@vitejs/plugin-react": "^5.1.1", + "autoprefixer": "^10.4.22", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "postcss": "^8.5.6", + "tailwindcss": "^4.1.17", + "typescript": "~5.9.3", + "typescript-eslint": "^8.46.4", + "vite": "^7.2.4" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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", + "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.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "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.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "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.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "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.1", + "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.39.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", + "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", + "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.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.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/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.47", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.47.tgz", + "integrity": "sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz", + "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz", + "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz", + "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz", + "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz", + "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz", + "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz", + "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz", + "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz", + "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz", + "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz", + "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz", + "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz", + "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz", + "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz", + "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz", + "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz", + "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz", + "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz", + "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz", + "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz", + "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz", + "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@stomp/stompjs": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@stomp/stompjs/-/stompjs-7.2.1.tgz", + "integrity": "sha512-DLd/WeicnHS5SsWWSk3x6/pcivqchNaEvg9UEGVqAcfYEBVmS9D6980ckXjTtfpXLjdLDsd96M7IuX4w7nzq5g==", + "license": "Apache-2.0" + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.17.tgz", + "integrity": "sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.1", + "lightningcss": "1.30.2", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.17" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.17.tgz", + "integrity": "sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.17", + "@tailwindcss/oxide-darwin-arm64": "4.1.17", + "@tailwindcss/oxide-darwin-x64": "4.1.17", + "@tailwindcss/oxide-freebsd-x64": "4.1.17", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.17", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.17", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.17", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.17", + "@tailwindcss/oxide-linux-x64-musl": "4.1.17", + "@tailwindcss/oxide-wasm32-wasi": "4.1.17", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.17", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.17" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.17.tgz", + "integrity": "sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.17.tgz", + "integrity": "sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.17.tgz", + "integrity": "sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.17.tgz", + "integrity": "sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.17.tgz", + "integrity": "sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.17.tgz", + "integrity": "sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.17.tgz", + "integrity": "sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.17.tgz", + "integrity": "sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.17.tgz", + "integrity": "sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.17.tgz", + "integrity": "sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.6.0", + "@emnapi/runtime": "^1.6.0", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.0.7", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.17.tgz", + "integrity": "sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.17.tgz", + "integrity": "sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.17.tgz", + "integrity": "sha512-+nKl9N9mN5uJ+M7dBOOCzINw94MPstNR/GtIhz1fpZysxL/4a+No64jCBD6CPN+bIHWFx3KWuu8XJRrj/572Dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.17", + "@tailwindcss/oxide": "4.1.17", + "postcss": "^8.4.41", + "tailwindcss": "4.1.17" + } + }, + "node_modules/@twa-dev/sdk": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@twa-dev/sdk/-/sdk-8.0.2.tgz", + "integrity": "sha512-Pp5GxnxP2blboVZFiM9aWjs4cb8IpW3x2jP3kLOMvIqy0jzNUTuFHkwHtx+zEvh/UcF2F+wmS8G6ebIA0XPXcg==", + "license": "MIT", + "dependencies": { + "@twa-dev/types": "^8.0.1" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@twa-dev/types": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@twa-dev/types/-/types-8.0.2.tgz", + "integrity": "sha512-ICQ6n4NaUPPzV3/GzflVQS6Nnu5QX2vr9OlOG8ZkFf3rSJXzRKazrLAbZlVhCPPWkIW3MMuELPsE6tByrA49qA==", + "license": "MIT" + }, + "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/node": { + "version": "24.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", + "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/sockjs-client": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/sockjs-client/-/sockjs-client-1.5.4.tgz", + "integrity": "sha512-zk+uFZeWyvJ5ZFkLIwoGA/DfJ+pYzcZ8eH4H/EILCm2OBZyHH6Hkdna1/UWL/CFruh5wj6ES7g75SvUB0VsH5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.48.1.tgz", + "integrity": "sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.48.1", + "@typescript-eslint/type-utils": "8.48.1", + "@typescript-eslint/utils": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.48.1", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.48.1.tgz", + "integrity": "sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.48.1", + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.48.1.tgz", + "integrity": "sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.48.1", + "@typescript-eslint/types": "^8.48.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.1.tgz", + "integrity": "sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.1.tgz", + "integrity": "sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.48.1.tgz", + "integrity": "sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1", + "@typescript-eslint/utils": "8.48.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.48.1.tgz", + "integrity": "sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.1.tgz", + "integrity": "sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.48.1", + "@typescript-eslint/tsconfig-utils": "8.48.1", + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1", + "debug": "^4.3.4", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.48.1.tgz", + "integrity": "sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.48.1", + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.1.tgz", + "integrity": "sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.48.1", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.1.tgz", + "integrity": "sha512-WQfkSw0QbQ5aJ2CHYw23ZGkqnRwqKHD/KYsMeTkZzPT4Jcf0DcBxBtwMJxnu6E7oxw5+JC6ZAiePgh28uJ1HBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.5", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.47", + "@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", + "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/autoprefixer": { + "version": "10.4.22", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.22.tgz", + "integrity": "sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.27.0", + "caniuse-lite": "^1.0.30001754", + "fraction.js": "^5.3.4", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.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.9.2", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.2.tgz", + "integrity": "sha512-PxSsosKQjI38iXkmb3d0Y32efqyA0uW4s41u4IVBsLlWLhCiYNpH/AfNOVWRqCQBlD8TFJTz6OUWNd4DFJCnmw==", + "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.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "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": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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.30001759", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz", + "integrity": "sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==", + "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/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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/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.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "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/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.264", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.264.tgz", + "integrity": "sha512-1tEf0nLgltC3iy9wtlYDlQDc5Rg9lEKVjEmIHJ21rI9OcqkvD45K1oyNIRA4rR1z3LgJ7KeGzEBojVcV6m4qjA==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "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.39.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", + "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", + "dev": true, + "license": "MIT", + "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.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.1", + "@eslint/plugin-kit": "^0.4.1", + "@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": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "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/eventsource": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", + "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", + "license": "MIT", + "engines": { + "node": ">=12.0.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/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "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/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/framer-motion": { + "version": "12.23.25", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.25.tgz", + "integrity": "sha512-gUHGl2e4VG66jOcH0JHhuJQr6ZNwrET9g31ZG0xdXzT0CznP7fHX4P8Bcvuc4MiUB90ysNnWX2ukHRIggkl6hQ==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.23.23", + "motion-utils": "^12.23.6", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/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.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "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/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "license": "MIT" + }, + "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/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "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/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "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/lightningcss": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/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/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "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/motion-dom": { + "version": "12.23.23", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz", + "integrity": "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.23.6" + } + }, + "node_modules/motion-utils": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", + "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.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.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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", + "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/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "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/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" + }, + "node_modules/react": { + "version": "19.2.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz", + "integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz", + "integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.1" + } + }, + "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/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "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.53.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", + "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", + "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.53.3", + "@rollup/rollup-android-arm64": "4.53.3", + "@rollup/rollup-darwin-arm64": "4.53.3", + "@rollup/rollup-darwin-x64": "4.53.3", + "@rollup/rollup-freebsd-arm64": "4.53.3", + "@rollup/rollup-freebsd-x64": "4.53.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", + "@rollup/rollup-linux-arm-musleabihf": "4.53.3", + "@rollup/rollup-linux-arm64-gnu": "4.53.3", + "@rollup/rollup-linux-arm64-musl": "4.53.3", + "@rollup/rollup-linux-loong64-gnu": "4.53.3", + "@rollup/rollup-linux-ppc64-gnu": "4.53.3", + "@rollup/rollup-linux-riscv64-gnu": "4.53.3", + "@rollup/rollup-linux-riscv64-musl": "4.53.3", + "@rollup/rollup-linux-s390x-gnu": "4.53.3", + "@rollup/rollup-linux-x64-gnu": "4.53.3", + "@rollup/rollup-linux-x64-musl": "4.53.3", + "@rollup/rollup-openharmony-arm64": "4.53.3", + "@rollup/rollup-win32-arm64-msvc": "4.53.3", + "@rollup/rollup-win32-ia32-msvc": "4.53.3", + "@rollup/rollup-win32-x64-gnu": "4.53.3", + "@rollup/rollup-win32-x64-msvc": "4.53.3", + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "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/sockjs-client": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.6.1.tgz", + "integrity": "sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "eventsource": "^2.0.2", + "faye-websocket": "^0.11.4", + "inherits": "^2.0.4", + "url-parse": "^1.5.10" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://tidelift.com/funding/github/npm/sockjs-client" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "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/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/tailwind-merge": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", + "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.17.tgz", + "integrity": "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "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/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "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/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.48.1.tgz", + "integrity": "sha512-FbOKN1fqNoXp1hIl5KYpObVrp0mCn+CLgn479nmu2IsRMrx2vyv74MmsBLVlhg8qVwNFGbXSp8fh1zp8pEoC2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.48.1", + "@typescript-eslint/parser": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1", + "@typescript-eslint/utils": "8.48.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz", + "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==", + "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/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/vite": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.6.tgz", + "integrity": "sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==", + "dev": true, + "license": "MIT", + "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/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "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" + } + }, + "node_modules/zod": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", + "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..569d3eb --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,41 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@stomp/stompjs": "^7.2.1", + "@twa-dev/sdk": "^8.0.2", + "clsx": "^2.1.1", + "framer-motion": "^12.23.25", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "sockjs-client": "^1.6.1", + "tailwind-merge": "^3.4.0" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@tailwindcss/postcss": "^4.1.17", + "@types/node": "^24.10.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@types/sockjs-client": "^1.5.4", + "@vitejs/plugin-react": "^5.1.1", + "autoprefixer": "^10.4.22", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "postcss": "^8.5.6", + "tailwindcss": "^4.1.17", + "typescript": "~5.9.3", + "typescript-eslint": "^8.46.4", + "vite": "^7.2.4" + } +} diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 0000000..af9d8dc --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + '@tailwindcss/postcss': {}, + autoprefixer: {}, + }, +} \ No newline at end of file diff --git a/frontend/public/vite.svg b/frontend/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/App.css b/frontend/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/frontend/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx new file mode 100644 index 0000000..679da0e --- /dev/null +++ b/frontend/src/App.tsx @@ -0,0 +1,50 @@ +import React from 'react'; +import { GameProvider, useGame } from './hooks/GameContext'; +import StartScreen from './components/StartScreen'; +import Lobby from './components/Lobby'; +import { GameStates } from './types'; +import WebApp from '@twa-dev/sdk'; + +// Initialize Telegram Web App +WebApp.ready(); +WebApp.expand(); // Expand to full height + +const AppContent: React.FC = () => { + const { room, error } = useGame(); + + if (error) { + return ( +
+
+

Ошибка

+

{error}

+ +
+
+ ); + } + + if (!room) { + return ; + } + + if (room.state === GameStates.LOBBY) { + return ; + } + + return ( +
+ Game Started! (Coming soon) +
+ ); +}; + +const App: React.FC = () => { + return ( + + + + ); +}; + +export default App; \ No newline at end of file diff --git a/frontend/src/assets/react.svg b/frontend/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/frontend/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/components/Lobby.tsx b/frontend/src/components/Lobby.tsx new file mode 100644 index 0000000..a246d1d --- /dev/null +++ b/frontend/src/components/Lobby.tsx @@ -0,0 +1,103 @@ +import React from 'react'; +import { useGame } from '../hooks/GameContext'; +import type { Team } from '../types'; + +const Lobby: React.FC = () => { + const { room, currentPlayer, joinTeam } = useGame(); + + if (!room) return null; + + const renderTeam = (team: Team) => { + const teamPlayers = room.teams.find(t => t.id === team.id)?.playerIds.map(pid => room.players[pid]) || []; + const isMyTeam = currentPlayer?.teamId === team.id; + + return ( +
+
+

{team.name}

+ {/* Join Button if not in this team */} + {!isMyTeam && ( + + )} +
+
+ {teamPlayers.map(p => ( +
+
+ {p.name.substring(0, 2).toUpperCase()} +
+ {p.name} + {p.host && 👑} +
+ ))} + {teamPlayers.length === 0 && ( +
Пусто
+ )} +
+
+ ); + }; + + const unassignedPlayers = Object.values(room.players).filter(p => !p.teamId); + + return ( +
+
+
+

Комната #{room.roomId}

+

Ожидание игроков...

+
+
+ {Object.keys(room.players).length} Online +
+
+ + {/* Unassigned Players */} + {unassignedPlayers.length > 0 && ( +
+

Без команды

+
+ {unassignedPlayers.map(p => ( +
+ {p.name} +
+ ))} +
+
+ )} + + {/* Teams */} +
+ {room.teams.map(renderTeam)} +
+ + {/* Settings & Start (Only Host) */} + {currentPlayer?.host ? ( +
+
+ Сложность + +
+ +
+ ) : ( +
+ Ждем, пока хост начнет игру... +
+ )} +
+ ); +}; + +export default Lobby; \ No newline at end of file diff --git a/frontend/src/components/StartScreen.tsx b/frontend/src/components/StartScreen.tsx new file mode 100644 index 0000000..5640caa --- /dev/null +++ b/frontend/src/components/StartScreen.tsx @@ -0,0 +1,95 @@ +import React, { useState, useEffect } from 'react'; +import { useGame } from '../hooks/GameContext'; +import WebApp from '@twa-dev/sdk'; + +const StartScreen: React.FC = () => { + const { createRoom, joinRoom } = useGame(); + const [name, setName] = useState(''); + const [roomId, setRoomId] = useState(''); + const [activeTab, setActiveTab] = useState<'create' | 'join'>('create'); + + useEffect(() => { + // Auto-fill name from Telegram if available + if (WebApp.initDataUnsafe?.user?.first_name) { + setName(WebApp.initDataUnsafe.user.first_name); + } + }, []); + + const handleCreate = () => { + console.log("Create button clicked. Name:", name); + if (!name) { + console.warn("Name is empty, aborting creation."); + return; + } + createRoom(name, WebApp.initDataUnsafe?.user?.id?.toString()); + }; + + const handleJoin = () => { + if (!name || !roomId) return; + joinRoom(roomId, name, WebApp.initDataUnsafe?.user?.id?.toString()); + }; + + return ( +
+

+ Alias +

+ +
+
+ + +
+ +
+
+ + setName(e.target.value)} + placeholder="Введите имя..." + className="w-full px-4 py-3 bg-gray-900 border border-gray-700 rounded-xl focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition-all text-white placeholder-gray-600" + /> +
+ + {activeTab === 'join' && ( +
+ + setRoomId(e.target.value)} + placeholder="1234" + className="w-full px-4 py-3 bg-gray-900 border border-gray-700 rounded-xl focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition-all text-white placeholder-gray-600 font-mono tracking-widest text-center text-lg" + /> +
+ )} + + +
+
+
+ ); +}; + +export default StartScreen; diff --git a/frontend/src/hooks/GameContext.tsx b/frontend/src/hooks/GameContext.tsx new file mode 100644 index 0000000..97e20f1 --- /dev/null +++ b/frontend/src/hooks/GameContext.tsx @@ -0,0 +1,132 @@ +import React, { createContext, useContext, useEffect, useState, useCallback } from 'react'; +import { Client } from '@stomp/stompjs'; +import type { IMessage } from '@stomp/stompjs'; +import type { Room, Player } from '../types'; + +interface GameContextType { + connected: boolean; + room: Room | null; + currentPlayer: Player | null; + error: string | null; + createRoom: (playerName: string, userId?: string) => void; + joinRoom: (roomId: string, playerName: string, userId?: string) => void; + joinTeam: (teamId: string) => void; +} + +const GameContext = createContext(null); + +export const useGame = () => { + const context = useContext(GameContext); + if (!context) { + throw new Error('useGame must be used within a GameProvider'); + } + return context; +}; + +export const GameProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { + const [client, setClient] = useState(null); + const [connected, setConnected] = useState(false); + const [room, setRoom] = useState(null); + const [currentPlayer, setCurrentPlayer] = useState(null); + const [error, setError] = useState(null); + + useEffect(() => { + // Determine WebSocket URL (ws:// or wss://) + const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; + const brokerURL = `${protocol}//${window.location.host}/ws`; + + const stompClient = new Client({ + brokerURL: brokerURL, + reconnectDelay: 5000, + debug: (str) => { + console.log(str); + }, + onConnect: (frame) => { + console.log('Connected: ' + frame); + setConnected(true); + + // Subscribe to user-specific errors + stompClient.subscribe('/user/queue/errors', (message: IMessage) => { + setError(message.body); + }); + + // Subscribe to player info (to know who we are) + stompClient.subscribe('/user/queue/player-info', (message: IMessage) => { + const player = JSON.parse(message.body) as Player; + setCurrentPlayer(player); + console.log("Current player set:", player); + }); + + // Subscribe to room creation response + stompClient.subscribe('/user/queue/created', (message: IMessage) => { + const newRoom = JSON.parse(message.body) as Room; + setRoom(newRoom); + }); + }, + onStompError: (frame) => { + console.error('Broker reported error: ' + frame.headers['message']); + console.error('Additional details: ' + frame.body); + setError(frame.headers['message']); + }, + onWebSocketClose: () => { + setConnected(false); + console.log('WebSocket connection closed'); + } + }); + + stompClient.activate(); + setClient(stompClient); + + return () => { + stompClient.deactivate(); + }; + }, []); + + // Subscribe to room updates when room changes + useEffect(() => { + if (connected && client && room) { + const sub = client.subscribe(`/topic/room/${room.roomId}`, (message: IMessage) => { + const updatedRoom = JSON.parse(message.body) as Room; + setRoom(updatedRoom); + }); + return () => sub.unsubscribe(); + } + }, [connected, client, room?.roomId]); + + const createRoom = useCallback((playerName: string, userId?: string) => { + console.log("Attempting to create room...", { playerName, userId, connected, hasClient: !!client }); + if (client && connected) { + client.publish({ + destination: '/app/create', + body: JSON.stringify({ playerName, userId }), + }); + console.log("Create room request sent."); + } else { + console.error("Cannot create room: Not connected to server."); + } + }, [client, connected]); + + const joinRoom = useCallback((roomId: string, playerName: string, userId?: string) => { + if (client && connected) { + client.publish({ + destination: '/app/join', + body: JSON.stringify({ roomId, playerName, userId }), + }); + } + }, [client, connected]); + + const joinTeam = useCallback((teamId: string) => { + if (client && connected && room) { + client.publish({ + destination: '/app/team/join', + body: JSON.stringify({ roomId: room.roomId, teamId }), + }); + } + }, [client, connected, room]); + + return ( + + {children} + + ); +}; \ No newline at end of file diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 0000000..593caf0 --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,33 @@ +@import "tailwindcss"; + +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + /* Default to telegram theme params, fallback to dark mode */ + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +#root { + max-width: 1280px; + margin: 0 auto; + padding: 0; + width: 100%; + text-align: center; +} diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx new file mode 100644 index 0000000..bef5202 --- /dev/null +++ b/frontend/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts new file mode 100644 index 0000000..e49c21c --- /dev/null +++ b/frontend/src/types/index.ts @@ -0,0 +1,41 @@ +export type GameState = 'LOBBY' | 'PLAYING' | 'PAUSED' | 'ROUND_FINISHED' | 'GAME_OVER'; + +export const GameStates = { + LOBBY: 'LOBBY' as GameState, + PLAYING: 'PLAYING' as GameState, + PAUSED: 'PAUSED' as GameState, + ROUND_FINISHED: 'ROUND_FINISHED' as GameState, + GAME_OVER: 'GAME_OVER' as GameState +}; + +export interface Player { + sessionId: string; + userId?: string; + name: string; + teamId?: string; + host: boolean; +} + +export interface Team { + id: string; + name: string; + score: number; + playerIds: string[]; +} + +export interface Settings { + roundTimeSeconds: number; + wordsToWin: number; + difficulty: 'EASY' | 'MEDIUM' | 'HARD' | 'KIDS'; +} + +export interface Room { + roomId: string; + state: GameState; + teams: Team[]; + players: Record; // Map sessionId -> Player + settings: Settings; + currentTeamIndex: number; + currentDescriberIndex: number; + roundEndTime?: number; +} \ No newline at end of file diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 0000000..dca8ba0 --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,11 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 0000000..a9b5a59 --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 0000000..8a67f62 --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..4ae98e9 --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], + server: { + proxy: { + '/ws': { + target: 'http://localhost:8080', + ws: true, + }, + '/api': { + target: 'http://localhost:8080', + } + } + } +}) \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..be62620 --- /dev/null +++ b/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.2.5 + + + com.example + telegaapp + 0.0.1-SNAPSHOT + telegaapp + Telegram Web App with Spring Boot + + 17 + 6.9.7.1 + 23 + 23 + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-websocket + + + org.projectlombok + lombok + true + + + org.telegram telegrambots-spring-boot-starter + ${telegrambots.version} + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/src/main/java/com/example/telegaapp/TelegaAppApplication.java b/src/main/java/com/example/telegaapp/TelegaAppApplication.java new file mode 100644 index 0000000..6a45a2b --- /dev/null +++ b/src/main/java/com/example/telegaapp/TelegaAppApplication.java @@ -0,0 +1,13 @@ +package com.example.telegaapp; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class TelegaAppApplication { + + public static void main(String[] args) { + SpringApplication.run(TelegaAppApplication.class, args); + } + +} diff --git a/src/main/java/com/example/telegaapp/bot/TelegramBot.java b/src/main/java/com/example/telegaapp/bot/TelegramBot.java new file mode 100644 index 0000000..3097e56 --- /dev/null +++ b/src/main/java/com/example/telegaapp/bot/TelegramBot.java @@ -0,0 +1,77 @@ +package com.example.telegaapp.bot; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.telegram.telegrambots.bots.TelegramLongPollingBot; +import org.telegram.telegrambots.meta.api.methods.send.SendMessage; +import org.telegram.telegrambots.meta.api.objects.Update; +import org.telegram.telegrambots.meta.api.objects.replykeyboard.ReplyKeyboardMarkup; +import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.KeyboardButton; +import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.KeyboardRow; +import org.telegram.telegrambots.meta.api.objects.webapp.WebAppInfo; +import org.telegram.telegrambots.meta.exceptions.TelegramApiException; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class TelegramBot extends TelegramLongPollingBot { + + @Value("${telegram.bot.username}") + private String botUsername; + + @Value("${telegram.bot.token}") + private String botToken; + + @Value("${telegram.webapp.url}") + private String webAppUrl; + + @Override + public void onUpdateReceived(Update update) { + if (update.hasMessage() && update.getMessage().hasText()) { + String messageText = update.getMessage().getText(); + long chatId = update.getMessage().getChatId(); + + if (messageText.equals("/start")) { + sendWebAppButton(chatId); + } + } + } + + private void sendWebAppButton(long chatId) { + SendMessage sendMessage = new SendMessage(); + sendMessage.setChatId(chatId); + sendMessage.setText("Нажми на кнопку, чтобы открыть приложение!"); + + ReplyKeyboardMarkup keyboardMarkup = new ReplyKeyboardMarkup(); + keyboardMarkup.setResizeKeyboard(true); + List keyboard = new ArrayList<>(); + KeyboardRow row = new KeyboardRow(); + + // Создаем кнопку с WebAppInfo + KeyboardButton button = new KeyboardButton("Открыть Web App"); + WebAppInfo webAppInfo = new WebAppInfo(webAppUrl); + button.setWebApp(webAppInfo); + + row.add(button); + keyboard.add(row); + keyboardMarkup.setKeyboard(keyboard); + sendMessage.setReplyMarkup(keyboardMarkup); + + try { + execute(sendMessage); + } catch (TelegramApiException e) { + e.printStackTrace(); + } + } + + @Override + public String getBotUsername() { + return botUsername; + } + + @Override + public String getBotToken() { + return botToken; + } +} diff --git a/src/main/java/com/example/telegaapp/config/WebSocketConfig.java b/src/main/java/com/example/telegaapp/config/WebSocketConfig.java new file mode 100644 index 0000000..c08c8e4 --- /dev/null +++ b/src/main/java/com/example/telegaapp/config/WebSocketConfig.java @@ -0,0 +1,55 @@ +package com.example.telegaapp.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; +import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; +import org.springframework.web.socket.server.support.DefaultHandshakeHandler; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.web.socket.WebSocketHandler; + +import java.security.Principal; +import java.util.Map; +import java.util.UUID; + +@Configuration +@EnableWebSocketMessageBroker +public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { + + @Override + public void configureMessageBroker(MessageBrokerRegistry config) { + // Prefix for messages FROM server TO client + config.enableSimpleBroker("/topic", "/queue"); + // Prefix for messages FROM client TO server + config.setApplicationDestinationPrefixes("/app"); + } + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + // Endpoint for connection + registry.addEndpoint("/ws") + .setHandshakeHandler(new DefaultHandshakeHandler() { + @Override + protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, Map attributes) { + String uuid = UUID.randomUUID().toString(); + System.out.println("New WS connection. Assigning Principal: " + uuid); + return new StompPrincipal(uuid); + } + }) + .setAllowedOriginPatterns("*"); + } + + private static class StompPrincipal implements Principal { + private final String name; + + public StompPrincipal(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } + } +} diff --git a/src/main/java/com/example/telegaapp/controller/SocketController.java b/src/main/java/com/example/telegaapp/controller/SocketController.java new file mode 100644 index 0000000..09e453a --- /dev/null +++ b/src/main/java/com/example/telegaapp/controller/SocketController.java @@ -0,0 +1,67 @@ +package com.example.telegaapp.controller; + +import com.example.telegaapp.dto.CreateRequest; +import com.example.telegaapp.dto.JoinRequest; +import com.example.telegaapp.dto.TeamJoinRequest; +import com.example.telegaapp.model.Player; +import com.example.telegaapp.model.Room; +import com.example.telegaapp.service.GameService; +import lombok.RequiredArgsConstructor; +import org.springframework.messaging.handler.annotation.MessageMapping; +import org.springframework.messaging.handler.annotation.Payload; +import org.springframework.messaging.simp.SimpMessageHeaderAccessor; +import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.stereotype.Controller; + +@Controller +@RequiredArgsConstructor +public class SocketController { + + private final GameService gameService; + private final SimpMessagingTemplate messagingTemplate; + + @MessageMapping("/create") + public void createRoom(@Payload CreateRequest request, SimpMessageHeaderAccessor headerAccessor) { + String sessionId = headerAccessor.getUser().getName(); + System.out.println("Received create request from session: " + sessionId + ", name: " + request.getPlayerName()); + Player host = new Player(sessionId, request.getUserId(), request.getPlayerName(), null, true); + + Room room = gameService.createRoom(host); + + // Send the player info back to the user so they know their session ID + messagingTemplate.convertAndSendToUser(sessionId, "/queue/player-info", host); + + // Notify the creator specifically about the room + messagingTemplate.convertAndSendToUser(sessionId, "/queue/created", room); + } + + @MessageMapping("/join") + public void joinRoom(@Payload JoinRequest request, SimpMessageHeaderAccessor headerAccessor) { + String sessionId = headerAccessor.getUser().getName(); + System.out.println("Received join request from session: " + sessionId + ", room: " + request.getRoomId()); + Player player = new Player(sessionId, request.getUserId(), request.getPlayerName(), null, false); + + Room room = gameService.joinRoom(request.getRoomId(), player); + + if (room != null) { + // Send the player info back to the user + messagingTemplate.convertAndSendToUser(sessionId, "/queue/player-info", player); + + // Notify everyone in the room + messagingTemplate.convertAndSend("/topic/room/" + room.getRoomId(), room); + } else { + // Send error to user + messagingTemplate.convertAndSendToUser(sessionId, "/queue/errors", "Room not found"); + } + } + + @MessageMapping("/team/join") + public void joinTeam(@Payload TeamJoinRequest request, SimpMessageHeaderAccessor headerAccessor) { + String sessionId = headerAccessor.getUser().getName(); + gameService.joinTeam(request.getRoomId(), sessionId, request.getTeamId()); + + gameService.getRoom(request.getRoomId()).ifPresent(room -> { + messagingTemplate.convertAndSend("/topic/room/" + room.getRoomId(), room); + }); + } +} diff --git a/src/main/java/com/example/telegaapp/controller/WebAppController.java b/src/main/java/com/example/telegaapp/controller/WebAppController.java new file mode 100644 index 0000000..e73519b --- /dev/null +++ b/src/main/java/com/example/telegaapp/controller/WebAppController.java @@ -0,0 +1,27 @@ +package com.example.telegaapp.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.Map; + +@Controller +public class WebAppController { + + // Forward all non-api, non-static resource requests to index.html + // This regex excludes paths containing a dot (files) or starting with /api or /ws + @GetMapping(value = "/{path:[^\\.]*}") + public String redirect() { + return "forward:/index.html"; + } + + @PostMapping("/api/submit") + @ResponseBody + public String receiveData(@RequestBody Map data) { + System.out.println("Received data from Web App: " + data); + return "Data received successfully!"; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/telegaapp/dto/CreateRequest.java b/src/main/java/com/example/telegaapp/dto/CreateRequest.java new file mode 100644 index 0000000..e44b562 --- /dev/null +++ b/src/main/java/com/example/telegaapp/dto/CreateRequest.java @@ -0,0 +1,9 @@ +package com.example.telegaapp.dto; + +import lombok.Data; + +@Data +public class CreateRequest { + private String playerName; + private String userId; // Optional telegram user id +} diff --git a/src/main/java/com/example/telegaapp/dto/JoinRequest.java b/src/main/java/com/example/telegaapp/dto/JoinRequest.java new file mode 100644 index 0000000..8039c32 --- /dev/null +++ b/src/main/java/com/example/telegaapp/dto/JoinRequest.java @@ -0,0 +1,10 @@ +package com.example.telegaapp.dto; + +import lombok.Data; + +@Data +public class JoinRequest { + private String roomId; + private String playerName; + private String userId; +} diff --git a/src/main/java/com/example/telegaapp/dto/TeamJoinRequest.java b/src/main/java/com/example/telegaapp/dto/TeamJoinRequest.java new file mode 100644 index 0000000..fb59c3e --- /dev/null +++ b/src/main/java/com/example/telegaapp/dto/TeamJoinRequest.java @@ -0,0 +1,9 @@ +package com.example.telegaapp.dto; + +import lombok.Data; + +@Data +public class TeamJoinRequest { + private String roomId; + private String teamId; +} diff --git a/src/main/java/com/example/telegaapp/model/GameState.java b/src/main/java/com/example/telegaapp/model/GameState.java new file mode 100644 index 0000000..5ac4f95 --- /dev/null +++ b/src/main/java/com/example/telegaapp/model/GameState.java @@ -0,0 +1,9 @@ +package com.example.telegaapp.model; + +public enum GameState { + LOBBY, // Players are joining, choosing teams + PLAYING, // Round is in progress + PAUSED, // Game paused (optional) + ROUND_FINISHED, // Round ended, showing summary + GAME_OVER // Game finished, showing winner +} diff --git a/src/main/java/com/example/telegaapp/model/Player.java b/src/main/java/com/example/telegaapp/model/Player.java new file mode 100644 index 0000000..7332dc8 --- /dev/null +++ b/src/main/java/com/example/telegaapp/model/Player.java @@ -0,0 +1,16 @@ +package com.example.telegaapp.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Player { + private String sessionId; // WebSocket session ID + private String userId; // Telegram User ID (if available) + private String name; // Telegram First Name + private String teamId; // ID of the team the player belongs to (nullable in lobby) + private boolean isHost; // Is this player the room creator? +} diff --git a/src/main/java/com/example/telegaapp/model/Room.java b/src/main/java/com/example/telegaapp/model/Room.java new file mode 100644 index 0000000..3f1110f --- /dev/null +++ b/src/main/java/com/example/telegaapp/model/Room.java @@ -0,0 +1,43 @@ +package com.example.telegaapp.model; + +import lombok.Data; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@Data +public class Room { + private String roomId; + private GameState state; + private List teams; + private Map players; // sessionId -> Player + private Settings settings; + + // Game state specific + private int currentTeamIndex; + private int currentDescriberIndex; // Index in the player list of the current team + private long roundEndTime; // Timestamp when round ends + + public Room(String roomId) { + this.roomId = roomId; + this.state = GameState.LOBBY; + this.teams = new ArrayList<>(); + this.players = new ConcurrentHashMap<>(); + this.settings = new Settings(); + + // Initialize default teams + this.teams.add(new Team("Team A")); + this.teams.add(new Team("Team B")); + + this.currentTeamIndex = 0; + this.currentDescriberIndex = 0; + } + + @Data + public static class Settings { + private int roundTimeSeconds = 60; + private int wordsToWin = 30; + private String difficulty = "EASY"; + } +} diff --git a/src/main/java/com/example/telegaapp/model/Team.java b/src/main/java/com/example/telegaapp/model/Team.java new file mode 100644 index 0000000..ae7ac6d --- /dev/null +++ b/src/main/java/com/example/telegaapp/model/Team.java @@ -0,0 +1,21 @@ +package com.example.telegaapp.model; + +import lombok.Data; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +@Data +public class Team { + private String id; + private String name; + private int score; + private List playerIds; // List of sessionIds/userIds + + public Team(String name) { + this.id = UUID.randomUUID().toString(); + this.name = name; + this.score = 0; + this.playerIds = new ArrayList<>(); + } +} diff --git a/src/main/java/com/example/telegaapp/service/GameService.java b/src/main/java/com/example/telegaapp/service/GameService.java new file mode 100644 index 0000000..df13388 --- /dev/null +++ b/src/main/java/com/example/telegaapp/service/GameService.java @@ -0,0 +1,86 @@ +package com.example.telegaapp.service; + +import com.example.telegaapp.model.Player; +import com.example.telegaapp.model.Room; +import com.example.telegaapp.model.Team; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.Optional; +import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; + +@Service +public class GameService { + + private final Map rooms = new ConcurrentHashMap<>(); + private final Random random = new Random(); + + public Room createRoom(Player host) { + String roomId = generateRoomId(); + Room room = new Room(roomId); + host.setHost(true); + room.getPlayers().put(host.getSessionId(), host); + rooms.put(roomId, room); + return room; + } + + public Room joinRoom(String roomId, Player player) { + Room room = rooms.get(roomId); + if (room != null) { + room.getPlayers().put(player.getSessionId(), player); + } + return room; + } + + public Optional getRoom(String roomId) { + return Optional.ofNullable(rooms.get(roomId)); + } + + public void removePlayer(String sessionId) { + // Iterate over rooms to find and remove player + // Optimization: Maintain a map of sessionId -> roomId + for (Room room : rooms.values()) { + if (room.getPlayers().containsKey(sessionId)) { + room.getPlayers().remove(sessionId); + // Remove from teams as well + for (Team team : room.getTeams()) { + team.getPlayerIds().remove(sessionId); + } + if (room.getPlayers().isEmpty()) { + rooms.remove(room.getRoomId()); + } + break; + } + } + } + + private String generateRoomId() { + // Generate a 4-digit code + int code = 1000 + random.nextInt(9000); + return String.valueOf(code); + } + + public void joinTeam(String roomId, String sessionId, String teamId) { + Room room = rooms.get(roomId); + if (room != null) { + Player player = room.getPlayers().get(sessionId); + if (player != null) { + // Remove from old team if any + if (player.getTeamId() != null) { + room.getTeams().stream() + .filter(t -> t.getId().equals(player.getTeamId())) + .findFirst() + .ifPresent(t -> t.getPlayerIds().remove(sessionId)); + } + + // Add to new team + player.setTeamId(teamId); + room.getTeams().stream() + .filter(t -> t.getId().equals(teamId)) + .findFirst() + .ifPresent(t -> t.getPlayerIds().add(sessionId)); + } + } + } +} diff --git a/src/main/java/com/example/telegaapp/service/WordService.java b/src/main/java/com/example/telegaapp/service/WordService.java new file mode 100644 index 0000000..fd275d0 --- /dev/null +++ b/src/main/java/com/example/telegaapp/service/WordService.java @@ -0,0 +1,25 @@ +package com.example.telegaapp.service; + +import jakarta.annotation.PostConstruct; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Service +public class WordService { + + private final Map> wordDictionaries = new HashMap<>(); + + @PostConstruct + public void init() { + // In a real app, load from JSON files + wordDictionaries.put("EASY", Arrays.asList("Яблоко", "Дом", "Машина", "Собака", "Кошка", "Солнце", "Книга", "Телефон")); + wordDictionaries.put("HARD", Arrays.asList("Синхрофазотрон", "Экзистенциализм", "Перпендикуляр", "Гипотенуза")); + wordDictionaries.put("KIDS", Arrays.asList("Мяч", "Кукла", "Мороженое", "Велосипед")); + } + + public String getRandomWord(String difficulty) { + List words = wordDictionaries.getOrDefault(difficulty, wordDictionaries.get("EASY")); + return words.get(new Random().nextInt(words.size())); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..ab3f9ff --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,5 @@ +server.port=8080 + +telegram.bot.username=AliasSandersBot +telegram.bot.token=8352627995:AAEhidu-Qhp3Wx2ir7cVKe2GKuJmVVfcyuQ +telegram.webapp.url=https:/// diff --git a/src/main/resources/static/assets/index-Plf17G8e.css b/src/main/resources/static/assets/index-Plf17G8e.css new file mode 100644 index 0000000..4ac8f7a --- /dev/null +++ b/src/main/resources/static/assets/index-Plf17G8e.css @@ -0,0 +1 @@ +@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-500:oklch(63.7% .237 25.331);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-medium:500;--font-weight-bold:700;--tracking-widest:.1em;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.-mx-4{margin-inline:calc(var(--spacing)*-4)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-auto{margin-bottom:auto}.ml-1{margin-left:calc(var(--spacing)*1)}.block{display:block}.flex{display:flex}.h-8{height:calc(var(--spacing)*8)}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-8{width:calc(var(--spacing)*8)}.w-full{width:100%}.max-w-sm{max-width:var(--container-sm)}.min-w-\[45\%\]{min-width:45%}.flex-1{flex:1}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-gray-700{border-color:var(--color-gray-700)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.bg-gray-900{background-color:var(--color-gray-900)}.bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.bg-gray-900\/60{background-color:#10182899}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/60{background-color:color-mix(in oklab,var(--color-gray-900)60%,transparent)}}.bg-green-600{background-color:var(--color-green-600)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-blue-400{--tw-gradient-from:var(--color-blue-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-500{--tw-gradient-from:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-600{--tw-gradient-from:var(--color-blue-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-700{--tw-gradient-to:var(--color-blue-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-500{--tw-gradient-to:var(--color-purple-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-600{--tw-gradient-to:var(--color-purple-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-blue-500{color:var(--color-blue-500)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-red-500{color:var(--color-red-500)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-yellow-500{color:var(--color-yellow-500)}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.placeholder-gray-600::-moz-placeholder{color:var(--color-gray-600)}.placeholder-gray-600::placeholder{color:var(--color-gray-600)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}@media(hover:hover){.hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.hover\:bg-green-500:hover{background-color:var(--color-green-500)}.hover\:from-blue-500:hover{--tw-gradient-from:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hover\:to-blue-600:hover{--tw-gradient-to:var(--color-blue-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hover\:text-white:hover{color:var(--color-white)}}.focus\:border-transparent:focus{border-color:#0000}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}}:root{color-scheme:light dark;color:#ffffffde;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#242424;font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;font-weight:400;line-height:1.5}body{place-items:center;min-width:320px;min-height:100vh;margin:0;display:flex}#root{text-align:center;width:100%;max-width:1280px;margin:0 auto;padding:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1} diff --git a/src/main/resources/static/assets/index-WmiXnQva.js b/src/main/resources/static/assets/index-WmiXnQva.js new file mode 100644 index 0000000..4f80a9c --- /dev/null +++ b/src/main/resources/static/assets/index-WmiXnQva.js @@ -0,0 +1,16 @@ +(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const v of document.querySelectorAll('link[rel="modulepreload"]'))s(v);new MutationObserver(v=>{for(const N of v)if(N.type==="childList")for(const I of N.addedNodes)I.tagName==="LINK"&&I.rel==="modulepreload"&&s(I)}).observe(document,{childList:!0,subtree:!0});function b(v){const N={};return v.integrity&&(N.integrity=v.integrity),v.referrerPolicy&&(N.referrerPolicy=v.referrerPolicy),v.crossOrigin==="use-credentials"?N.credentials="include":v.crossOrigin==="anonymous"?N.credentials="omit":N.credentials="same-origin",N}function s(v){if(v.ep)return;v.ep=!0;const N=b(v);fetch(v.href,N)}})();function dm(O){return O&&O.__esModule&&Object.prototype.hasOwnProperty.call(O,"default")?O.default:O}var fr={exports:{}},Mu={};var Kd;function hm(){if(Kd)return Mu;Kd=1;var O=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function b(s,v,N){var I=null;if(N!==void 0&&(I=""+N),v.key!==void 0&&(I=""+v.key),"key"in v){N={};for(var W in v)W!=="key"&&(N[W]=v[W])}else N=v;return v=N.ref,{$$typeof:O,type:s,key:I,ref:v!==void 0?v:null,props:N}}return Mu.Fragment=r,Mu.jsx=b,Mu.jsxs=b,Mu}var Jd;function pm(){return Jd||(Jd=1,fr.exports=hm()),fr.exports}var P=pm(),sr={exports:{}},oe={};var Fd;function mm(){if(Fd)return oe;Fd=1;var O=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),b=Symbol.for("react.fragment"),s=Symbol.for("react.strict_mode"),v=Symbol.for("react.profiler"),N=Symbol.for("react.consumer"),I=Symbol.for("react.context"),W=Symbol.for("react.forward_ref"),H=Symbol.for("react.suspense"),S=Symbol.for("react.memo"),ae=Symbol.for("react.lazy"),ee=Symbol.for("react.activity"),_e=Symbol.iterator;function Ke(m){return m===null||typeof m!="object"?null:(m=_e&&m[_e]||m["@@iterator"],typeof m=="function"?m:null)}var Ce={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Te=Object.assign,Be={};function Le(m,B,w){this.props=m,this.context=B,this.refs=Be,this.updater=w||Ce}Le.prototype.isReactComponent={},Le.prototype.setState=function(m,B){if(typeof m!="object"&&typeof m!="function"&&m!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,m,B,"setState")},Le.prototype.forceUpdate=function(m){this.updater.enqueueForceUpdate(this,m,"forceUpdate")};function D(){}D.prototype=Le.prototype;function V(m,B,w){this.props=m,this.context=B,this.refs=Be,this.updater=w||Ce}var ue=V.prototype=new D;ue.constructor=V,Te(ue,Le.prototype),ue.isPureReactComponent=!0;var Ue=Array.isArray;function De(){}var re={H:null,A:null,T:null,S:null},tt=Object.prototype.hasOwnProperty;function wt(m,B,w){var X=w.ref;return{$$typeof:O,type:m,key:B,ref:X!==void 0?X:null,props:w}}function Sl(m,B){return wt(m.type,B,m.props)}function Xt(m){return typeof m=="object"&&m!==null&&m.$$typeof===O}function st(m){var B={"=":"=0",":":"=2"};return"$"+m.replace(/[=:]/g,function(w){return B[w]})}var Al=/\/+/g;function Zt(m,B){return typeof m=="object"&&m!==null&&m.key!=null?st(""+m.key):B.toString(36)}function Dt(m){switch(m.status){case"fulfilled":return m.value;case"rejected":throw m.reason;default:switch(typeof m.status=="string"?m.then(De,De):(m.status="pending",m.then(function(B){m.status==="pending"&&(m.status="fulfilled",m.value=B)},function(B){m.status==="pending"&&(m.status="rejected",m.reason=B)})),m.status){case"fulfilled":return m.value;case"rejected":throw m.reason}}throw m}function M(m,B,w,X,ie){var de=typeof m;(de==="undefined"||de==="boolean")&&(m=null);var Oe=!1;if(m===null)Oe=!0;else switch(de){case"bigint":case"string":case"number":Oe=!0;break;case"object":switch(m.$$typeof){case O:case r:Oe=!0;break;case ae:return Oe=m._init,M(Oe(m._payload),B,w,X,ie)}}if(Oe)return ie=ie(m),Oe=X===""?"."+Zt(m,0):X,Ue(ie)?(w="",Oe!=null&&(w=Oe.replace(Al,"$&/")+"/"),M(ie,B,w,"",function(ll){return ll})):ie!=null&&(Xt(ie)&&(ie=Sl(ie,w+(ie.key==null||m&&m.key===ie.key?"":(""+ie.key).replace(Al,"$&/")+"/")+Oe)),B.push(ie)),1;Oe=0;var Ve=X===""?".":X+":";if(Ue(m))for(var Xe=0;Xe>>1,G=M[ve];if(0>>1;vev(w,ne))Xv(ie,w)?(M[ve]=ie,M[X]=ne,ve=X):(M[ve]=w,M[B]=ne,ve=B);else if(Xv(ie,ne))M[ve]=ie,M[X]=ne,ve=X;else break e}}return R}function v(M,R){var ne=M.sortIndex-R.sortIndex;return ne!==0?ne:M.id-R.id}if(O.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var N=performance;O.unstable_now=function(){return N.now()}}else{var I=Date,W=I.now();O.unstable_now=function(){return I.now()-W}}var H=[],S=[],ae=1,ee=null,_e=3,Ke=!1,Ce=!1,Te=!1,Be=!1,Le=typeof setTimeout=="function"?setTimeout:null,D=typeof clearTimeout=="function"?clearTimeout:null,V=typeof setImmediate<"u"?setImmediate:null;function ue(M){for(var R=b(S);R!==null;){if(R.callback===null)s(S);else if(R.startTime<=M)s(S),R.sortIndex=R.expirationTime,r(H,R);else break;R=b(S)}}function Ue(M){if(Te=!1,ue(M),!Ce)if(b(H)!==null)Ce=!0,De||(De=!0,st());else{var R=b(S);R!==null&&Dt(Ue,R.startTime-M)}}var De=!1,re=-1,tt=5,wt=-1;function Sl(){return Be?!0:!(O.unstable_now()-wtM&&Sl());){var ve=ee.callback;if(typeof ve=="function"){ee.callback=null,_e=ee.priorityLevel;var G=ve(ee.expirationTime<=M);if(M=O.unstable_now(),typeof G=="function"){ee.callback=G,ue(M),R=!0;break t}ee===b(H)&&s(H),ue(M)}else s(H);ee=b(H)}if(ee!==null)R=!0;else{var m=b(S);m!==null&&Dt(Ue,m.startTime-M),R=!1}}break e}finally{ee=null,_e=ne,Ke=!1}R=void 0}}finally{R?st():De=!1}}}var st;if(typeof V=="function")st=function(){V(Xt)};else if(typeof MessageChannel<"u"){var Al=new MessageChannel,Zt=Al.port2;Al.port1.onmessage=Xt,st=function(){Zt.postMessage(null)}}else st=function(){Le(Xt,0)};function Dt(M,R){re=Le(function(){M(O.unstable_now())},R)}O.unstable_IdlePriority=5,O.unstable_ImmediatePriority=1,O.unstable_LowPriority=4,O.unstable_NormalPriority=3,O.unstable_Profiling=null,O.unstable_UserBlockingPriority=2,O.unstable_cancelCallback=function(M){M.callback=null},O.unstable_forceFrameRate=function(M){0>M||125ve?(M.sortIndex=ne,r(S,M),b(H)===null&&M===b(S)&&(Te?(D(re),re=-1):Te=!0,Dt(Ue,ne-ve))):(M.sortIndex=G,r(H,M),Ce||Ke||(Ce=!0,De||(De=!0,st()))),M},O.unstable_shouldYield=Sl,O.unstable_wrapCallback=function(M){var R=_e;return function(){var ne=_e;_e=R;try{return M.apply(this,arguments)}finally{_e=ne}}}})(pr)),pr}var Pd;function bm(){return Pd||(Pd=1,hr.exports=vm()),hr.exports}var mr={exports:{}},_t={};var eh;function gm(){if(eh)return _t;eh=1;var O=vr();function r(H){var S="https://react.dev/errors/"+H;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(O)}catch(r){console.error(r)}}return O(),mr.exports=gm(),mr.exports}var lh;function _m(){if(lh)return xu;lh=1;var O=bm(),r=vr(),b=ym();function s(e){var t="https://react.dev/errors/"+e;if(1G||(e.current=ve[G],ve[G]=null,G--)}function w(e,t){G++,ve[G]=e.current,e.current=t}var X=m(null),ie=m(null),de=m(null),Oe=m(null);function Ve(e,t){switch(w(de,t),w(ie,e),w(X,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?bd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=bd(t),e=gd(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}B(X),w(X,e)}function Xe(){B(X),B(ie),B(de)}function ll(e){e.memoizedState!==null&&w(Oe,e);var t=X.current,l=gd(t,e.type);t!==l&&(w(ie,e),w(X,l))}function fl(e){ie.current===e&&(B(X),B(ie)),Oe.current===e&&(B(Oe),Tu._currentValue=ne)}var Jn,Fn;function dt(e){if(Jn===void 0)try{throw Error()}catch(l){var t=l.stack.trim().match(/\n( *(at )?)/);Jn=t&&t[1]||"",Fn=-1)":-1a||d[n]!==_[a]){var z=` +`+d[n].replace(" at new "," at ");return e.displayName&&z.includes("")&&(z=z.replace("",e.displayName)),z}while(1<=n&&0<=a);break}}}finally{wa=!1,Error.prepareStackTrace=l}return(l=e?e.displayName||e.name:"")?dt(l):""}function lc(e,t){switch(e.tag){case 26:case 27:case 5:return dt(e.type);case 16:return dt("Lazy");case 13:return e.child!==t&&t!==null?dt("Suspense Fallback"):dt("Suspense");case 19:return dt("SuspenseList");case 0:case 15:return Rt(e.type,!1);case 11:return Rt(e.type.render,!1);case 1:return Rt(e.type,!0);case 31:return dt("Activity");default:return""}}function $n(e){try{var t="",l=null;do t+=lc(e,l),l=e,e=e.return;while(e);return t}catch(n){return` +Error generating stack: `+n.message+` +`+n.stack}}var Da=Object.prototype.hasOwnProperty,Tn=O.unstable_scheduleCallback,Ra=O.unstable_cancelCallback,nc=O.unstable_shouldYield,ac=O.unstable_requestPaint,St=O.unstable_now,On=O.unstable_getCurrentPriorityLevel,Hu=O.unstable_ImmediatePriority,wu=O.unstable_UserBlockingPriority,jt=O.unstable_NormalPriority,uc=O.unstable_LowPriority,Du=O.unstable_IdlePriority,sl=O.log,ic=O.unstable_setDisableYieldValue,Cn=null,ot=null;function dl(e){if(typeof sl=="function"&&ic(e),ot&&typeof ot.setStrictMode=="function")try{ot.setStrictMode(Cn,e)}catch{}}var At=Math.clz32?Math.clz32:ja,cc=Math.log,Ru=Math.LN2;function ja(e){return e>>>=0,e===0?32:31-(cc(e)/Ru|0)|0}var Ql=256,zn=262144,In=4194304;function hl(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Wl(e,t,l){var n=e.pendingLanes;if(n===0)return 0;var a=0,u=e.suspendedLanes,i=e.pingedLanes;e=e.warmLanes;var c=n&134217727;return c!==0?(n=c&~u,n!==0?a=hl(n):(i&=c,i!==0?a=hl(i):l||(l=c&~e,l!==0&&(a=hl(l))))):(c=n&~u,c!==0?a=hl(c):i!==0?a=hl(i):l||(l=n&~e,l!==0&&(a=hl(l)))),a===0?0:t!==0&&t!==a&&(t&u)===0&&(u=a&-a,l=t&-t,u>=l||u===32&&(l&4194048)!==0)?t:a}function nl(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Mn(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function ju(){var e=In;return In<<=1,(In&62914560)===0&&(In=4194304),e}function Pn(e){for(var t=[],l=0;31>l;l++)t.push(e);return t}function El(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Xl(e,t,l,n,a,u){var i=e.pendingLanes;e.pendingLanes=l,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=l,e.entangledLanes&=l,e.errorRecoveryDisabledLanes&=l,e.shellSuspendCounter=0;var c=e.entanglements,d=e.expirationTimes,_=e.hiddenUpdates;for(l=i&~l;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var Ya=/[\n"\\]/g;function o(e){return e.replace(Ya,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function f(e,t,l,n,a,u,i,c){e.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?e.type=i:e.removeAttribute("type"),t!=null?i==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Ct(t)):e.value!==""+Ct(t)&&(e.value=""+Ct(t)):i!=="submit"&&i!=="reset"||e.removeAttribute("value"),t!=null?E(e,i,Ct(t)):l!=null?E(e,i,Ct(l)):n!=null&&e.removeAttribute("value"),a==null&&u!=null&&(e.defaultChecked=!!u),a!=null&&(e.checked=a&&typeof a!="function"&&typeof a!="symbol"),c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?e.name=""+Ct(c):e.removeAttribute("name")}function h(e,t,l,n,a,u,i,c){if(u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(e.type=u),t!=null||l!=null){if(!(u!=="submit"&&u!=="reset"||t!=null)){Cl(e);return}l=l!=null?""+Ct(l):"",t=t!=null?""+Ct(t):l,c||t===e.value||(e.value=t),e.defaultValue=t}n=n??a,n=typeof n!="function"&&typeof n!="symbol"&&!!n,e.checked=c?e.checked:!!n,e.defaultChecked=!!n,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(e.name=i),Cl(e)}function E(e,t,l){t==="number"&&na(e.ownerDocument)===e||e.defaultValue===""+l||(e.defaultValue=""+l)}function C(e,t,l,n){if(e=e.options,t){t={};for(var a=0;a"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Bn=!1;if(ul)try{var Un={};Object.defineProperty(Un,"passive",{get:function(){Bn=!0}}),window.addEventListener("test",Un,Un),window.removeEventListener("test",Un,Un)}catch{Bn=!1}var vl=null,L=null,zt=null;function zl(){if(zt)return zt;var e,t=L,l=t.length,n,a="value"in vl?vl.value:vl.textContent,u=a.length;for(e=0;e=Xa),Er=" ",Tr=!1;function Or(e,t){switch(e){case"keyup":return wh.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Cr(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var aa=!1;function Rh(e,t){switch(e){case"compositionend":return Cr(t);case"keypress":return t.which!==32?null:(Tr=!0,Er);case"textInput":return e=t.data,e===Er&&Tr?null:e;default:return null}}function jh(e,t){if(aa)return e==="compositionend"||!mc&&Or(e,t)?(e=zl(),zt=L=vl=null,aa=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:l,offset:t-e};e=n}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=wr(l)}}function Rr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Rr(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function jr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=na(e.document);t instanceof e.HTMLIFrameElement;){try{var l=typeof t.contentWindow.location.href=="string"}catch{l=!1}if(l)e=t.contentWindow;else break;t=na(e.document)}return t}function gc(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var Xh=ul&&"documentMode"in document&&11>=document.documentMode,ua=null,yc=null,Ja=null,_c=!1;function qr(e,t,l){var n=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;_c||ua==null||ua!==na(n)||(n=ua,"selectionStart"in n&&gc(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Ja&&Ka(Ja,n)||(Ja=n,n=ji(yc,"onSelect"),0>=i,a-=i,bl=1<<32-At(t)+a|l<pe?(Ae=$,$=null):Ae=$.sibling;var xe=A(g,$,y[pe],x);if(xe===null){$===null&&($=Ae);break}e&&$&&xe.alternate===null&&t(g,$),p=u(xe,p,pe),Me===null?te=xe:Me.sibling=xe,Me=xe,$=Ae}if(pe===y.length)return l(g,$),Ee&&xl(g,pe),te;if($===null){for(;pepe?(Ae=$,$=null):Ae=$.sibling;var Sn=A(g,$,xe.value,x);if(Sn===null){$===null&&($=Ae);break}e&&$&&Sn.alternate===null&&t(g,$),p=u(Sn,p,pe),Me===null?te=Sn:Me.sibling=Sn,Me=Sn,$=Ae}if(xe.done)return l(g,$),Ee&&xl(g,pe),te;if($===null){for(;!xe.done;pe++,xe=y.next())xe=U(g,xe.value,x),xe!==null&&(p=u(xe,p,pe),Me===null?te=xe:Me.sibling=xe,Me=xe);return Ee&&xl(g,pe),te}for($=n($);!xe.done;pe++,xe=y.next())xe=T($,g,pe,xe.value,x),xe!==null&&(e&&xe.alternate!==null&&$.delete(xe.key===null?pe:xe.key),p=u(xe,p,pe),Me===null?te=xe:Me.sibling=xe,Me=xe);return e&&$.forEach(function(sm){return t(g,sm)}),Ee&&xl(g,pe),te}function Ge(g,p,y,x){if(typeof y=="object"&&y!==null&&y.type===Te&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case Ke:e:{for(var te=y.key;p!==null;){if(p.key===te){if(te=y.type,te===Te){if(p.tag===7){l(g,p.sibling),x=a(p,y.props.children),x.return=g,g=x;break e}}else if(p.elementType===te||typeof te=="object"&&te!==null&&te.$$typeof===tt&&Vn(te)===p.type){l(g,p.sibling),x=a(p,y.props),tu(x,y),x.return=g,g=x;break e}l(g,p);break}else t(g,p);p=p.sibling}y.type===Te?(x=jn(y.props.children,g.mode,x,y.key),x.return=g,g=x):(x=ei(y.type,y.key,y.props,null,g.mode,x),tu(x,y),x.return=g,g=x)}return i(g);case Ce:e:{for(te=y.key;p!==null;){if(p.key===te)if(p.tag===4&&p.stateNode.containerInfo===y.containerInfo&&p.stateNode.implementation===y.implementation){l(g,p.sibling),x=a(p,y.children||[]),x.return=g,g=x;break e}else{l(g,p);break}else t(g,p);p=p.sibling}x=zc(y,g.mode,x),x.return=g,g=x}return i(g);case tt:return y=Vn(y),Ge(g,p,y,x)}if(Dt(y))return k(g,p,y,x);if(st(y)){if(te=st(y),typeof te!="function")throw Error(s(150));return y=te.call(y),le(g,p,y,x)}if(typeof y.then=="function")return Ge(g,p,ci(y),x);if(y.$$typeof===V)return Ge(g,p,ni(g,y),x);oi(g,y)}return typeof y=="string"&&y!==""||typeof y=="number"||typeof y=="bigint"?(y=""+y,p!==null&&p.tag===6?(l(g,p.sibling),x=a(p,y),x.return=g,g=x):(l(g,p),x=Cc(y,g.mode,x),x.return=g,g=x),i(g)):l(g,p)}return function(g,p,y,x){try{eu=0;var te=Ge(g,p,y,x);return va=null,te}catch($){if($===ma||$===ui)throw $;var Me=Gt(29,$,null,g.mode);return Me.lanes=x,Me.return=g,Me}finally{}}}var Wn=of(!0),rf=of(!1),nn=!1;function Gc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Lc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function an(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function un(e,t,l){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,(Ne&2)!==0){var a=n.pending;return a===null?t.next=t:(t.next=a.next,a.next=t),n.pending=t,t=Pu(e),Xr(e,null,l),t}return Iu(e,n,t,l),Pu(e)}function lu(e,t,l){if(t=t.updateQueue,t!==null&&(t=t.shared,(l&4194048)!==0)){var n=t.lanes;n&=e.pendingLanes,l|=n,t.lanes=l,Gu(e,l)}}function Yc(e,t){var l=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,l===n)){var a=null,u=null;if(l=l.firstBaseUpdate,l!==null){do{var i={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};u===null?a=u=i:u=u.next=i,l=l.next}while(l!==null);u===null?a=u=t:u=u.next=t}else a=u=t;l={baseState:n.baseState,firstBaseUpdate:a,lastBaseUpdate:u,shared:n.shared,callbacks:n.callbacks},e.updateQueue=l;return}e=l.lastBaseUpdate,e===null?l.firstBaseUpdate=t:e.next=t,l.lastBaseUpdate=t}var Vc=!1;function nu(){if(Vc){var e=pa;if(e!==null)throw e}}function au(e,t,l,n){Vc=!1;var a=e.updateQueue;nn=!1;var u=a.firstBaseUpdate,i=a.lastBaseUpdate,c=a.shared.pending;if(c!==null){a.shared.pending=null;var d=c,_=d.next;d.next=null,i===null?u=_:i.next=_,i=d;var z=e.alternate;z!==null&&(z=z.updateQueue,c=z.lastBaseUpdate,c!==i&&(c===null?z.firstBaseUpdate=_:c.next=_,z.lastBaseUpdate=d))}if(u!==null){var U=a.baseState;i=0,z=_=d=null,c=u;do{var A=c.lane&-536870913,T=A!==c.lane;if(T?(Se&A)===A:(n&A)===A){A!==0&&A===ha&&(Vc=!0),z!==null&&(z=z.next={lane:0,tag:c.tag,payload:c.payload,callback:null,next:null});e:{var k=e,le=c;A=t;var Ge=l;switch(le.tag){case 1:if(k=le.payload,typeof k=="function"){U=k.call(Ge,U,A);break e}U=k;break e;case 3:k.flags=k.flags&-65537|128;case 0:if(k=le.payload,A=typeof k=="function"?k.call(Ge,U,A):k,A==null)break e;U=ee({},U,A);break e;case 2:nn=!0}}A=c.callback,A!==null&&(e.flags|=64,T&&(e.flags|=8192),T=a.callbacks,T===null?a.callbacks=[A]:T.push(A))}else T={lane:A,tag:c.tag,payload:c.payload,callback:c.callback,next:null},z===null?(_=z=T,d=U):z=z.next=T,i|=A;if(c=c.next,c===null){if(c=a.shared.pending,c===null)break;T=c,c=T.next,T.next=null,a.lastBaseUpdate=T,a.shared.pending=null}}while(!0);z===null&&(d=U),a.baseState=d,a.firstBaseUpdate=_,a.lastBaseUpdate=z,u===null&&(a.shared.lanes=0),sn|=i,e.lanes=i,e.memoizedState=U}}function ff(e,t){if(typeof e!="function")throw Error(s(191,e));e.call(t)}function sf(e,t){var l=e.callbacks;if(l!==null)for(e.callbacks=null,e=0;eu?u:8;var i=M.T,c={};M.T=c,co(e,!1,t,l);try{var d=a(),_=M.S;if(_!==null&&_(c,d),d!==null&&typeof d=="object"&&typeof d.then=="function"){var z=ep(d,n);cu(e,t,z,Wt(e))}else cu(e,t,n,Wt(e))}catch(U){cu(e,t,{then:function(){},status:"rejected",reason:U},Wt())}finally{R.p=u,i!==null&&c.types!==null&&(i.types=c.types),M.T=i}}function ip(){}function uo(e,t,l,n){if(e.tag!==5)throw Error(s(476));var a=Qf(e).queue;Vf(e,a,t,ne,l===null?ip:function(){return Wf(e),l(n)})}function Qf(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ne,baseState:ne,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Hl,lastRenderedState:ne},next:null};var l={};return t.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Hl,lastRenderedState:l},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Wf(e){var t=Qf(e);t.next===null&&(t=e.alternate.memoizedState),cu(e,t.next.queue,{},Wt())}function io(){return mt(Tu)}function Xf(){return et().memoizedState}function Zf(){return et().memoizedState}function cp(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var l=Wt();e=an(l);var n=un(t,e,l);n!==null&&(Ht(n,t,l),lu(n,t,l)),t={cache:Dc()},e.payload=t;return}t=t.return}}function op(e,t,l){var n=Wt();l={lane:n,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},gi(e)?Kf(t,l):(l=Tc(e,t,l,n),l!==null&&(Ht(l,e,n),Jf(l,t,n)))}function kf(e,t,l){var n=Wt();cu(e,t,l,n)}function cu(e,t,l,n){var a={lane:n,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(gi(e))Kf(t,a);else{var u=e.alternate;if(e.lanes===0&&(u===null||u.lanes===0)&&(u=t.lastRenderedReducer,u!==null))try{var i=t.lastRenderedState,c=u(i,l);if(a.hasEagerState=!0,a.eagerState=c,qt(c,i))return Iu(e,t,a,0),Ye===null&&$u(),!1}catch{}finally{}if(l=Tc(e,t,a,n),l!==null)return Ht(l,e,n),Jf(l,t,n),!0}return!1}function co(e,t,l,n){if(n={lane:2,revertLane:Lo(),gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},gi(e)){if(t)throw Error(s(479))}else t=Tc(e,l,n,2),t!==null&&Ht(t,e,2)}function gi(e){var t=e.alternate;return e===se||t!==null&&t===se}function Kf(e,t){ga=si=!0;var l=e.pending;l===null?t.next=t:(t.next=l.next,l.next=t),e.pending=t}function Jf(e,t,l){if((l&4194048)!==0){var n=t.lanes;n&=e.pendingLanes,l|=n,t.lanes=l,Gu(e,l)}}var ou={readContext:mt,use:pi,useCallback:$e,useContext:$e,useEffect:$e,useImperativeHandle:$e,useLayoutEffect:$e,useInsertionEffect:$e,useMemo:$e,useReducer:$e,useRef:$e,useState:$e,useDebugValue:$e,useDeferredValue:$e,useTransition:$e,useSyncExternalStore:$e,useId:$e,useHostTransitionStatus:$e,useFormState:$e,useActionState:$e,useOptimistic:$e,useMemoCache:$e,useCacheRefresh:$e};ou.useEffectEvent=$e;var Ff={readContext:mt,use:pi,useCallback:function(e,t){return Tt().memoizedState=[e,t===void 0?null:t],e},useContext:mt,useEffect:Hf,useImperativeHandle:function(e,t,l){l=l!=null?l.concat([e]):null,vi(4194308,4,jf.bind(null,t,e),l)},useLayoutEffect:function(e,t){return vi(4194308,4,e,t)},useInsertionEffect:function(e,t){vi(4,2,e,t)},useMemo:function(e,t){var l=Tt();t=t===void 0?null:t;var n=e();if(Xn){dl(!0);try{e()}finally{dl(!1)}}return l.memoizedState=[n,t],n},useReducer:function(e,t,l){var n=Tt();if(l!==void 0){var a=l(t);if(Xn){dl(!0);try{l(t)}finally{dl(!1)}}}else a=t;return n.memoizedState=n.baseState=a,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:a},n.queue=e,e=e.dispatch=op.bind(null,se,e),[n.memoizedState,e]},useRef:function(e){var t=Tt();return e={current:e},t.memoizedState=e},useState:function(e){e=eo(e);var t=e.queue,l=kf.bind(null,se,t);return t.dispatch=l,[e.memoizedState,l]},useDebugValue:no,useDeferredValue:function(e,t){var l=Tt();return ao(l,e,t)},useTransition:function(){var e=eo(!1);return e=Vf.bind(null,se,e.queue,!0,!1),Tt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,l){var n=se,a=Tt();if(Ee){if(l===void 0)throw Error(s(407));l=l()}else{if(l=t(),Ye===null)throw Error(s(349));(Se&127)!==0||bf(n,t,l)}a.memoizedState=l;var u={value:l,getSnapshot:t};return a.queue=u,Hf(yf.bind(null,n,u,e),[e]),n.flags|=2048,_a(9,{destroy:void 0},gf.bind(null,n,u,l,t),null),l},useId:function(){var e=Tt(),t=Ye.identifierPrefix;if(Ee){var l=gl,n=bl;l=(n&~(1<<32-At(n)-1)).toString(32)+l,t="_"+t+"R_"+l,l=di++,0<\/script>",u=u.removeChild(u.firstChild);break;case"select":u=typeof n.is=="string"?i.createElement("select",{is:n.is}):i.createElement("select"),n.multiple?u.multiple=!0:n.size&&(u.size=n.size);break;default:u=typeof n.is=="string"?i.createElement(a,{is:n.is}):i.createElement(a)}}u[lt]=t,u[ht]=n;e:for(i=t.child;i!==null;){if(i.tag===5||i.tag===6)u.appendChild(i.stateNode);else if(i.tag!==4&&i.tag!==27&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===t)break e;for(;i.sibling===null;){if(i.return===null||i.return===t)break e;i=i.return}i.sibling.return=i.return,i=i.sibling}t.stateNode=u;e:switch(bt(u,a,n),a){case"button":case"input":case"select":case"textarea":n=!!n.autoFocus;break e;case"img":n=!0;break e;default:n=!1}n&&Dl(t)}}return We(t),Ao(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,l),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==n&&Dl(t);else{if(typeof n!="string"&&t.stateNode===null)throw Error(s(166));if(e=de.current,sa(t)){if(e=t.stateNode,l=t.memoizedProps,n=null,a=pt,a!==null)switch(a.tag){case 27:case 5:n=a.memoizedProps}e[lt]=t,e=!!(e.nodeValue===l||n!==null&&n.suppressHydrationWarning===!0||md(e.nodeValue,l)),e||tn(t,!0)}else e=qi(e).createTextNode(n),e[lt]=t,t.stateNode=e}return We(t),null;case 31:if(l=t.memoizedState,e===null||e.memoizedState!==null){if(n=sa(t),l!==null){if(e===null){if(!n)throw Error(s(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(s(557));e[lt]=t}else qn(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;We(t),e=!1}else l=Uc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=l),e=!0;if(!e)return t.flags&256?(Yt(t),t):(Yt(t),null);if((t.flags&128)!==0)throw Error(s(558))}return We(t),null;case 13:if(n=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=sa(t),n!==null&&n.dehydrated!==null){if(e===null){if(!a)throw Error(s(318));if(a=t.memoizedState,a=a!==null?a.dehydrated:null,!a)throw Error(s(317));a[lt]=t}else qn(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;We(t),a=!1}else a=Uc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(Yt(t),t):(Yt(t),null)}return Yt(t),(t.flags&128)!==0?(t.lanes=l,t):(l=n!==null,e=e!==null&&e.memoizedState!==null,l&&(n=t.child,a=null,n.alternate!==null&&n.alternate.memoizedState!==null&&n.alternate.memoizedState.cachePool!==null&&(a=n.alternate.memoizedState.cachePool.pool),u=null,n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(u=n.memoizedState.cachePool.pool),u!==a&&(n.flags|=2048)),l!==e&&l&&(t.child.flags|=8192),Ei(t,t.updateQueue),We(t),null);case 4:return Xe(),e===null&&Wo(t.stateNode.containerInfo),We(t),null;case 10:return Ul(t.type),We(t),null;case 19:if(B(Pe),n=t.memoizedState,n===null)return We(t),null;if(a=(t.flags&128)!==0,u=n.rendering,u===null)if(a)fu(n,!1);else{if(Ie!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(u=fi(e),u!==null){for(t.flags|=128,fu(n,!1),e=u.updateQueue,t.updateQueue=e,Ei(t,e),t.subtreeFlags=0,e=l,l=t.child;l!==null;)Zr(l,e),l=l.sibling;return w(Pe,Pe.current&1|2),Ee&&xl(t,n.treeForkCount),t.child}e=e.sibling}n.tail!==null&&St()>Mi&&(t.flags|=128,a=!0,fu(n,!1),t.lanes=4194304)}else{if(!a)if(e=fi(u),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Ei(t,e),fu(n,!0),n.tail===null&&n.tailMode==="hidden"&&!u.alternate&&!Ee)return We(t),null}else 2*St()-n.renderingStartTime>Mi&&l!==536870912&&(t.flags|=128,a=!0,fu(n,!1),t.lanes=4194304);n.isBackwards?(u.sibling=t.child,t.child=u):(e=n.last,e!==null?e.sibling=u:t.child=u,n.last=u)}return n.tail!==null?(e=n.tail,n.rendering=e,n.tail=e.sibling,n.renderingStartTime=St(),e.sibling=null,l=Pe.current,w(Pe,a?l&1|2:l&1),Ee&&xl(t,n.treeForkCount),e):(We(t),null);case 22:case 23:return Yt(t),Wc(),n=t.memoizedState!==null,e!==null?e.memoizedState!==null!==n&&(t.flags|=8192):n&&(t.flags|=8192),n?(l&536870912)!==0&&(t.flags&128)===0&&(We(t),t.subtreeFlags&6&&(t.flags|=8192)):We(t),l=t.updateQueue,l!==null&&Ei(t,l.retryQueue),l=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(l=e.memoizedState.cachePool.pool),n=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(n=t.memoizedState.cachePool.pool),n!==l&&(t.flags|=2048),e!==null&&B(Yn),null;case 24:return l=null,e!==null&&(l=e.memoizedState.cache),t.memoizedState.cache!==l&&(t.flags|=2048),Ul(at),We(t),null;case 25:return null;case 30:return null}throw Error(s(156,t.tag))}function hp(e,t){switch(xc(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Ul(at),Xe(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return fl(t),null;case 31:if(t.memoizedState!==null){if(Yt(t),t.alternate===null)throw Error(s(340));qn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Yt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(s(340));qn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return B(Pe),null;case 4:return Xe(),null;case 10:return Ul(t.type),null;case 22:case 23:return Yt(t),Wc(),e!==null&&B(Yn),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Ul(at),null;case 25:return null;default:return null}}function _s(e,t){switch(xc(t),t.tag){case 3:Ul(at),Xe();break;case 26:case 27:case 5:fl(t);break;case 4:Xe();break;case 31:t.memoizedState!==null&&Yt(t);break;case 13:Yt(t);break;case 19:B(Pe);break;case 10:Ul(t.type);break;case 22:case 23:Yt(t),Wc(),e!==null&&B(Yn);break;case 24:Ul(at)}}function su(e,t){try{var l=t.updateQueue,n=l!==null?l.lastEffect:null;if(n!==null){var a=n.next;l=a;do{if((l.tag&e)===e){n=void 0;var u=l.create,i=l.inst;n=u(),i.destroy=n}l=l.next}while(l!==a)}}catch(c){we(t,t.return,c)}}function rn(e,t,l){try{var n=t.updateQueue,a=n!==null?n.lastEffect:null;if(a!==null){var u=a.next;n=u;do{if((n.tag&e)===e){var i=n.inst,c=i.destroy;if(c!==void 0){i.destroy=void 0,a=t;var d=l,_=c;try{_()}catch(z){we(a,d,z)}}}n=n.next}while(n!==u)}}catch(z){we(t,t.return,z)}}function Ss(e){var t=e.updateQueue;if(t!==null){var l=e.stateNode;try{sf(t,l)}catch(n){we(e,e.return,n)}}}function As(e,t,l){l.props=Zn(e.type,e.memoizedProps),l.state=e.memoizedState;try{l.componentWillUnmount()}catch(n){we(e,t,n)}}function du(e,t){try{var l=e.ref;if(l!==null){switch(e.tag){case 26:case 27:case 5:var n=e.stateNode;break;case 30:n=e.stateNode;break;default:n=e.stateNode}typeof l=="function"?e.refCleanup=l(n):l.current=n}}catch(a){we(e,t,a)}}function yl(e,t){var l=e.ref,n=e.refCleanup;if(l!==null)if(typeof n=="function")try{n()}catch(a){we(e,t,a)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(a){we(e,t,a)}else l.current=null}function Es(e){var t=e.type,l=e.memoizedProps,n=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":l.autoFocus&&n.focus();break e;case"img":l.src?n.src=l.src:l.srcSet&&(n.srcset=l.srcSet)}}catch(a){we(e,e.return,a)}}function Eo(e,t,l){try{var n=e.stateNode;Dp(n,e.type,l,t),n[ht]=t}catch(a){we(e,e.return,a)}}function Ts(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&vn(e.type)||e.tag===4}function To(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Ts(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&vn(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Oo(e,t,l){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(e,t):(t=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,t.appendChild(e),l=l._reactRootContainer,l!=null||t.onclick!==null||(t.onclick=F));else if(n!==4&&(n===27&&vn(e.type)&&(l=e.stateNode,t=null),e=e.child,e!==null))for(Oo(e,t,l),e=e.sibling;e!==null;)Oo(e,t,l),e=e.sibling}function Ti(e,t,l){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?l.insertBefore(e,t):l.appendChild(e);else if(n!==4&&(n===27&&vn(e.type)&&(l=e.stateNode),e=e.child,e!==null))for(Ti(e,t,l),e=e.sibling;e!==null;)Ti(e,t,l),e=e.sibling}function Os(e){var t=e.stateNode,l=e.memoizedProps;try{for(var n=e.type,a=t.attributes;a.length;)t.removeAttributeNode(a[0]);bt(t,n,l),t[lt]=e,t[ht]=l}catch(u){we(e,e.return,u)}}var Rl=!1,ct=!1,Co=!1,Cs=typeof WeakSet=="function"?WeakSet:Set,ft=null;function pp(e,t){if(e=e.containerInfo,ko=Xi,e=jr(e),gc(e)){if("selectionStart"in e)var l={start:e.selectionStart,end:e.selectionEnd};else e:{l=(l=e.ownerDocument)&&l.defaultView||window;var n=l.getSelection&&l.getSelection();if(n&&n.rangeCount!==0){l=n.anchorNode;var a=n.anchorOffset,u=n.focusNode;n=n.focusOffset;try{l.nodeType,u.nodeType}catch{l=null;break e}var i=0,c=-1,d=-1,_=0,z=0,U=e,A=null;t:for(;;){for(var T;U!==l||a!==0&&U.nodeType!==3||(c=i+a),U!==u||n!==0&&U.nodeType!==3||(d=i+n),U.nodeType===3&&(i+=U.nodeValue.length),(T=U.firstChild)!==null;)A=U,U=T;for(;;){if(U===e)break t;if(A===l&&++_===a&&(c=i),A===u&&++z===n&&(d=i),(T=U.nextSibling)!==null)break;U=A,A=U.parentNode}U=T}l=c===-1||d===-1?null:{start:c,end:d}}else l=null}l=l||{start:0,end:0}}else l=null;for(Ko={focusedElem:e,selectionRange:l},Xi=!1,ft=t;ft!==null;)if(t=ft,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ft=e;else for(;ft!==null;){switch(t=ft,u=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(l=0;l title"))),bt(u,n,l),u[lt]=e,nt(u),n=u;break e;case"link":var i=Nd("link","href",a).get(n+(l.href||""));if(i){for(var c=0;cGe&&(i=Ge,Ge=le,le=i);var g=Dr(c,le),p=Dr(c,Ge);if(g&&p&&(T.rangeCount!==1||T.anchorNode!==g.node||T.anchorOffset!==g.offset||T.focusNode!==p.node||T.focusOffset!==p.offset)){var y=U.createRange();y.setStart(g.node,g.offset),T.removeAllRanges(),le>Ge?(T.addRange(y),T.extend(p.node,p.offset)):(y.setEnd(p.node,p.offset),T.addRange(y))}}}}for(U=[],T=c;T=T.parentNode;)T.nodeType===1&&U.push({element:T,left:T.scrollLeft,top:T.scrollTop});for(typeof c.focus=="function"&&c.focus(),c=0;cl?32:l,M.T=null,l=Ho,Ho=null;var u=hn,i=Yl;if(rt=0,Oa=hn=null,Yl=0,(Ne&6)!==0)throw Error(s(331));var c=Ne;if(Ne|=4,js(u.current),ws(u,u.current,i,l),Ne=c,gu(0,!1),ot&&typeof ot.onPostCommitFiberRoot=="function")try{ot.onPostCommitFiberRoot(Cn,u)}catch{}return!0}finally{R.p=a,M.T=n,td(e,t)}}function nd(e,t,l){t=Jt(l,t),t=so(e.stateNode,t,2),e=un(e,t,2),e!==null&&(El(e,2),_l(e))}function we(e,t,l){if(e.tag===3)nd(e,e,l);else for(;t!==null;){if(t.tag===3){nd(t,e,l);break}else if(t.tag===1){var n=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof n.componentDidCatch=="function"&&(dn===null||!dn.has(n))){e=Jt(l,e),l=as(2),n=un(t,l,2),n!==null&&(us(l,n,t,e),El(n,2),_l(n));break}}t=t.return}}function jo(e,t,l){var n=e.pingCache;if(n===null){n=e.pingCache=new bp;var a=new Set;n.set(t,a)}else a=n.get(t),a===void 0&&(a=new Set,n.set(t,a));a.has(l)||(xo=!0,a.add(l),e=Ap.bind(null,e,t,l),t.then(e,e))}function Ap(e,t,l){var n=e.pingCache;n!==null&&n.delete(t),e.pingedLanes|=e.suspendedLanes&l,e.warmLanes&=~l,Ye===e&&(Se&l)===l&&(Ie===4||Ie===3&&(Se&62914560)===Se&&300>St()-zi?(Ne&2)===0&&Ca(e,0):Bo|=l,Ta===Se&&(Ta=0)),_l(e)}function ad(e,t){t===0&&(t=ju()),e=Rn(e,t),e!==null&&(El(e,t),_l(e))}function Ep(e){var t=e.memoizedState,l=0;t!==null&&(l=t.retryLane),ad(e,l)}function Tp(e,t){var l=0;switch(e.tag){case 31:case 13:var n=e.stateNode,a=e.memoizedState;a!==null&&(l=a.retryLane);break;case 19:n=e.stateNode;break;case 22:n=e.stateNode._retryCache;break;default:throw Error(s(314))}n!==null&&n.delete(t),ad(e,l)}function Op(e,t){return Tn(e,t)}var wi=null,Ma=null,qo=!1,Di=!1,Go=!1,mn=0;function _l(e){e!==Ma&&e.next===null&&(Ma===null?wi=Ma=e:Ma=Ma.next=e),Di=!0,qo||(qo=!0,zp())}function gu(e,t){if(!Go&&Di){Go=!0;do for(var l=!1,n=wi;n!==null;){if(e!==0){var a=n.pendingLanes;if(a===0)var u=0;else{var i=n.suspendedLanes,c=n.pingedLanes;u=(1<<31-At(42|e)+1)-1,u&=a&~(i&~c),u=u&201326741?u&201326741|1:u?u|2:0}u!==0&&(l=!0,od(n,u))}else u=Se,u=Wl(n,n===Ye?u:0,n.cancelPendingCommit!==null||n.timeoutHandle!==-1),(u&3)===0||nl(n,u)||(l=!0,od(n,u));n=n.next}while(l);Go=!1}}function Cp(){ud()}function ud(){Di=qo=!1;var e=0;mn!==0&&jp()&&(e=mn);for(var t=St(),l=null,n=wi;n!==null;){var a=n.next,u=id(n,t);u===0?(n.next=null,l===null?wi=a:l.next=a,a===null&&(Ma=l)):(l=n,(e!==0||(u&3)!==0)&&(Di=!0)),n=a}rt!==0&&rt!==5||gu(e),mn!==0&&(mn=0)}function id(e,t){for(var l=e.suspendedLanes,n=e.pingedLanes,a=e.expirationTimes,u=e.pendingLanes&-62914561;0c)break;var z=d.transferSize,U=d.initiatorType;z&&vd(U)&&(d=d.responseEnd,i+=z*(d"u"?null:document;function Md(e,t,l){var n=xa;if(n&&typeof t=="string"&&t){var a=o(t);a='link[rel="'+e+'"][href="'+a+'"]',typeof l=="string"&&(a+='[crossorigin="'+l+'"]'),zd.has(a)||(zd.add(a),e={rel:e,crossOrigin:l,href:t},n.querySelector(a)===null&&(t=n.createElement("link"),bt(t,"link",e),nt(t),n.head.appendChild(t)))}}function Zp(e){Vl.D(e),Md("dns-prefetch",e,null)}function kp(e,t){Vl.C(e,t),Md("preconnect",e,t)}function Kp(e,t,l){Vl.L(e,t,l);var n=xa;if(n&&e&&t){var a='link[rel="preload"][as="'+o(t)+'"]';t==="image"&&l&&l.imageSrcSet?(a+='[imagesrcset="'+o(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(a+='[imagesizes="'+o(l.imageSizes)+'"]')):a+='[href="'+o(e)+'"]';var u=a;switch(t){case"style":u=Ba(e);break;case"script":u=Ua(e)}tl.has(u)||(e=ee({rel:"preload",href:t==="image"&&l&&l.imageSrcSet?void 0:e,as:t},l),tl.set(u,e),n.querySelector(a)!==null||t==="style"&&n.querySelector(Au(u))||t==="script"&&n.querySelector(Eu(u))||(t=n.createElement("link"),bt(t,"link",e),nt(t),n.head.appendChild(t)))}}function Jp(e,t){Vl.m(e,t);var l=xa;if(l&&e){var n=t&&typeof t.as=="string"?t.as:"script",a='link[rel="modulepreload"][as="'+o(n)+'"][href="'+o(e)+'"]',u=a;switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=Ua(e)}if(!tl.has(u)&&(e=ee({rel:"modulepreload",href:e},t),tl.set(u,e),l.querySelector(a)===null)){switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(Eu(u)))return}n=l.createElement("link"),bt(n,"link",e),nt(n),l.head.appendChild(n)}}}function Fp(e,t,l){Vl.S(e,t,l);var n=xa;if(n&&e){var a=Jl(n).hoistableStyles,u=Ba(e);t=t||"default";var i=a.get(u);if(!i){var c={loading:0,preload:null};if(i=n.querySelector(Au(u)))c.loading=5;else{e=ee({rel:"stylesheet",href:e,"data-precedence":t},l),(l=tl.get(u))&&tr(e,l);var d=i=n.createElement("link");nt(d),bt(d,"link",e),d._p=new Promise(function(_,z){d.onload=_,d.onerror=z}),d.addEventListener("load",function(){c.loading|=1}),d.addEventListener("error",function(){c.loading|=2}),c.loading|=4,Li(i,t,n)}i={type:"stylesheet",instance:i,count:1,state:c},a.set(u,i)}}}function $p(e,t){Vl.X(e,t);var l=xa;if(l&&e){var n=Jl(l).hoistableScripts,a=Ua(e),u=n.get(a);u||(u=l.querySelector(Eu(a)),u||(e=ee({src:e,async:!0},t),(t=tl.get(a))&&lr(e,t),u=l.createElement("script"),nt(u),bt(u,"link",e),l.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},n.set(a,u))}}function Ip(e,t){Vl.M(e,t);var l=xa;if(l&&e){var n=Jl(l).hoistableScripts,a=Ua(e),u=n.get(a);u||(u=l.querySelector(Eu(a)),u||(e=ee({src:e,async:!0,type:"module"},t),(t=tl.get(a))&&lr(e,t),u=l.createElement("script"),nt(u),bt(u,"link",e),l.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},n.set(a,u))}}function xd(e,t,l,n){var a=(a=de.current)?Gi(a):null;if(!a)throw Error(s(446));switch(e){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(t=Ba(l.href),l=Jl(a).hoistableStyles,n=l.get(t),n||(n={type:"style",instance:null,count:0,state:null},l.set(t,n)),n):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){e=Ba(l.href);var u=Jl(a).hoistableStyles,i=u.get(e);if(i||(a=a.ownerDocument||a,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(e,i),(u=a.querySelector(Au(e)))&&!u._p&&(i.instance=u,i.state.loading=5),tl.has(e)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},tl.set(e,l),u||Pp(a,e,l,i.state))),t&&n===null)throw Error(s(528,""));return i}if(t&&n!==null)throw Error(s(529,""));return null;case"script":return t=l.async,l=l.src,typeof l=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Ua(l),l=Jl(a).hoistableScripts,n=l.get(t),n||(n={type:"script",instance:null,count:0,state:null},l.set(t,n)),n):{type:"void",instance:null,count:0,state:null};default:throw Error(s(444,e))}}function Ba(e){return'href="'+o(e)+'"'}function Au(e){return'link[rel="stylesheet"]['+e+"]"}function Bd(e){return ee({},e,{"data-precedence":e.precedence,precedence:null})}function Pp(e,t,l,n){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?n.loading=1:(t=e.createElement("link"),n.preload=t,t.addEventListener("load",function(){return n.loading|=1}),t.addEventListener("error",function(){return n.loading|=2}),bt(t,"link",l),nt(t),e.head.appendChild(t))}function Ua(e){return'[src="'+o(e)+'"]'}function Eu(e){return"script[async]"+e}function Ud(e,t,l){if(t.count++,t.instance===null)switch(t.type){case"style":var n=e.querySelector('style[data-href~="'+o(l.href)+'"]');if(n)return t.instance=n,nt(n),n;var a=ee({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return n=(e.ownerDocument||e).createElement("style"),nt(n),bt(n,"style",a),Li(n,l.precedence,e),t.instance=n;case"stylesheet":a=Ba(l.href);var u=e.querySelector(Au(a));if(u)return t.state.loading|=4,t.instance=u,nt(u),u;n=Bd(l),(a=tl.get(a))&&tr(n,a),u=(e.ownerDocument||e).createElement("link"),nt(u);var i=u;return i._p=new Promise(function(c,d){i.onload=c,i.onerror=d}),bt(u,"link",n),t.state.loading|=4,Li(u,l.precedence,e),t.instance=u;case"script":return u=Ua(l.src),(a=e.querySelector(Eu(u)))?(t.instance=a,nt(a),a):(n=l,(a=tl.get(u))&&(n=ee({},l),lr(n,a)),e=e.ownerDocument||e,a=e.createElement("script"),nt(a),bt(a,"link",n),e.head.appendChild(a),t.instance=a);case"void":return null;default:throw Error(s(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(n=t.instance,t.state.loading|=4,Li(n,l.precedence,e));return t.instance}function Li(e,t,l){for(var n=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),a=n.length?n[n.length-1]:null,u=a,i=0;i title"):null)}function em(e,t,l){if(l===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return e=t.disabled,typeof t.precedence=="string"&&e==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function wd(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function tm(e,t,l,n){if(l.type==="stylesheet"&&(typeof n.media!="string"||matchMedia(n.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var a=Ba(n.href),u=t.querySelector(Au(a));if(u){t=u._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Vi.bind(e),t.then(e,e)),l.state.loading|=4,l.instance=u,nt(u);return}u=t.ownerDocument||t,n=Bd(n),(a=tl.get(a))&&tr(n,a),u=u.createElement("link"),nt(u);var i=u;i._p=new Promise(function(c,d){i.onload=c,i.onerror=d}),bt(u,"link",n),l.instance=u}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(l,t),(t=l.state.preload)&&(l.state.loading&3)===0&&(e.count++,l=Vi.bind(e),t.addEventListener("load",l),t.addEventListener("error",l))}}var nr=0;function lm(e,t){return e.stylesheets&&e.count===0&&Wi(e,e.stylesheets),0nr?50:800)+t);return e.unsuspend=l,function(){e.unsuspend=null,clearTimeout(n),clearTimeout(a)}}:null}function Vi(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Wi(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Qi=null;function Wi(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Qi=new Map,t.forEach(nm,e),Qi=null,Vi.call(e))}function nm(e,t){if(!(t.state.loading&4)){var l=Qi.get(e);if(l)var n=l.get(null);else{l=new Map,Qi.set(e,l);for(var a=e.querySelectorAll("link[data-precedence],style[data-precedence]"),u=0;u"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(O)}catch(r){console.error(r)}}return O(),dr.exports=_m(),dr.exports}var Am=Sm();function Em(O,r){O.terminate=function(){const b=()=>{};this.onerror=b,this.onmessage=b,this.onopen=b;const s=new Date,v=Math.random().toString().substring(2,8),N=this.onclose;this.onclose=I=>{const W=new Date().getTime()-s.getTime();r(`Discarded socket (#${v}) closed after ${W}ms, with code/reason: ${I.code}/${I.reason}`)},this.close(),N?.call(O,{code:4001,reason:`Quick discarding socket (#${v}) without waiting for the shutdown sequence.`,wasClean:!1})}}const Uu={LF:` +`,NULL:"\0"};class An{get body(){return!this._body&&this.isBinaryBody&&(this._body=new TextDecoder().decode(this._binaryBody)),this._body||""}get binaryBody(){return!this._binaryBody&&!this.isBinaryBody&&(this._binaryBody=new TextEncoder().encode(this._body)),this._binaryBody}constructor(r){const{command:b,headers:s,body:v,binaryBody:N,escapeHeaderValues:I,skipContentLengthHeader:W}=r;this.command=b,this.headers=Object.assign({},s||{}),N?(this._binaryBody=N,this.isBinaryBody=!0):(this._body=v||"",this.isBinaryBody=!1),this.escapeHeaderValues=I||!1,this.skipContentLengthHeader=W||!1}static fromRawFrame(r,b){const s={},v=N=>N.replace(/^\s+|\s+$/g,"");for(const N of r.headers.reverse()){N.indexOf(":");const I=v(N[0]);let W=v(N[1]);b&&r.command!=="CONNECT"&&r.command!=="CONNECTED"&&(W=An.hdrValueUnEscape(W)),s[I]=W}return new An({command:r.command,headers:s,binaryBody:r.binaryBody,escapeHeaderValues:b})}toString(){return this.serializeCmdAndHeaders()}serialize(){const r=this.serializeCmdAndHeaders();return this.isBinaryBody?An.toUnit8Array(r,this._binaryBody).buffer:r+this._body+Uu.NULL}serializeCmdAndHeaders(){const r=[this.command];this.skipContentLengthHeader&&delete this.headers["content-length"];for(const b of Object.keys(this.headers||{})){const s=this.headers[b];this.escapeHeaderValues&&this.command!=="CONNECT"&&this.command!=="CONNECTED"?r.push(`${b}:${An.hdrValueEscape(`${s}`)}`):r.push(`${b}:${s}`)}return(this.isBinaryBody||!this.isBodyEmpty()&&!this.skipContentLengthHeader)&&r.push(`content-length:${this.bodyLength()}`),r.join(Uu.LF)+Uu.LF+Uu.LF}isBodyEmpty(){return this.bodyLength()===0}bodyLength(){const r=this.binaryBody;return r?r.length:0}static sizeOfUTF8(r){return r?new TextEncoder().encode(r).length:0}static toUnit8Array(r,b){const s=new TextEncoder().encode(r),v=new Uint8Array([0]),N=new Uint8Array(s.length+b.length+v.length);return N.set(s),N.set(b,s.length),N.set(v,s.length+b.length),N}static marshall(r){return new An(r).serialize()}static hdrValueEscape(r){return r.replace(/\\/g,"\\\\").replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/:/g,"\\c")}static hdrValueUnEscape(r){return r.replace(/\\r/g,"\r").replace(/\\n/g,` +`).replace(/\\c/g,":").replace(/\\\\/g,"\\")}}const ah=0,Ii=10,Pi=13,Tm=58;class Om{constructor(r,b){this.onFrame=r,this.onIncomingPing=b,this._encoder=new TextEncoder,this._decoder=new TextDecoder,this._token=[],this._initState()}parseChunk(r,b=!1){let s;if(typeof r=="string"?s=this._encoder.encode(r):s=new Uint8Array(r),b&&s[s.length-1]!==0){const v=new Uint8Array(s.length+1);v.set(s,0),v[s.length]=0,s=v}for(let v=0;vb[0]==="content-length")[0];r?(this._bodyBytesRemaining=parseInt(r[1],10),this._onByte=this._collectBodyFixedSize):this._onByte=this._collectBodyNullTerminated}_collectBodyNullTerminated(r){if(r===ah){this._retrievedBody();return}this._consumeByte(r)}_collectBodyFixedSize(r){if(this._bodyBytesRemaining--===0){this._retrievedBody();return}this._consumeByte(r)}_retrievedBody(){this._results.binaryBody=this._consumeTokenAsRaw();try{this.onFrame(this._results)}catch(r){console.log("Ignoring an exception thrown by a frame handler. Original exception: ",r)}this._initState()}_consumeByte(r){this._token.push(r)}_consumeTokenAsUTF8(){return this._decoder.decode(this._consumeTokenAsRaw())}_consumeTokenAsRaw(){const r=new Uint8Array(this._token);return this._token=[],r}_initState(){this._results={command:void 0,headers:[],binaryBody:void 0},this._token=[],this._headerKey=void 0,this._onByte=this._collectFrame}}var En;(function(O){O[O.CONNECTING=0]="CONNECTING",O[O.OPEN=1]="OPEN",O[O.CLOSING=2]="CLOSING",O[O.CLOSED=3]="CLOSED"})(En||(En={}));var rl;(function(O){O[O.ACTIVE=0]="ACTIVE",O[O.DEACTIVATING=1]="DEACTIVATING",O[O.INACTIVE=2]="INACTIVE"})(rl||(rl={}));var tc;(function(O){O[O.LINEAR=0]="LINEAR",O[O.EXPONENTIAL=1]="EXPONENTIAL"})(tc||(tc={}));var Nu;(function(O){O.Interval="interval",O.Worker="worker"})(Nu||(Nu={}));class Cm{constructor(r,b=Nu.Interval,s){this._interval=r,this._strategy=b,this._debug=s,this._workerScript=` + var startTime = Date.now(); + setInterval(function() { + self.postMessage(Date.now() - startTime); + }, ${this._interval}); + `}start(r){this.stop(),this.shouldUseWorker()?this.runWorker(r):this.runInterval(r)}stop(){this.disposeWorker(),this.disposeInterval()}shouldUseWorker(){return typeof Worker<"u"&&this._strategy===Nu.Worker}runWorker(r){this._debug("Using runWorker for outgoing pings"),this._worker||(this._worker=new Worker(URL.createObjectURL(new Blob([this._workerScript],{type:"text/javascript"}))),this._worker.onmessage=b=>r(b.data))}runInterval(r){if(this._debug("Using runInterval for outgoing pings"),!this._timer){const b=Date.now();this._timer=setInterval(()=>{r(Date.now()-b)},this._interval)}}disposeWorker(){this._worker&&(this._worker.terminate(),delete this._worker,this._debug("Outgoing ping disposeWorker"))}disposeInterval(){this._timer&&(clearInterval(this._timer),delete this._timer,this._debug("Outgoing ping disposeInterval"))}}class Ot{constructor(r){this.versions=r}supportedVersions(){return this.versions.join(",")}protocolVersions(){return this.versions.map(r=>`v${r.replace(".","")}.stomp`)}}Ot.V1_0="1.0";Ot.V1_1="1.1";Ot.V1_2="1.2";Ot.default=new Ot([Ot.V1_2,Ot.V1_1,Ot.V1_0]);class zm{get connectedVersion(){return this._connectedVersion}get connected(){return this._connected}constructor(r,b,s){this._client=r,this._webSocket=b,this._connected=!1,this._serverFrameHandlers={CONNECTED:v=>{this.debug(`connected to server ${v.headers.server}`),this._connected=!0,this._connectedVersion=v.headers.version,this._connectedVersion===Ot.V1_2&&(this._escapeHeaderValues=!0),this._setupHeartbeat(v.headers),this.onConnect(v)},MESSAGE:v=>{const N=v.headers.subscription,I=this._subscriptions[N]||this.onUnhandledMessage,W=v,H=this,S=this._connectedVersion===Ot.V1_2?W.headers.ack:W.headers["message-id"];W.ack=(ae={})=>H.ack(S,N,ae),W.nack=(ae={})=>H.nack(S,N,ae),I(W)},RECEIPT:v=>{const N=this._receiptWatchers[v.headers["receipt-id"]];N?(N(v),delete this._receiptWatchers[v.headers["receipt-id"]]):this.onUnhandledReceipt(v)},ERROR:v=>{this.onStompError(v)}},this._counter=0,this._subscriptions={},this._receiptWatchers={},this._partialData="",this._escapeHeaderValues=!1,this._lastServerActivityTS=Date.now(),this.debug=s.debug,this.stompVersions=s.stompVersions,this.connectHeaders=s.connectHeaders,this.disconnectHeaders=s.disconnectHeaders,this.heartbeatIncoming=s.heartbeatIncoming,this.heartbeatToleranceMultiplier=s.heartbeatGracePeriods,this.heartbeatOutgoing=s.heartbeatOutgoing,this.splitLargeFrames=s.splitLargeFrames,this.maxWebSocketChunkSize=s.maxWebSocketChunkSize,this.forceBinaryWSFrames=s.forceBinaryWSFrames,this.logRawCommunication=s.logRawCommunication,this.appendMissingNULLonIncoming=s.appendMissingNULLonIncoming,this.discardWebsocketOnCommFailure=s.discardWebsocketOnCommFailure,this.onConnect=s.onConnect,this.onDisconnect=s.onDisconnect,this.onStompError=s.onStompError,this.onWebSocketClose=s.onWebSocketClose,this.onWebSocketError=s.onWebSocketError,this.onUnhandledMessage=s.onUnhandledMessage,this.onUnhandledReceipt=s.onUnhandledReceipt,this.onUnhandledFrame=s.onUnhandledFrame,this.onHeartbeatReceived=s.onHeartbeatReceived,this.onHeartbeatLost=s.onHeartbeatLost}start(){const r=new Om(b=>{const s=An.fromRawFrame(b,this._escapeHeaderValues);this.logRawCommunication||this.debug(`<<< ${s}`),(this._serverFrameHandlers[s.command]||this.onUnhandledFrame)(s)},()=>{this.debug("<<< PONG"),this.onHeartbeatReceived()});this._webSocket.onmessage=b=>{if(this.debug("Received data"),this._lastServerActivityTS=Date.now(),this.logRawCommunication){const s=b.data instanceof ArrayBuffer?new TextDecoder().decode(b.data):b.data;this.debug(`<<< ${s}`)}r.parseChunk(b.data,this.appendMissingNULLonIncoming)},this._webSocket.onclose=b=>{this.debug(`Connection closed to ${this._webSocket.url}`),this._cleanUp(),this.onWebSocketClose(b)},this._webSocket.onerror=b=>{this.onWebSocketError(b)},this._webSocket.onopen=()=>{const b=Object.assign({},this.connectHeaders);this.debug("Web Socket Opened..."),b["accept-version"]=this.stompVersions.supportedVersions(),b["heart-beat"]=[this.heartbeatOutgoing,this.heartbeatIncoming].join(","),this._transmit({command:"CONNECT",headers:b})}}_setupHeartbeat(r){if(r.version!==Ot.V1_1&&r.version!==Ot.V1_2||!r["heart-beat"])return;const[b,s]=r["heart-beat"].split(",").map(v=>parseInt(v,10));if(this.heartbeatOutgoing!==0&&s!==0){const v=Math.max(this.heartbeatOutgoing,s);this.debug(`send PING every ${v}ms`),this._pinger=new Cm(v,this._client.heartbeatStrategy,this.debug),this._pinger.start(()=>{this._webSocket.readyState===En.OPEN&&(this._webSocket.send(Uu.LF),this.debug(">>> PING"))})}if(this.heartbeatIncoming!==0&&b!==0){const v=Math.max(this.heartbeatIncoming,b);this.debug(`check PONG every ${v}ms`),this._ponger=setInterval(()=>{const N=Date.now()-this._lastServerActivityTS;N>v*this.heartbeatToleranceMultiplier&&(this.debug(`did not receive server activity for the last ${N}ms`),this.onHeartbeatLost(),this._closeOrDiscardWebsocket())},v)}}_closeOrDiscardWebsocket(){this.discardWebsocketOnCommFailure?(this.debug("Discarding websocket, the underlying socket may linger for a while"),this.discardWebsocket()):(this.debug("Issuing close on the websocket"),this._closeWebsocket())}forceDisconnect(){this._webSocket&&(this._webSocket.readyState===En.CONNECTING||this._webSocket.readyState===En.OPEN)&&this._closeOrDiscardWebsocket()}_closeWebsocket(){this._webSocket.onmessage=()=>{},this._webSocket.close()}discardWebsocket(){typeof this._webSocket.terminate!="function"&&Em(this._webSocket,r=>this.debug(r)),this._webSocket.terminate()}_transmit(r){const{command:b,headers:s,body:v,binaryBody:N,skipContentLengthHeader:I}=r,W=new An({command:b,headers:s,body:v,binaryBody:N,escapeHeaderValues:this._escapeHeaderValues,skipContentLengthHeader:I});let H=W.serialize();if(this.logRawCommunication?this.debug(`>>> ${H}`):this.debug(`>>> ${W}`),this.forceBinaryWSFrames&&typeof H=="string"&&(H=new TextEncoder().encode(H)),typeof H!="string"||!this.splitLargeFrames)this._webSocket.send(H);else{let S=H;for(;S.length>0;){const ae=S.substring(0,this.maxWebSocketChunkSize);S=S.substring(this.maxWebSocketChunkSize),this._webSocket.send(ae),this.debug(`chunk sent = ${ae.length}, remaining = ${S.length}`)}}}dispose(){if(this.connected)try{const r=Object.assign({},this.disconnectHeaders);r.receipt||(r.receipt=`close-${this._counter++}`),this.watchForReceipt(r.receipt,b=>{this._closeWebsocket(),this._cleanUp(),this.onDisconnect(b)}),this._transmit({command:"DISCONNECT",headers:r})}catch(r){this.debug(`Ignoring error during disconnect ${r}`)}else(this._webSocket.readyState===En.CONNECTING||this._webSocket.readyState===En.OPEN)&&this._closeWebsocket()}_cleanUp(){this._connected=!1,this._pinger&&(this._pinger.stop(),this._pinger=void 0),this._ponger&&(clearInterval(this._ponger),this._ponger=void 0)}publish(r){const{destination:b,headers:s,body:v,binaryBody:N,skipContentLengthHeader:I}=r,W=Object.assign({destination:b},s);this._transmit({command:"SEND",headers:W,body:v,binaryBody:N,skipContentLengthHeader:I})}watchForReceipt(r,b){this._receiptWatchers[r]=b}subscribe(r,b,s={}){s=Object.assign({},s),s.id||(s.id=`sub-${this._counter++}`),s.destination=r,this._subscriptions[s.id]=b,this._transmit({command:"SUBSCRIBE",headers:s});const v=this;return{id:s.id,unsubscribe(N){return v.unsubscribe(s.id,N)}}}unsubscribe(r,b={}){b=Object.assign({},b),delete this._subscriptions[r],b.id=r,this._transmit({command:"UNSUBSCRIBE",headers:b})}begin(r){const b=r||`tx-${this._counter++}`;this._transmit({command:"BEGIN",headers:{transaction:b}});const s=this;return{id:b,commit(){s.commit(b)},abort(){s.abort(b)}}}commit(r){this._transmit({command:"COMMIT",headers:{transaction:r}})}abort(r){this._transmit({command:"ABORT",headers:{transaction:r}})}ack(r,b,s={}){s=Object.assign({},s),this._connectedVersion===Ot.V1_2?s.id=r:s["message-id"]=r,s.subscription=b,this._transmit({command:"ACK",headers:s})}nack(r,b,s={}){return s=Object.assign({},s),this._connectedVersion===Ot.V1_2?s.id=r:s["message-id"]=r,s.subscription=b,this._transmit({command:"NACK",headers:s})}}class Mm{get webSocket(){return this._stompHandler?._webSocket}get disconnectHeaders(){return this._disconnectHeaders}set disconnectHeaders(r){this._disconnectHeaders=r,this._stompHandler&&(this._stompHandler.disconnectHeaders=this._disconnectHeaders)}get connected(){return!!this._stompHandler&&this._stompHandler.connected}get connectedVersion(){return this._stompHandler?this._stompHandler.connectedVersion:void 0}get active(){return this.state===rl.ACTIVE}_changeState(r){this.state=r,this.onChangeState(r)}constructor(r={}){this.stompVersions=Ot.default,this.connectionTimeout=0,this.reconnectDelay=5e3,this._nextReconnectDelay=0,this.maxReconnectDelay=900*1e3,this.reconnectTimeMode=tc.LINEAR,this.heartbeatIncoming=1e4,this.heartbeatToleranceMultiplier=2,this.heartbeatOutgoing=1e4,this.heartbeatStrategy=Nu.Interval,this.splitLargeFrames=!1,this.maxWebSocketChunkSize=8*1024,this.forceBinaryWSFrames=!1,this.appendMissingNULLonIncoming=!1,this.discardWebsocketOnCommFailure=!1,this.state=rl.INACTIVE;const b=()=>{};this.debug=b,this.beforeConnect=b,this.onConnect=b,this.onDisconnect=b,this.onUnhandledMessage=b,this.onUnhandledReceipt=b,this.onUnhandledFrame=b,this.onHeartbeatReceived=b,this.onHeartbeatLost=b,this.onStompError=b,this.onWebSocketClose=b,this.onWebSocketError=b,this.logRawCommunication=!1,this.onChangeState=b,this.connectHeaders={},this._disconnectHeaders={},this.configure(r)}configure(r){Object.assign(this,r),this.maxReconnectDelay>0&&this.maxReconnectDelay{if(this.active){this.debug("Already ACTIVE, ignoring request to activate");return}this._changeState(rl.ACTIVE),this._nextReconnectDelay=this.reconnectDelay,this._connect()};this.state===rl.DEACTIVATING?(this.debug("Waiting for deactivation to finish before activating"),this.deactivate().then(()=>{r()})):r()}async _connect(){if(await this.beforeConnect(this),this._stompHandler){this.debug("There is already a stompHandler, skipping the call to connect");return}if(!this.active){this.debug("Client has been marked inactive, will not attempt to connect");return}this.connectionTimeout>0&&(this._connectionWatcher&&clearTimeout(this._connectionWatcher),this._connectionWatcher=setTimeout(()=>{this.connected||(this.debug(`Connection not established in ${this.connectionTimeout}ms, closing socket`),this.forceDisconnect())},this.connectionTimeout)),this.debug("Opening Web Socket...");const r=this._createWebSocket();this._stompHandler=new zm(this,r,{debug:this.debug,stompVersions:this.stompVersions,connectHeaders:this.connectHeaders,disconnectHeaders:this._disconnectHeaders,heartbeatIncoming:this.heartbeatIncoming,heartbeatGracePeriods:this.heartbeatToleranceMultiplier,heartbeatOutgoing:this.heartbeatOutgoing,heartbeatStrategy:this.heartbeatStrategy,splitLargeFrames:this.splitLargeFrames,maxWebSocketChunkSize:this.maxWebSocketChunkSize,forceBinaryWSFrames:this.forceBinaryWSFrames,logRawCommunication:this.logRawCommunication,appendMissingNULLonIncoming:this.appendMissingNULLonIncoming,discardWebsocketOnCommFailure:this.discardWebsocketOnCommFailure,onConnect:b=>{if(this._connectionWatcher&&(clearTimeout(this._connectionWatcher),this._connectionWatcher=void 0),this._nextReconnectDelay=this.reconnectDelay,!this.active){this.debug("STOMP got connected while deactivate was issued, will disconnect now"),this._disposeStompHandler();return}this.onConnect(b)},onDisconnect:b=>{this.onDisconnect(b)},onStompError:b=>{this.onStompError(b)},onWebSocketClose:b=>{this._stompHandler=void 0,this.state===rl.DEACTIVATING&&this._changeState(rl.INACTIVE),this.onWebSocketClose(b),this.active&&this._schedule_reconnect()},onWebSocketError:b=>{this.onWebSocketError(b)},onUnhandledMessage:b=>{this.onUnhandledMessage(b)},onUnhandledReceipt:b=>{this.onUnhandledReceipt(b)},onUnhandledFrame:b=>{this.onUnhandledFrame(b)},onHeartbeatReceived:()=>{this.onHeartbeatReceived()},onHeartbeatLost:()=>{this.onHeartbeatLost()}}),this._stompHandler.start()}_createWebSocket(){let r;if(this.webSocketFactory)r=this.webSocketFactory();else if(this.brokerURL)r=new WebSocket(this.brokerURL,this.stompVersions.protocolVersions());else throw new Error("Either brokerURL or webSocketFactory must be provided");return r.binaryType="arraybuffer",r}_schedule_reconnect(){this._nextReconnectDelay>0&&(this.debug(`STOMP: scheduling reconnection in ${this._nextReconnectDelay}ms`),this._reconnector=setTimeout(()=>{this.reconnectTimeMode===tc.EXPONENTIAL&&(this._nextReconnectDelay=this._nextReconnectDelay*2,this.maxReconnectDelay!==0&&(this._nextReconnectDelay=Math.min(this._nextReconnectDelay,this.maxReconnectDelay))),this._connect()},this._nextReconnectDelay))}async deactivate(r={}){const b=r.force||!1,s=this.active;let v;if(this.state===rl.INACTIVE)return this.debug("Already INACTIVE, nothing more to do"),Promise.resolve();if(this._changeState(rl.DEACTIVATING),this._nextReconnectDelay=0,this._reconnector&&(clearTimeout(this._reconnector),this._reconnector=void 0),this._stompHandler&&this.webSocket.readyState!==En.CLOSED){const N=this._stompHandler.onWebSocketClose;v=new Promise((I,W)=>{this._stompHandler.onWebSocketClose=H=>{N(H),I()}})}else return this._changeState(rl.INACTIVE),Promise.resolve();return b?this._stompHandler?.discardWebsocket():s&&this._disposeStompHandler(),v}forceDisconnect(){this._stompHandler&&this._stompHandler.forceDisconnect()}_disposeStompHandler(){this._stompHandler&&this._stompHandler.dispose()}publish(r){this._checkConnection(),this._stompHandler.publish(r)}_checkConnection(){if(!this.connected)throw new TypeError("There is no underlying STOMP connection")}watchForReceipt(r,b){this._checkConnection(),this._stompHandler.watchForReceipt(r,b)}subscribe(r,b,s={}){return this._checkConnection(),this._stompHandler.subscribe(r,b,s)}unsubscribe(r,b={}){this._checkConnection(),this._stompHandler.unsubscribe(r,b)}begin(r){return this._checkConnection(),this._stompHandler.begin(r)}commit(r){this._checkConnection(),this._stompHandler.commit(r)}abort(r){this._checkConnection(),this._stompHandler.abort(r)}ack(r,b,s={}){this._checkConnection(),this._stompHandler.ack(r,b,s)}nack(r,b,s={}){this._checkConnection(),this._stompHandler.nack(r,b,s)}}const rh=gt.createContext(null),br=()=>{const O=gt.useContext(rh);if(!O)throw new Error("useGame must be used within a GameProvider");return O},xm=({children:O})=>{const[r,b]=gt.useState(null),[s,v]=gt.useState(!1),[N,I]=gt.useState(null),[W,H]=gt.useState(null),[S,ae]=gt.useState(null);gt.useEffect(()=>{const Te=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`,Be=new Mm({brokerURL:Te,reconnectDelay:5e3,debug:Le=>{console.log(Le)},onConnect:Le=>{console.log("Connected: "+Le),v(!0),Be.subscribe("/user/queue/errors",D=>{ae(D.body)}),Be.subscribe("/user/queue/player-info",D=>{const V=JSON.parse(D.body);H(V),console.log("Current player set:",V)}),Be.subscribe("/user/queue/created",D=>{const V=JSON.parse(D.body);I(V)})},onStompError:Le=>{console.error("Broker reported error: "+Le.headers.message),console.error("Additional details: "+Le.body),ae(Le.headers.message)},onWebSocketClose:()=>{v(!1),console.log("WebSocket connection closed")}});return Be.activate(),b(Be),()=>{Be.deactivate()}},[]),gt.useEffect(()=>{if(s&&r&&N){const Ce=r.subscribe(`/topic/room/${N.roomId}`,Te=>{const Be=JSON.parse(Te.body);I(Be)});return()=>Ce.unsubscribe()}},[s,r,N?.roomId]);const ee=gt.useCallback((Ce,Te)=>{r&&s&&r.publish({destination:"/app/create",body:JSON.stringify({playerName:Ce,userId:Te})})},[r,s]),_e=gt.useCallback((Ce,Te,Be)=>{r&&s&&r.publish({destination:"/app/join",body:JSON.stringify({roomId:Ce,playerName:Te,userId:Be})})},[r,s]),Ke=gt.useCallback(Ce=>{r&&s&&N&&r.publish({destination:"/app/team/join",body:JSON.stringify({roomId:N.roomId,teamId:Ce})})},[r,s,N]);return P.jsx(rh.Provider,{value:{connected:s,room:N,currentPlayer:W,error:S,createRoom:ee,joinRoom:_e,joinTeam:Ke},children:O})};var ec={},Bu={},uh={},ih;function Bm(){return ih||(ih=1,(function(){var O={},r="";try{r=location.hash.toString()}catch{}var b=H(r),s=Le("initParams");if(s)for(var v in s)typeof b[v]>"u"&&(b[v]=s[v]);Be("initParams",b);var N=!1,I;try{if(N=window.parent!=null&&window!=window.parent,N){window.addEventListener("message",function(D){if(D.source===window.parent){try{var V=JSON.parse(D.data)}catch{return}if(!(!V||!V.eventType))if(V.eventType=="set_custom_style")D.origin==="https://web.telegram.org"&&(I.innerHTML=V.eventData);else if(V.eventType=="reload_iframe"){try{window.parent.postMessage(JSON.stringify({eventType:"iframe_will_reload"}),"*")}catch{}location.reload()}else _e(V.eventType,V.eventData)}}),I=document.createElement("style"),document.head.appendChild(I);try{window.parent.postMessage(JSON.stringify({eventType:"iframe_ready",eventData:{reload_supported:!0}}),"*")}catch{}}}catch{}function W(D){try{return D=D.replace(/\+/g,"%20"),decodeURIComponent(D)}catch{return D}}function H(D){D=D.replace(/^#/,"");var V={};if(!D.length)return V;if(D.indexOf("=")<0&&D.indexOf("?")<0)return V._path=W(D),V;var ue=D.indexOf("?");if(ue>=0){var Ue=D.substr(0,ue);V._path=W(Ue),D=D.substr(ue+1)}var De=S(D);for(var re in De)V[re]=De[re];return V}function S(D){var V={};if(!D.length)return V;var ue=D.split("&"),Ue,De,re,tt;for(Ue=0;Ue=0?D+"&"+V:Ue.length>0?D+"?"+V:D+V}function ee(D,V,ue){if(V||(V=function(){}),ue===void 0&&(ue=""),console.log("[Telegram.WebView] > postEvent",D,ue),window.TelegramWebviewProxy!==void 0)TelegramWebviewProxy.postEvent(D,JSON.stringify(ue)),V();else if(window.external&&"notify"in window.external)window.external.notify(JSON.stringify({eventType:D,eventData:ue})),V();else if(N)try{var Ue="https://web.telegram.org";Ue="*",window.parent.postMessage(JSON.stringify({eventType:D,eventData:ue}),Ue),V()}catch(De){V(De)}else V({notAvailable:!0})}function _e(D,V){console.log("[Telegram.WebView] < receiveEvent",D,V),Ke(D,function(ue){ue(D,V)})}function Ke(D,V){var ue=O[D];if(!(ue===void 0||!ue.length))for(var Ue=0;Ue0){for(var E=0;Ej?1:-1;return 0}function ce(o){return Gu(S,o)>=0}function qa(o){if(window.Blob)try{return new Blob([o]).size}catch{}for(var f=o.length,h=o.length-1;h>=0;h--){var E=o.charCodeAt(h);E>127&&E<=2047?f++:E>2047&&E<=65535&&(f+=2),E>=56320&&E<=57343&&h--}return f}var Ga=(function(){var o=!1,f={};Object.defineProperty(f,"isVisible",{set:function(J){be({is_visible:J})},get:function(){return o},enumerable:!0});var h=null;r.onEvent("back_button_pressed",E);function E(){G("backButtonClicked")}function C(){return{is_visible:o}}function j(J){return typeof J>"u"&&(J=C()),JSON.stringify(J)}function Z(){return ce("6.1")?!0:(console.warn("[Telegram.WebApp] BackButton is not supported in version "+S),!1)}function Y(){var J=C(),me=j(J);h!==me&&(h=me,r.postEvent("web_app_setup_back_button",!1,J))}function be(J){return Z()&&(typeof J.is_visible<"u"&&(o=!!J.is_visible),Y()),f}return f.onClick=function(J){return Z()&&m("backButtonClicked",J),f},f.offClick=function(J){return Z()&&B("backButtonClicked",J),f},f.show=function(){return be({is_visible:!0})},f.hide=function(){return be({is_visible:!1})},f})(),Et=null,ea={},Fe=0;if(b.tgWebAppDebug){Et=document.createElement("tg-bottom-bar");var lt={display:"flex",gap:"7px",font:"600 14px/18px sans-serif",width:"100%",background:Mn(),position:"fixed",left:"0",right:"0",bottom:"0",margin:"0",padding:"7px",textAlign:"center",boxSizing:"border-box",zIndex:"10000"};for(var ht in lt)Et.style[ht]=lt[ht];document.addEventListener("DOMContentLoaded",function o(f){document.removeEventListener("DOMContentLoaded",o),document.body.appendChild(Et)});var Tl=document.createElement("style");Tl.innerHTML='tg-bottom-button.shine { position: relative; overflow: hidden; } tg-bottom-button.shine:before { content:""; position: absolute; top: 0; width: 100%; height: 100%; background: linear-gradient(120deg, transparent, rgba(255, 255, 255, .2), transparent); animation: tg-bottom-button-shine 5s ease-in-out infinite; } @-webkit-keyframes tg-bottom-button-shine { 0% {left: -100%;} 12%,100% {left: 100%}} @keyframes tg-bottom-button-shine { 0% {left: -100%;} 12%,100% {left: 100%}}',Et.appendChild(Tl)}function ta(){var o=ea.main._bottomButton,f=ea.secondary._bottomButton;o.isVisible||f.isVisible?(Et.style.display="flex",Fe=58,o.isVisible&&f.isVisible&&(f.position=="top"?(Et.style.flexDirection="column-reverse",Fe+=51):f.position=="bottom"?(Et.style.flexDirection="column",Fe+=51):f.position=="left"?Et.style.flexDirection="row-reverse":f.position=="right"&&(Et.style.flexDirection="row"))):(Et.style.display="none",Fe=0),Et.style.background=Mn(),document.documentElement&&(document.documentElement.style.boxSizing="border-box",document.documentElement.style.paddingBottom=Fe+"px"),Fn()}var Lu=function(o){var f=o=="main";if(f)var h="web_app_setup_main_button",E="main_button_pressed",C="mainButtonClicked",j="Continue",Z=function(){return W.button_color||"#2481cc"},Y=function(){return W.button_text_color||"#ffffff"};else var h="web_app_setup_secondary_button",E="secondary_button_pressed",C="secondaryButtonClicked",j="Cancel",Z=function(){return Mn()},Y=function(){return W.button_color||"#2481cc"};var be=!1,J=!0,me=!1,ze=!1,he=o,q=j,Q=!1,F=!1,Ze="left",K={};Object.defineProperty(K,"type",{get:function(){return he},enumerable:!0}),Object.defineProperty(K,"text",{set:function(L){K.setParams({text:L})},get:function(){return q},enumerable:!0}),Object.defineProperty(K,"color",{set:function(L){K.setParams({color:L})},get:function(){return Q||Z()},enumerable:!0}),Object.defineProperty(K,"textColor",{set:function(L){K.setParams({text_color:L})},get:function(){return F||Y()},enumerable:!0}),Object.defineProperty(K,"isVisible",{set:function(L){K.setParams({is_visible:L})},get:function(){return be},enumerable:!0}),Object.defineProperty(K,"isProgressVisible",{get:function(){return ze},enumerable:!0}),Object.defineProperty(K,"isActive",{set:function(L){K.setParams({is_active:L})},get:function(){return J},enumerable:!0}),Object.defineProperty(K,"hasShineEffect",{set:function(L){K.setParams({has_shine_effect:L})},get:function(){return me},enumerable:!0}),f||Object.defineProperty(K,"position",{set:function(L){K.setParams({position:L})},get:function(){return Ze},enumerable:!0});var Re=null;r.onEvent(E,Va);var fe=null;if(b.tgWebAppDebug){fe=document.createElement("tg-bottom-button");var Je={display:"none",width:"100%",height:"44px",borderRadius:"0",background:"no-repeat right center",padding:"13px 15px",textAlign:"center",boxSizing:"border-box"};for(var kt in Je)fe.style[kt]=Je[kt];Et.appendChild(fe),fe.addEventListener("click",Va,!1),fe._bottomButton=K,ea[o]=fe}function Va(){J&&G(C)}function Il(){var L=K.color,zt=K.textColor;if(be){var zl={is_visible:!0,is_active:J,is_progress_visible:ze,text:q,color:L,text_color:zt,has_shine_effect:me&&J&&!ze};f||(zl.position=Ze)}else var zl={is_visible:!1};return zl}function ul(L){return typeof L>"u"&&(L=Il()),JSON.stringify(L)}function Bn(){var L=Il(),zt=ul(L);Re!==zt&&(Re=zt,r.postEvent(h,!1,L),b.tgWebAppDebug&&Un(L))}function Un(L){L.is_visible?(fe.style.display="block",fe.style.opacity=L.is_active?"1":"0.8",fe.style.cursor=L.is_active?"pointer":"auto",fe.disabled=!L.is_active,fe.innerText=L.text,fe.className=L.has_shine_effect?"shine":"",fe.style.backgroundImage=L.is_progress_visible?"url('data:image/svg+xml,"+encodeURIComponent('')+"')":"none",fe.style.backgroundColor=L.color,fe.style.color=L.text_color):fe.style.display="none",ta()}function vl(L){if(typeof L.text<"u"){var zt=ve(L.text);if(!zt.length)throw console.error("[Telegram.WebApp] Bottom button text is required",L.text),Error("WebAppBottomButtonParamInvalid");if(zt.length>64)throw console.error("[Telegram.WebApp] Bottom button text is too long",zt),Error("WebAppBottomButtonParamInvalid");q=zt}if(typeof L.color<"u")if(L.color===!1||L.color===null)Q=!1;else{var zl=Xl(L.color);if(!zl)throw console.error("[Telegram.WebApp] Bottom button color format is invalid",L.color),Error("WebAppBottomButtonParamInvalid");Q=zl}if(typeof L.text_color<"u")if(L.text_color===!1||L.text_color===null)F=!1;else{var Nn=Xl(L.text_color);if(!Nn)throw console.error("[Telegram.WebApp] Bottom button text color format is invalid",L.text_color),Error("WebAppBottomButtonParamInvalid");F=Nn}if(typeof L.is_visible<"u"){if(L.is_visible&&!K.text.length)throw console.error("[Telegram.WebApp] Bottom button text is required"),Error("WebAppBottomButtonParamInvalid");be=!!L.is_visible}if(typeof L.has_shine_effect<"u"&&(me=!!L.has_shine_effect),!f&&typeof L.position<"u"){if(L.position!="left"&&L.position!="right"&&L.position!="top"&&L.position!="bottom")throw console.error("[Telegram.WebApp] Bottom button posiition is invalid",L.position),Error("WebAppBottomButtonParamInvalid");Ze=L.position}return typeof L.is_active<"u"&&(J=!!L.is_active),Bn(),K}return K.setText=function(L){return K.setParams({text:L})},K.onClick=function(L){return m(C,L),K},K.offClick=function(L){return B(C,L),K},K.show=function(){return K.setParams({is_visible:!0})},K.hide=function(){return K.setParams({is_visible:!1})},K.enable=function(){return K.setParams({is_active:!0})},K.disable=function(){return K.setParams({is_active:!1})},K.showProgress=function(L){return J=!!L,ze=!0,Bn(),K},K.hideProgress=function(){return K.isActive||(J=!0),ze=!1,Bn(),K},K.setParams=vl,K},oc=Lu("main"),Yu=Lu("secondary"),Zl=(function(){var o=!1,f={};Object.defineProperty(f,"isVisible",{set:function(J){be({is_visible:J})},get:function(){return o},enumerable:!0});var h=null;r.onEvent("settings_button_pressed",E);function E(){G("settingsButtonClicked")}function C(){return{is_visible:o}}function j(J){return typeof J>"u"&&(J=C()),JSON.stringify(J)}function Z(){return ce("6.10")?!0:(console.warn("[Telegram.WebApp] SettingsButton is not supported in version "+S),!1)}function Y(){var J=C(),me=j(J);h!==me&&(h=me,r.postEvent("web_app_setup_settings_button",!1,J))}function be(J){return Z()&&(typeof J.is_visible<"u"&&(o=!!J.is_visible),Y()),f}return f.onClick=function(J){return Z()&&m("settingsButtonClicked",J),f},f.offClick=function(J){return Z()&&B("settingsButtonClicked",J),f},f.show=function(){return be({is_visible:!0})},f.hide=function(){return be({is_visible:!1})},f})(),La=(function(){var o={};function f(h){if(!ce("6.1"))return console.warn("[Telegram.WebApp] HapticFeedback is not supported in version "+S),o;if(h.type=="impact"){if(h.impact_style!="light"&&h.impact_style!="medium"&&h.impact_style!="heavy"&&h.impact_style!="rigid"&&h.impact_style!="soft")throw console.error("[Telegram.WebApp] Haptic impact style is invalid",h.impact_style),Error("WebAppHapticImpactStyleInvalid")}else if(h.type=="notification"){if(h.notification_type!="error"&&h.notification_type!="success"&&h.notification_type!="warning")throw console.error("[Telegram.WebApp] Haptic notification type is invalid",h.notification_type),Error("WebAppHapticNotificationTypeInvalid")}else if(h.type!="selection_change")throw console.error("[Telegram.WebApp] Haptic feedback type is invalid",h.type),Error("WebAppHapticFeedbackTypeInvalid");return r.postEvent("web_app_trigger_haptic_feedback",!1,h),o}return o.impactOccurred=function(h){return f({type:"impact",impact_style:h})},o.notificationOccurred=function(h){return f({type:"notification",notification_type:h})},o.selectionChanged=function(){return f({type:"selection_change"})},o})(),kl=(function(){var o={};function f(h,E,C){if(!ce("6.9"))throw console.error("[Telegram.WebApp] CloudStorage is not supported in version "+S),Error("WebAppMethodUnsupported");return Ya(h,E,C),o}return o.setItem=function(h,E,C){return f("saveStorageValue",{key:h,value:E},C)},o.getItem=function(h,E){return o.getItems([h],E?function(C,j){C?E(C):E(null,j[h])}:null)},o.getItems=function(h,E){return f("getStorageValues",{keys:h},E)},o.removeItem=function(h,E){return o.removeItems([h],E)},o.removeItems=function(h,E){return f("deleteStorageValues",{keys:h},E)},o.getKeys=function(h){return f("getStorageKeys",{},h)},o})(),Kl=(function(){var o=!1,f=!1,h="unknown",E=!1,C=!1,j=!1,Z="",Y={};Object.defineProperty(Y,"isInited",{get:function(){return o},enumerable:!0}),Object.defineProperty(Y,"isBiometricAvailable",{get:function(){return o&&f},enumerable:!0}),Object.defineProperty(Y,"biometricType",{get:function(){return h||"unknown"},enumerable:!0}),Object.defineProperty(Y,"isAccessRequested",{get:function(){return E},enumerable:!0}),Object.defineProperty(Y,"isAccessGranted",{get:function(){return E&&C},enumerable:!0}),Object.defineProperty(Y,"isBiometricTokenSaved",{get:function(){return j},enumerable:!0}),Object.defineProperty(Y,"deviceId",{get:function(){return Z||""},enumerable:!0});var be={callbacks:[]},J=!1,me=!1,ze=!1;r.onEvent("biometry_info_received",he),r.onEvent("biometry_auth_requested",q),r.onEvent("biometry_token_updated",Q);function he(K,Re){if(o=!0,Re.available?(f=!0,h=Re.type||"unknown",Re.access_requested?(E=!0,C=!!Re.access_granted,j=!!Re.token_saved):(E=!1,C=!1,j=!1)):(f=!1,h="unknown",E=!1,C=!1,j=!1),Z=Re.device_id||"",be.callbacks.length>0){for(var fe=0;fe128)throw console.error("[Telegram.WebApp] Biometric reason is too long",Je),Error("WebAppBiometricRequestAccessParamInvalid");Je.length>0&&(fe.reason=Je)}return J={callback:Re},r.postEvent("web_app_biometry_request_access",!1,fe),Y},Y.authenticate=function(K,Re){if(!F())return Y;if(Ze(),!f)throw console.error("[Telegram.WebApp] Biometrics is not available on this device."),Error("WebAppBiometricManagerBiometricsNotAvailable");if(!C)throw console.error("[Telegram.WebApp] Biometric access was not granted by the user."),Error("WebAppBiometricManagerBiometricAccessNotGranted");if(me)throw console.error("[Telegram.WebApp] Authentication request is already in progress."),Error("WebAppBiometricManagerAuthenticationRequested");var fe={};if(typeof K.reason<"u"){var Je=ve(K.reason);if(Je.length>128)throw console.error("[Telegram.WebApp] Biometric reason is too long",Je),Error("WebAppBiometricRequestAccessParamInvalid");Je.length>0&&(fe.reason=Je)}return me={callback:Re},r.postEvent("web_app_biometry_request_auth",!1,fe),Y},Y.updateBiometricToken=function(K,Re){if(!F())return Y;if(K=K||"",K.length>1024)throw console.error("[Telegram.WebApp] Token is too long",K),Error("WebAppBiometricManagerTokenInvalid");if(Ze(),!f)throw console.error("[Telegram.WebApp] Biometrics is not available on this device."),Error("WebAppBiometricManagerBiometricsNotAvailable");if(!C)throw console.error("[Telegram.WebApp] Biometric access was not granted by the user."),Error("WebAppBiometricManagerBiometricAccessNotGranted");if(ze)throw console.error("[Telegram.WebApp] Token request is already in progress."),Error("WebAppBiometricManagerTokenUpdateRequested");return ze={callback:Re},r.postEvent("web_app_biometry_update_token",!1,{token:K}),Y},Y.openSettings=function(){if(!F())return Y;if(Ze(),!f)throw console.error("[Telegram.WebApp] Biometrics is not available on this device."),Error("WebAppBiometricManagerBiometricsNotAvailable");if(!E)throw console.error("[Telegram.WebApp] Biometric access was not requested yet."),Error("WebAppBiometricManagerBiometricsAccessNotRequested");return C?(console.warn("[Telegram.WebApp] Biometric access was granted by the user, no need to go to settings."),Y):(r.postEvent("web_app_biometry_open_settings",!1),Y)},Y})(),xn=(function(){var o=!1,f=!1,h=!1,E=!1,C={};Object.defineProperty(C,"isInited",{get:function(){return o},enumerable:!0}),Object.defineProperty(C,"isLocationAvailable",{get:function(){return o&&f},enumerable:!0}),Object.defineProperty(C,"isAccessRequested",{get:function(){return h},enumerable:!0}),Object.defineProperty(C,"isAccessGranted",{get:function(){return h&&E},enumerable:!0});var j={callbacks:[]},Z={callbacks:[]};r.onEvent("location_checked",Y),r.onEvent("location_requested",be);function Y(he,q){if(o=!0,q.available?(f=!0,q.access_requested?(h=!0,E=!!q.access_granted):(h=!1,E=!1)):(f=!1,h=!1,E=!1),j.callbacks.length>0){for(var Q=0;Q0){for(var q=0;q0){for(var Q=0;Q0){for(var Q=0;Q0){for(var Q=0;Q1e3?console.warn("[Telegram.WebApp] Accelerometer refresh_rate is invalid",F):Q.refresh_rate=F,q&&C.push(q),r.postEvent("web_app_start_accelerometer",!1,Q),Z},Z.stop=function(he){return ze()&&(he&&j.push(he),r.postEvent("web_app_stop_accelerometer")),Z},Z})(),nt=(function(){var o=!1,f=null,h=null,E=null,C=!1,j=[],Z=[],Y={};Object.defineProperty(Y,"isStarted",{get:function(){return o},enumerable:!0}),Object.defineProperty(Y,"absolute",{get:function(){return C},enumerable:!0}),Object.defineProperty(Y,"alpha",{get:function(){return f},enumerable:!0}),Object.defineProperty(Y,"beta",{get:function(){return h},enumerable:!0}),Object.defineProperty(Y,"gamma",{get:function(){return E},enumerable:!0}),r.onEvent("device_orientation_started",be),r.onEvent("device_orientation_stopped",J),r.onEvent("device_orientation_changed",me),r.onEvent("device_orientation_failed",ze);function be(q,Q){if(o=!0,j.length>0){for(var F=0;F0){for(var F=0;F0){for(var F=0;F1e3?console.warn("[Telegram.WebApp] DeviceOrientation refresh_rate is invalid",Ze):F.refresh_rate=Ze,F.need_absolute=!!q.need_absolute,Q&&j.push(Q),r.postEvent("web_app_start_device_orientation",!1,F),Y},Y.stop=function(q){return he()&&(q&&Z.push(q),r.postEvent("web_app_stop_device_orientation")),Y},Y})(),Vu=(function(){var o=!1,f=null,h=null,E=null,C=[],j=[],Z={};Object.defineProperty(Z,"isStarted",{get:function(){return o},enumerable:!0}),Object.defineProperty(Z,"x",{get:function(){return f},enumerable:!0}),Object.defineProperty(Z,"y",{get:function(){return h},enumerable:!0}),Object.defineProperty(Z,"z",{get:function(){return E},enumerable:!0}),r.onEvent("gyroscope_started",Y),r.onEvent("gyroscope_stopped",be),r.onEvent("gyroscope_changed",J),r.onEvent("gyroscope_failed",me);function Y(he,q){if(o=!0,C.length>0){for(var Q=0;Q0){for(var Q=0;Q0){for(var Q=0;Q1e3?console.warn("[Telegram.WebApp] Gyroscope refresh_rate is invalid",F):Q.refresh_rate=F,q&&C.push(q),r.postEvent("web_app_start_gyroscope",!1,Q),Z},Z.stop=function(he){return ze()&&(he&&j.push(he),r.postEvent("web_app_stop_gyroscope")),Z},Z})(),Fl={};function Ol(o,f){if(f.slug&&Fl[f.slug]){var h=Fl[f.slug];delete Fl[f.slug],h.callback&&h.callback(f.status),G("invoiceClosed",{url:h.url,status:f.status})}}var yt=!1;function Qu(o,f){if(yt){var h=yt;yt=!1;var E=null;typeof f.button_id<"u"&&(E=f.button_id),h.callback&&h.callback(E),G("popupClosed",{button_id:E})}}var pl=!1;function Wu(o,f){if(pl){var h=pl,E=null;typeof f.data<"u"&&(E=f.data),h.callback&&h.callback(E)&&(pl=!1,r.postEvent("web_app_close_scan_qr_popup",!1)),G("qrTextReceived",{data:E})}}function rc(o,f){pl=!1,G("scanQrPopupClosed")}function la(o,f){if(f.req_id&&Ve[f.req_id]){var h=Ve[f.req_id];delete Ve[f.req_id];var E=null;typeof f.data<"u"&&(E=f.data),h.callback&&h.callback(E),G("clipboardTextReceived",{data:E})}}var ml=!1;function al(o,f){if(ml){var h=ml;ml=!1,h.callback&&h.callback(f.status=="allowed"),G("writeAccessRequested",{status:f.status})}}function Ct(o,f){var h,E,C=0,j=function(){Ya("getRequestedContact",{},function(Y,be){be&&be.length?(clearTimeout(E),o(be)):(C+=50,h=setTimeout(j,C))})},Z=function(){clearTimeout(h),o("")};E=setTimeout(Z,f),j()}var $l=!1;function fc(o,f){if($l){var h=$l;$l=!1;var E=f.status=="sent",C={status:f.status};E?Ct(function(j){if(j&&j.length){C.response=j,C.responseUnsafe=O.urlParseQueryString(j);for(var Z in C.responseUnsafe){var Y=C.responseUnsafe[Z];try{(Y.substr(0,1)=="{"&&Y.substr(-1)=="}"||Y.substr(0,1)=="["&&Y.substr(-1)=="]")&&(C.responseUnsafe[Z]=JSON.parse(Y))}catch{}}}h.callback&&h.callback(E,C),G("contactRequested",C)},3e3):(h.callback&&h.callback(E,C),G("contactRequested",C))}}var Cl=!1;function Xu(o,f){if(Cl){var h=Cl;Cl=!1;var E=f.status=="downloading";h.callback&&h.callback(E),G("fileDownloadRequested",{status:E?"downloading":"cancelled"})}}function na(o,f){if(f.req_id&&Ve[f.req_id]){var h=Ve[f.req_id];delete Ve[f.req_id];var E=null,C=null;typeof f.result<"u"&&(E=f.result),typeof f.error<"u"&&(C=f.error),h.callback&&h.callback(C,E)}}function Ya(o,f,h){if(!ce("6.9"))throw console.error("[Telegram.WebApp] Method invokeCustomMethod is not supported in version "+S),Error("WebAppMethodUnsupported");var E=Xe(16),C={req_id:E,method:o,params:f||{}};Ve[E]={callback:h},r.postEvent("web_app_invoke_custom_method",!1,C)}window.Telegram||(window.Telegram={}),Object.defineProperty(v,"initData",{get:function(){return N},enumerable:!0}),Object.defineProperty(v,"initDataUnsafe",{get:function(){return I},enumerable:!0}),Object.defineProperty(v,"version",{get:function(){return S},enumerable:!0}),Object.defineProperty(v,"platform",{get:function(){return ae},enumerable:!0}),Object.defineProperty(v,"colorScheme",{get:function(){return H},enumerable:!0}),Object.defineProperty(v,"themeParams",{get:function(){return W},enumerable:!0}),Object.defineProperty(v,"isExpanded",{get:function(){return Jn},enumerable:!0}),Object.defineProperty(v,"viewportHeight",{get:function(){return(ll===!1?window.innerHeight:ll)-Fe},enumerable:!0}),Object.defineProperty(v,"viewportStableHeight",{get:function(){return(fl===!1?window.innerHeight:fl)-Fe},enumerable:!0}),Object.defineProperty(v,"safeAreaInset",{get:function(){return dt},enumerable:!0}),Object.defineProperty(v,"contentSafeAreaInset",{get:function(){return Rt},enumerable:!0}),Object.defineProperty(v,"isClosingConfirmationEnabled",{set:function(o){Da(o)},get:function(){return $n},enumerable:!0}),Object.defineProperty(v,"isVerticalSwipesEnabled",{set:function(o){Ra(o)},get:function(){return Tn},enumerable:!0}),Object.defineProperty(v,"isFullscreen",{get:function(){return _e},enumerable:!0}),Object.defineProperty(v,"isOrientationLocked",{set:function(o){St(o)},get:function(){return Ke},enumerable:!0}),Object.defineProperty(v,"isActive",{get:function(){return ee},enumerable:!0}),Object.defineProperty(v,"headerColor",{set:function(o){cc(o)},get:function(){return At()},enumerable:!0}),Object.defineProperty(v,"backgroundColor",{set:function(o){In(o)},get:function(){return zn()},enumerable:!0}),Object.defineProperty(v,"bottomBarColor",{set:function(o){ju(o)},get:function(){return Mn()},enumerable:!0}),Object.defineProperty(v,"BackButton",{value:Ga,enumerable:!0}),Object.defineProperty(v,"MainButton",{value:oc,enumerable:!0}),Object.defineProperty(v,"SecondaryButton",{value:Yu,enumerable:!0}),Object.defineProperty(v,"SettingsButton",{value:Zl,enumerable:!0}),Object.defineProperty(v,"HapticFeedback",{value:La,enumerable:!0}),Object.defineProperty(v,"CloudStorage",{value:kl,enumerable:!0}),Object.defineProperty(v,"BiometricManager",{value:Kl,enumerable:!0}),Object.defineProperty(v,"Accelerometer",{value:Jl,enumerable:!0}),Object.defineProperty(v,"DeviceOrientation",{value:nt,enumerable:!0}),Object.defineProperty(v,"Gyroscope",{value:Vu,enumerable:!0}),Object.defineProperty(v,"LocationManager",{value:xn,enumerable:!0}),v.isVersionAtLeast=function(o){return ce(o)},v.setHeaderColor=function(o){v.headerColor=o},v.setBackgroundColor=function(o){v.backgroundColor=o},v.setBottomBarColor=function(o){v.bottomBarColor=o},v.enableClosingConfirmation=function(){v.isClosingConfirmationEnabled=!0},v.disableClosingConfirmation=function(){v.isClosingConfirmationEnabled=!1},v.enableVerticalSwipes=function(){v.isVerticalSwipesEnabled=!0},v.disableVerticalSwipes=function(){v.isVerticalSwipesEnabled=!1},v.lockOrientation=function(){v.isOrientationLocked=!0},v.unlockOrientation=function(){v.isOrientationLocked=!1},v.requestFullscreen=function(){if(!ce("8.0"))throw console.error("[Telegram.WebApp] Method requestFullscreen is not supported in version "+S),Error("WebAppMethodUnsupported");r.postEvent("web_app_request_fullscreen")},v.exitFullscreen=function(){if(!ce("8.0"))throw console.error("[Telegram.WebApp] Method exitFullscreen is not supported in version "+S),Error("WebAppMethodUnsupported");r.postEvent("web_app_exit_fullscreen")},v.addToHomeScreen=function(){if(!ce("8.0"))throw console.error("[Telegram.WebApp] Method addToHomeScreen is not supported in version "+S),Error("WebAppMethodUnsupported");r.postEvent("web_app_add_to_home_screen")},v.checkHomeScreenStatus=function(o){if(!ce("8.0"))throw console.error("[Telegram.WebApp] Method checkHomeScreenStatus is not supported in version "+S),Error("WebAppMethodUnsupported");o&&On.push(o),r.postEvent("web_app_check_home_screen")},v.onEvent=function(o,f){m(o,f)},v.offEvent=function(o,f){B(o,f)},v.sendData=function(o){if(!o||!o.length)throw console.error("[Telegram.WebApp] Data is required",o),Error("WebAppDataInvalid");if(qa(o)>4096)throw console.error("[Telegram.WebApp] Data is too long",o),Error("WebAppDataInvalid");r.postEvent("web_app_data_send",!1,{data:o})},v.switchInlineQuery=function(o,f){if(!ce("6.6"))throw console.error("[Telegram.WebApp] Method switchInlineQuery is not supported in version "+S),Error("WebAppMethodUnsupported");if(!b.tgWebAppBotInline)throw console.error("[Telegram.WebApp] Inline mode is disabled for this bot. Read more about inline mode: https://core.telegram.org/bots/inline"),Error("WebAppInlineModeDisabled");if(o=o||"",o.length>256)throw console.error("[Telegram.WebApp] Inline query is too long",o),Error("WebAppInlineQueryInvalid");var h=[];if(f){if(!Array.isArray(f))throw console.error("[Telegram.WebApp] Choose chat types should be an array",f),Error("WebAppInlineChooseChatTypesInvalid");for(var E={users:1,bots:1,groups:1,channels:1},C=0;C64)throw console.error("[Telegram.WebApp] Popup title is too long",h),Error("WebAppPopupParamInvalid");h.length>0&&(j.title=h)}if(typeof o.message<"u"&&(E=ve(o.message)),!E.length)throw console.error("[Telegram.WebApp] Popup message is required",o.message),Error("WebAppPopupParamInvalid");if(E.length>256)throw console.error("[Telegram.WebApp] Popup message is too long",E),Error("WebAppPopupParamInvalid");if(j.message=E,typeof o.buttons<"u"){if(!Array.isArray(o.buttons))throw console.error("[Telegram.WebApp] Popup buttons should be an array",o.buttons),Error("WebAppPopupParamInvalid");for(var Z=0;Z64))throw console.error("[Telegram.WebApp] Popup button id is too long",J),Error("WebAppPopupParamInvalid");be.id=J;var me=Y.type;if(typeof me>"u"&&(me="default"),be.type=me,!(me=="ok"||me=="close"||me=="cancel"))if(me=="default"||me=="destructive"){var ze="";if(typeof Y.text<"u"&&(ze=ve(Y.text)),!ze.length)throw console.error("[Telegram.WebApp] Popup button text is required for type "+me,Y.text),Error("WebAppPopupParamInvalid");if(ze.length>64)throw console.error("[Telegram.WebApp] Popup button text is too long",ze),Error("WebAppPopupParamInvalid");be.text=ze}else throw console.error("[Telegram.WebApp] Popup button type is invalid",me),Error("WebAppPopupParamInvalid");C.push(be)}}else C.push({id:"",type:"close"});if(C.length<1)throw console.error("[Telegram.WebApp] Popup should have at least one button"),Error("WebAppPopupParamInvalid");if(C.length>3)throw console.error("[Telegram.WebApp] Popup should not have more than 3 buttons"),Error("WebAppPopupParamInvalid");j.buttons=C,yt={callback:f},r.postEvent("web_app_open_popup",!1,j)},v.showAlert=function(o,f){v.showPopup({message:o},f?function(){f()}:null)},v.showConfirm=function(o,f){v.showPopup({message:o,buttons:[{type:"ok",id:"ok"},{type:"cancel"}]},f?function(h){f(h=="ok")}:null)},v.showScanQrPopup=function(o,f){if(!ce("6.4"))throw console.error("[Telegram.WebApp] Method showScanQrPopup is not supported in version "+S),Error("WebAppMethodUnsupported");if(pl)throw console.error("[Telegram.WebApp] Popup is already opened"),Error("WebAppScanQrPopupOpened");var h="",E={};if(typeof o.text<"u"){if(h=ve(o.text),h.length>64)throw console.error("[Telegram.WebApp] Scan QR popup text is too long",h),Error("WebAppScanQrPopupParamInvalid");h.length>0&&(E.text=h)}pl={callback:f},r.postEvent("web_app_open_scan_qr_popup",!1,E)},v.closeScanQrPopup=function(){if(!ce("6.4"))throw console.error("[Telegram.WebApp] Method closeScanQrPopup is not supported in version "+S),Error("WebAppMethodUnsupported");pl=!1,r.postEvent("web_app_close_scan_qr_popup",!1)},v.readTextFromClipboard=function(o){if(!ce("6.4"))throw console.error("[Telegram.WebApp] Method readTextFromClipboard is not supported in version "+S),Error("WebAppMethodUnsupported");var f=Xe(16),h={req_id:f};Ve[f]={callback:o},r.postEvent("web_app_read_text_from_clipboard",!1,h)},v.requestWriteAccess=function(o){if(!ce("6.9"))throw console.error("[Telegram.WebApp] Method requestWriteAccess is not supported in version "+S),Error("WebAppMethodUnsupported");if(ml)throw console.error("[Telegram.WebApp] Write access is already requested"),Error("WebAppWriteAccessRequested");ml={callback:o},r.postEvent("web_app_request_write_access")},v.requestContact=function(o){if(!ce("6.9"))throw console.error("[Telegram.WebApp] Method requestContact is not supported in version "+S),Error("WebAppMethodUnsupported");if($l)throw console.error("[Telegram.WebApp] Contact is already requested"),Error("WebAppContactRequested");$l={callback:o},r.postEvent("web_app_request_phone")},v.downloadFile=function(o,f){if(!ce("8.0"))throw console.error("[Telegram.WebApp] Method downloadFile is not supported in version "+S),Error("WebAppMethodUnsupported");if(Cl)throw console.error("[Telegram.WebApp] Popup is already opened"),Error("WebAppDownloadFilePopupOpened");var h=document.createElement("A"),E={};if(!o||!o.url||!o.url.length)throw console.error("[Telegram.WebApp] Url is required"),Error("WebAppDownloadFileParamInvalid");if(h.href=o.url,h.protocol!="https:")throw console.error("[Telegram.WebApp] Url protocol is not supported",url),Error("WebAppDownloadFileParamInvalid");if(E.url=h.href,!o||!o.file_name||!o.file_name.length)throw console.error("[Telegram.WebApp] File name is required"),Error("WebAppDownloadFileParamInvalid");E.file_name=o.file_name,Cl={callback:f},r.postEvent("web_app_request_file_download",!1,E)},v.shareToStory=function(o,f){if(f=f||{},!ce("7.8"))throw console.error("[Telegram.WebApp] Method shareToStory is not supported in version "+S),Error("WebAppMethodUnsupported");var h=document.createElement("A");if(h.href=o,h.protocol!="http:"&&h.protocol!="https:")throw console.error("[Telegram.WebApp] Media url protocol is not supported",url),Error("WebAppMediaUrlInvalid");var E={};if(E.media_url=h.href,typeof f.text<"u"){var C=ve(f.text);if(C.length>2048)throw console.error("[Telegram.WebApp] Text is too long",C),Error("WebAppShareToStoryParamInvalid");C.length>0&&(E.text=C)}if(typeof f.widget_link<"u"){if(f.widget_link=f.widget_link||{},h.href=f.widget_link.url,h.protocol!="http:"&&h.protocol!="https:")throw console.error("[Telegram.WebApp] Link protocol is not supported",url),Error("WebAppShareToStoryParamInvalid");var j={url:h.href};if(typeof f.widget_link.name<"u"){var Z=ve(f.widget_link.name);if(Z.length>48)throw console.error("[Telegram.WebApp] Link name is too long",Z),Error("WebAppShareToStoryParamInvalid");Z.length>0&&(j.name=Z)}E.widget_link=j}r.postEvent("web_app_share_to_story",!1,E)},v.shareMessage=function(o,f){if(!ce("8.0"))throw console.error("[Telegram.WebApp] Method shareMessage is not supported in version "+S),Error("WebAppMethodUnsupported");if(jt)throw console.error("[Telegram.WebApp] Share message is already opened"),Error("WebAppShareMessageOpened");jt={callback:f},r.postEvent("web_app_send_prepared_message",!1,{id:o})},v.setEmojiStatus=function(o,f,h){if(f=f||{},!ce("8.0"))throw console.error("[Telegram.WebApp] Method setEmojiStatus is not supported in version "+S),Error("WebAppMethodUnsupported");var E={};if(E.custom_emoji_id=o,typeof f.duration<"u"&&(E.duration=f.duration),sl)throw console.error("[Telegram.WebApp] Emoji status is already requested"),Error("WebAppEmojiStatusRequested");sl={callback:h},r.postEvent("web_app_set_emoji_status",!1,E)},v.requestEmojiStatusAccess=function(o){if(!ce("8.0"))throw console.error("[Telegram.WebApp] Method requestEmojiStatusAccess is not supported in version "+S),Error("WebAppMethodUnsupported");if(ot)throw console.error("[Telegram.WebApp] Emoji status permission is already requested"),Error("WebAppEmojiStatusAccessRequested");ot={callback:o},r.postEvent("web_app_request_emoji_status_access")},v.invokeCustomMethod=function(o,f,h){Ya(o,f,h)},v.ready=function(){r.postEvent("web_app_ready")},v.expand=function(){r.postEvent("web_app_expand")},v.close=function(o){o=o||{};var f={};ce("7.6")&&o.return_back&&(f.return_back=!0),r.postEvent("web_app_close",!1,f)},window.Telegram.WebApp=v,Ql(),Wl(),El(),Fn(),b.tgWebAppShowSettings&&Zl.show(),window.addEventListener("resize",Zt),s&&document.addEventListener("click",ne),r.onEvent("theme_changed",Xt),r.onEvent("viewport_changed",Al),r.onEvent("safe_area_changed",Dt),r.onEvent("content_safe_area_changed",M),r.onEvent("visibility_changed",R),r.onEvent("invoice_closed",Ol),r.onEvent("popup_closed",Qu),r.onEvent("qr_text_received",Wu),r.onEvent("scan_qr_popup_closed",rc),r.onEvent("clipboard_text_received",la),r.onEvent("write_access_requested",al),r.onEvent("phone_requested",fc),r.onEvent("file_download_requested",Xu),r.onEvent("custom_method_invoked",na),r.onEvent("fullscreen_changed",nc),r.onEvent("fullscreen_failed",ac),r.onEvent("home_screen_added",Hu),r.onEvent("home_screen_checked",wu),r.onEvent("prepared_message_sent",uc),r.onEvent("prepared_message_failed",Du),r.onEvent("emoji_status_set",ic),r.onEvent("emoji_status_failed",Cn),r.onEvent("emoji_status_access_requested",dl),r.postEvent("web_app_request_theme"),r.postEvent("web_app_request_viewport"),r.postEvent("web_app_request_safe_area"),r.postEvent("web_app_request_content_safe_area")})()),uh}var ch;function Um(){if(ch)return Bu;ch=1,Object.defineProperty(Bu,"__esModule",{value:!0}),Bu.WebApp=void 0,Bm();var O=window;return Bu.WebApp=O.Telegram.WebApp,Bu}var oh;function Nm(){if(oh)return ec;oh=1,Object.defineProperty(ec,"__esModule",{value:!0});var O=Um();return ec.default=O.WebApp,ec}var Hm=Nm();const Ha=dm(Hm),wm=()=>{const{createRoom:O,joinRoom:r}=br(),[b,s]=gt.useState(""),[v,N]=gt.useState(""),[I,W]=gt.useState("create");gt.useEffect(()=>{Ha.initDataUnsafe?.user?.first_name&&s(Ha.initDataUnsafe.user.first_name)},[]);const H=()=>{b&&O(b,Ha.initDataUnsafe?.user?.id?.toString())},S=()=>{!b||!v||r(v,b,Ha.initDataUnsafe?.user?.id?.toString())};return P.jsxs("div",{className:"flex flex-col items-center justify-center min-h-screen p-4 space-y-8",children:[P.jsx("h1",{className:"text-4xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-blue-400 to-purple-600",children:"Alias"}),P.jsxs("div",{className:"w-full max-w-sm bg-gray-800/50 backdrop-blur-md rounded-2xl p-6 shadow-xl border border-gray-700",children:[P.jsxs("div",{className:"flex space-x-2 mb-6 bg-gray-900/50 p-1 rounded-lg",children:[P.jsx("button",{onClick:()=>W("create"),className:`flex-1 py-2 rounded-md text-sm font-medium transition-all ${I==="create"?"bg-blue-600 text-white shadow-lg":"text-gray-400 hover:text-white"}`,children:"Создать"}),P.jsx("button",{onClick:()=>W("join"),className:`flex-1 py-2 rounded-md text-sm font-medium transition-all ${I==="join"?"bg-blue-600 text-white shadow-lg":"text-gray-400 hover:text-white"}`,children:"Войти"})]}),P.jsxs("div",{className:"space-y-4",children:[P.jsxs("div",{children:[P.jsx("label",{className:"block text-xs font-medium text-gray-400 mb-1 ml-1",children:"Твое имя"}),P.jsx("input",{type:"text",value:b,onChange:ae=>s(ae.target.value),placeholder:"Введите имя...",className:"w-full px-4 py-3 bg-gray-900 border border-gray-700 rounded-xl focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition-all text-white placeholder-gray-600"})]}),I==="join"&&P.jsxs("div",{children:[P.jsx("label",{className:"block text-xs font-medium text-gray-400 mb-1 ml-1",children:"Номер комнаты"}),P.jsx("input",{type:"number",value:v,onChange:ae=>N(ae.target.value),placeholder:"1234",className:"w-full px-4 py-3 bg-gray-900 border border-gray-700 rounded-xl focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition-all text-white placeholder-gray-600 font-mono tracking-widest text-center text-lg"})]}),P.jsx("button",{onClick:I==="create"?H:S,className:"w-full py-3 mt-2 bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-500 hover:to-blue-600 text-white font-bold rounded-xl shadow-lg transform transition-all active:scale-95",children:I==="create"?"Создать комнату":"Присоединиться"})]})]})]})},Dm=()=>{const{room:O,currentPlayer:r,joinTeam:b}=br();if(!O)return null;const s=N=>{const I=O.teams.find(H=>H.id===N.id)?.playerIds.map(H=>O.players[H])||[],W=r?.teamId===N.id;return P.jsxs("div",{className:"flex-1 min-w-[45%] bg-gray-800/50 rounded-xl p-4 border border-gray-700 flex flex-col",children:[P.jsxs("div",{className:"flex justify-between items-center mb-3",children:[P.jsx("h3",{className:"font-bold text-lg text-white",children:N.name}),!W&&P.jsx("button",{onClick:()=>b(N.id),className:"text-xs px-3 py-1 bg-gray-700 hover:bg-gray-600 rounded-full transition-colors",children:"Войти"})]}),P.jsxs("div",{className:"flex-1 space-y-2",children:[I.map(H=>P.jsxs("div",{className:"flex items-center space-x-2 bg-gray-900/60 p-2 rounded-lg",children:[P.jsx("div",{className:"w-8 h-8 bg-gradient-to-br from-blue-500 to-purple-500 rounded-full flex items-center justify-center text-xs font-bold",children:H.name.substring(0,2).toUpperCase()}),P.jsx("span",{className:"text-sm truncate",children:H.name}),H.host&&P.jsx("span",{className:"text-xs text-yellow-500",children:"👑"})]},H.sessionId)),I.length===0&&P.jsx("div",{className:"text-center text-gray-500 text-sm py-4",children:"Пусто"})]})]},N.id)},v=Object.values(O.players).filter(N=>!N.teamId);return P.jsxs("div",{className:"flex flex-col h-screen p-4 bg-gray-900 text-white",children:[P.jsxs("header",{className:"flex justify-between items-center mb-6",children:[P.jsxs("div",{children:[P.jsxs("h2",{className:"text-xl font-bold",children:["Комната #",O.roomId]}),P.jsx("p",{className:"text-xs text-gray-400",children:"Ожидание игроков..."})]}),P.jsxs("div",{className:"bg-gray-800 px-3 py-1 rounded-full text-xs font-mono",children:[Object.keys(O.players).length," Online"]})]}),v.length>0&&P.jsxs("div",{className:"mb-6",children:[P.jsx("h4",{className:"text-xs text-gray-400 uppercase mb-2 ml-1",children:"Без команды"}),P.jsx("div",{className:"flex flex-wrap gap-2",children:v.map(N=>P.jsx("div",{className:"bg-gray-800 px-3 py-1.5 rounded-full text-sm border border-gray-700",children:N.name},N.sessionId))})]}),P.jsx("div",{className:"flex gap-4 mb-auto",children:O.teams.map(s)}),r?.host?P.jsxs("div",{className:"mt-4 p-4 bg-gray-800 rounded-t-2xl -mx-4 space-y-4 shadow-2xl border-t border-gray-700",children:[P.jsxs("div",{className:"flex justify-between items-center",children:[P.jsx("span",{className:"text-sm text-gray-400",children:"Сложность"}),P.jsxs("select",{className:"bg-gray-900 border border-gray-700 rounded px-2 py-1 text-sm outline-none",children:[P.jsx("option",{children:"EASY"}),P.jsx("option",{children:"MEDIUM"}),P.jsx("option",{children:"HARD"})]})]}),P.jsx("button",{className:"w-full py-4 bg-green-600 hover:bg-green-500 text-white font-bold rounded-xl text-lg shadow-lg active:scale-95 transition-all",children:"Начать игру"})]}):P.jsx("div",{className:"mt-4 text-center text-gray-500 text-sm pb-4",children:"Ждем, пока хост начнет игру..."})]})},Rm={LOBBY:"LOBBY"};Ha.ready();Ha.expand();const jm=()=>{const{room:O,error:r}=br();return r?P.jsx("div",{className:"flex items-center justify-center h-screen text-red-500 p-4 text-center",children:P.jsxs("div",{children:[P.jsx("h2",{className:"text-xl font-bold mb-2",children:"Ошибка"}),P.jsx("p",{children:r}),P.jsx("button",{onClick:()=>window.location.reload(),className:"mt-4 text-blue-500 underline",children:"Перезагрузить"})]})}):O?O.state===Rm.LOBBY?P.jsx(Dm,{}):P.jsx("div",{className:"flex items-center justify-center h-screen text-white",children:"Game Started! (Coming soon)"}):P.jsx(wm,{})},qm=()=>P.jsx(xm,{children:P.jsx(jm,{})});Am.createRoot(document.getElementById("root")).render(P.jsx(gt.StrictMode,{children:P.jsx(qm,{})})); diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html new file mode 100644 index 0000000..6381f70 --- /dev/null +++ b/src/main/resources/static/index.html @@ -0,0 +1,14 @@ + + + + + + + frontend + + + + +
+ + diff --git a/src/main/resources/static/vite.svg b/src/main/resources/static/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/src/main/resources/static/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/target/classes/application.properties b/target/classes/application.properties new file mode 100644 index 0000000..ab3f9ff --- /dev/null +++ b/target/classes/application.properties @@ -0,0 +1,5 @@ +server.port=8080 + +telegram.bot.username=AliasSandersBot +telegram.bot.token=8352627995:AAEhidu-Qhp3Wx2ir7cVKe2GKuJmVVfcyuQ +telegram.webapp.url=https:/// diff --git a/target/classes/com/example/telegaapp/TelegaAppApplication.class b/target/classes/com/example/telegaapp/TelegaAppApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..6c066edc9ae5613e236ec975f769832083e515d7 GIT binary patch literal 758 zcma)4O;6iE5PcgG970+kd=zMV=q*GQd*c#7qLDb6wjwATdRm*sEVXy7^_udxdIE9a z2k@g%XAKfQ_)u#-4n4vu}7m{HqR9b#7vq;)AAImTZO)S!xu*%8{MhPvKc}(o$e=YDyc+W99qYY9fEv6Gy(&QahE& znJSbgKx^Zw;Sk7SBX8A2MCl9>SP>^*=ktw5RU>eWF9>LX{L=#SD@1aMZk#kD-5K41 z{jJ=~B)uDyvO==|5`Y0#>9&A1tP_Y&-mAcX?jRW5W8wTQ-)}2ur2;J0FuK^l2eNO{ U+aZQYwXjvmZG0r{%YFj>0c?xL#{d8T literal 0 HcmV?d00001 diff --git a/target/classes/com/example/telegaapp/bot/TelegramBot.class b/target/classes/com/example/telegaapp/bot/TelegramBot.class new file mode 100644 index 0000000000000000000000000000000000000000..f75492e1e2ff6a405bec4e3c7f5df139f1fda944 GIT binary patch literal 4110 zcmbtX>wgo+6+L6iT3Oy0V-gyr4@_{1ZLqhPM-m$dwgWBT2k|q8w9QHy%ZnwgvbzGC zGzlSX6H1acebYASyXor#{C-+b~7~DjT35Z2I=^Dz8F~vu@UQzU;QDx+ijwkUH^L#<=d}2Xh8y#%eLOFN+ z7|=0@!_1R=H_h8NZq{GfJsSaGJ63$Zc%xV-{=K-`QT#{oMn~~BUw4Y16mOT_*xONh zvvh@{o26?V#XJ1GUAkPlR=QGpyQBC?>2h(kxW?H+@nh<&7C+vpqCKW#2*V7N?gKzn zWx9+9m6~S->Ort0bLo{Oxe~WcCuvNo(dqJN%ygFWxhO_duD*<~XgI0TbxL6CT?7o< zc3PUO%=WIc8xvQS6L%vR)iH)~sxkOU=~|a$#f4JaknM_++Q%8z!grJRth6!YIOfWz z2AGZDdG50KK~JFkh ziW!_$Tsf@a1%bnLxV|Xks%L`kIGJ6ro7rPu)A4n@NRV=t=4YHVxnM(n*JY4kbg~d-gnfCyp9XF$bOT{GLctj$a9x?U%teNrUuj{y?0Ur~ta*$f!SuQWy&XN&l>l0Jk;9PN>}+srn3M@=U64FY4{fUQ6;24W2_q&w6Wloh z!VV|Or?Vh~hV$jC$^Lq}t!!K1A-~FFX0E)=wg72oOjR3CI^42gN{&6q_yf?ze6TOq zk4=Fi4>G83UzHxHJ#}fVb*buX5g6Z$!AffXN81KGKo60M2bQvyLr6!C&8GeoPHQ=y zM+cpT12IYB|KCon<>2(7@n}HiisMNa^*FefoY_~^U9ys^bjpi0**aX0r|QboZbc>O zsH#4%s3gV;4-s5}piDr~DLd~ZkVQjxvzo$NgDYi0Ycynj#~KsCV$^@@oi3!0q>o7lM_5d@11yy=QJq|VLq?Yn8CN; zyQ$|E#7%xQ;5&S(Y48evjZZyTfVc4uM*{ESyIiG|f6B<3_};�PQ;Z_-t=G{R zd~F{K-j5aVh2g#JodtaHIwCzg3)rh%HTtd|qciXpyA>UXam$_9#cg-;y13hS--8h4 zF?^5PX`s9n@8SE@rQ32y>gxyiAw&C-Z&mc;$NXp#l&TH!x*h~9-lblYva4(8pTC6z zJ9L^`b+$Zg*uLB@oW4B8vQ?s-{N=F{5>ryj0Efd!1byOyU_4&8jWb^ z4Qc4tFrwi+)ilg#I0vC&Ib12zdt5K@A&XoK%8&5M4Nh(Z<%#=(@{jjbzFez(`aa4H Q_>=GA&wh6)^n82Z(r9hBxtv)YTQnMV!- z8uB_WLuXi#e$xm%-*%e^K5vN==^q&Svp`+Hg+XxQ% zk%%Ua@CnY6?b>RYAyb~&%VP+`8VWkzzzD<8Gk(mCP}z>LySx5~A@7r#Y$c14@=Uc; zfG`eWRL50}G31o2sR$m!=$WL$-KLT3nge(f6B@4Rcnfbc6k=0}z-gdFixA0BF zV+uDJuEbC}9WrQ9td-*uqHb3AG?W?4UQ$}BDcSO(Q(3mhojj&78)cUuER=gA$IKo> zwjvvXVYq6$Vl!;jg}=k=4(*IorNx~+?%UD2y_t<@$S~iNpVER!nc5KQP&T%BL^~yX zvNG6+CM|NjOT1(FpNKWH99Y7v`H2&TJ6+vejErI6Bsi~_g{~GZ0!oF$71csLRDz;4{4d~?x-hgG zQKC{s5Z4YtAM4ECsdtvad!1&MURO@-JgGkumNJ*g;6Tl8x?F`mQRCPDAyNMk=tb$w z*JS8hV%3i5J$g=zq{+@jL8K_JxRxUWYCs8JHBbY)-AjGySjFd*0ADn1>PUWEt}AZC zlhg<(kB_?tFU15axdpiEO2w5eU21+*@@F=-W5fQb8I^BtlZs$X2GsHj52aLr^0}8l z4{~_SFtaI6iu<)98FeX_WNohaAP6X#bjIR&8(A!};eKr7v56-dwxS;SB}3^SX4&qs zJQD3TOd+GTxymgi{Zob?)2*#7m|#fgAC#(69)(`J_R>u>MYayb9b#-3@vl?zZE~hN zbK69PJ5J43f@rI+)3N=E!-F6yqM^>_sbQC4>a|05!>(bU;rhj*bT1|cMUk%i99=f7 zP>3#knq8vjGH%g$n`X;2Mmzc0Tfc$LzJT^~Eb~6S`@!g4#2mfH5-Av%rxnS^)~M6d zypN&py8^QK0C$jy&3;c~AAOp9iNWW%vY7n^;}h9ecn5fncYnw9(~0a0%=|v1KlemwMNjHaaEW#uZOJqlHOWmh`Jee5d zV1|@IY9NK^*ij%pB?q6yvj=!cV-^*xU@hLMV4cPs8LHCr1-5B*jf_RXihk21Tca@S JU=Lqm;&0O$y@vn* literal 0 HcmV?d00001 diff --git a/target/classes/com/example/telegaapp/config/WebSocketConfig$StompPrincipal.class b/target/classes/com/example/telegaapp/config/WebSocketConfig$StompPrincipal.class new file mode 100644 index 0000000000000000000000000000000000000000..e3425d639b5bc2a085fca000620178258bb946c5 GIT binary patch literal 723 zcmbtSO>Yx15Pg%cO_n7sC2fK7b>NT$RCC}K$|X_-QV5lT!r9plTbJGSYS%&VuRsDJ zao`8=qY$%hB|dsW96Zl&Jo7v=_V*uOzX3SFoe&K)1GFNv(IIS}>bF{@I#1M#)hWl0 z(0Ocfwh zIGYtmrO9Jc=#2yVvXA0Q}c6Y%bl2ta4`FiCMGhn=j=}G@sTd28^@(c1_`^l?`<#~ zT`ZLlF6_FD`OwtG4gQ+be%&{rJLk$hwUrBSlknhQiX=qO@|??Qs;i2np#Gnu$6a~G z1_+mBZPiaHpP}Y$YzS@&I}~gPhT|`w@%_&TKKhs|V*6-{-A4-wJv1gSn6e?ssuwuG6#m9>VqYPCl_72OATXB9T6h!J80JHv zt3lw(W^`&zgj#yha94=~c`8DN`v1k0=l}wAo#J4hgn8V++ZnuL;U;b|Y$O?bA{ut+ zH;;wxdzE{huOp?zIA6diu=4dERRER~e2jZpF)$?TLmHq3O#Xadif_8J3%V z#}=pDMAz2B6>Uzw@1q|GSdBQcu#&?(77TIkFsu}7<6N$k>Uq46Vg@A(i&$cCUd@FA zP)SxX%n(;Lxz`F0`LQqqS15*`i;3(U@?j{{Q=#nhSO0_7Ll=AR=X|7J2$N{_0Rvk! z9hdr&1!sD6pEBbLRd$AtsmxDMPt~2;PibaT�eV{0;0E8l-TSTC)ul@ENsM zd;p*03z{)}i3*)EmwzNdDe7-8P5z0@{zTz5XFpxYJHO)6-cmYVnxWYnduNiT2>_^c z&R~vUU5_-(#!`A3NFMId*9gOXIyuQ`V$?ps*FCjvPi?ucW6pVww^H~6^ZR7RyU+1n z3O)5@+FDLw2tWa8l6R9J+`=6cv4qkPi1GkL8C5(y15u?*X{=J4!W!18Hy=wI)PF<& aP5MvKe2Z*)MB@UD=czZpEpmPhxqkuaINV_X literal 0 HcmV?d00001 diff --git a/target/classes/com/example/telegaapp/controller/SocketController.class b/target/classes/com/example/telegaapp/controller/SocketController.class new file mode 100644 index 0000000000000000000000000000000000000000..d16a7f8fd164f16c7a4320d76d6f8240b7e0556e GIT binary patch literal 5234 zcmcIo`CA*;6+KTZ17c#Z5+|i;U4?*+05eIP#YVOhOznURm;k|z-EEK_Fff`CqY*LP z(l*`qz3H0n>E0%daYNd4`@a0puYXg%o;NcR5|SXa=?{|Lyt(hbd(K_nefrmH+phpP zi+{!uLz9MP9W7`TIOBTDMj`K6&hnCH=H!#Ew`SyIp$&^x&v)!*AUmy0bSsZ26Cag zX<8w0TS=X5(u_G@8JKRzA#`f!(s39Gfv!MLD6m=ZWlo^UE&2jSLQ5<+u)*hQY39;# z+=e3>Zr5>#vf_Bg%^C8#nakVK@TD!6O*5Z2vc7AKQQnuca=j=ERCfzO&e-Or^ptH0 z^4P88&A5|Da^{*GbDfOoU$OiZjtai%_yvJe{h=^VI2nU5xBR$r5V@pJ=eCSXUw^oHR+SzXhNW4nZB5l z-iDQ7xC~C#SHaL!0>+~|!iXM@X>Ga-K4`dHUR;$KKb=}=!`lT8MJ9)QGa@hI zQ4QldCRC{Q)pwan-Ak_JloMBlv|@N7n}9&K($c5Cj;Iir)^Qm#0&S~mN#N0|^^C5+ z*Fk+8$E-pyCy?Arp|T^v3jMe$Fbe|5>R42_Xq>}4bv%Kqq^{Z_EOeDRBAP4mw1W6| zvDQVzOV4w?LL1&gh03U;FwcTp;R>}Tqa$0YGwQXfGxuRh z$1+wTFQ{pO1BXs@I;0kq!c`q>u*0Jy^lE=4{*r7+K+(5s<8t1&T!+V00!?sqxX82a znLOk2EdH~NvV4!~#H0_(cA$Q#=w#Fe2CG-0n3En0kcWZ>Uq=xeOwS$Jk}0gl*3yh8 z3(}zp$p}CLbqe=&Y-)JFs@Wf?Iu}Fd@?7jsF`8BzVW~Ov(g!O!yZQoVu|V?}4;q2a zNz0Mb#oVIw=FLT$Gl@wzW7-R*XQ}6Cve{p;cx;|*P%ZZ&o4)o+M|GoWTMLkJy|SyB zIrqPTrqc>+i|Fc!tU_7QorLWRIazU4L($s+WmQq3v=>yRo;{^ijHl`IDe14c*%?zc zalZ7(W%q2+@vWR(unHE59(9<)riw(q8{G%$is@w4xoege8Bqr~#U@GhVgfB2rd^~z zH6yIj>^Q1-EE`j`^?s*WovmlgP1`lI+;e5G2(BnNZ$SJWZ$SI5Q-(&hh6gK)=bUe5 z*2qv0)Eb_t%EhqskT*k}I0E)wSaucAHvmtg7O76TCZ;%BVlx+6+K}~n?bSY!wd+Pv z*{rClao9FT{G6@ihY z7)m*mzjmr99%`eq)?7Mj@W2iYpbm7;#I{xzE-PwZQ#@R>yPR9@M zY!{yGY{m0&ynsJycu_SIH&}LdDw5@FxN9=HR}nEUFc-~??|Pd8&s3h5kzj~^Jg5qV z-bvS8E9TR+6|Q2YYT-PIts{P|LcWBgVk%NGX4>|g<;yf7-HhW;cuB*yj+gOgR-770 zlR^B@UUR7gsDl-8=jq@7e|URhuX-6WT1idS>wve)es4D=0{VpGNN>zG3yeDre`UJV za8l2E8vZVDbZ=3Xw$RnMi=lO$7vC5X>dMAZLfu#R+rrNJ0ele6_z<67g@#uC&JJxs zyaY{P`UTu_VsHz$ZsSeB7T)qQdY(`dy=qc4-^B5e=7AS6*xkH^dq-M0eCR|Xt)9+? zsfiY?zT*L)hEA%fG?`dNIAm_AR*_81p|;=mX9ImG2(%{%_fUNa0S<7Xz#_)}Rth2a3BI}#nsS~l+kk#-l4LurWJN9Sr+qDcX<2z9tJ5iCDL{AY>(;Q+Y`jDb*X8LL68-wm)D zWvqP>)_sHEd$kZ!_&$S6rNR_{n-ntxH}T}a;0+884Bfy(J0`XU+a3;FkPJo3W_1Qx zrsB0T$g^09PXk??=<158GEW6+r%PNM<8MNR0@(@UgM%wOo2kG3fJgYp*=Vrg?cs{@ zhKazJ>^bp6%Ej=bAm){cKj!mK_&LgVf8g^^gYTaQ-@hQ~P52dlgWuyXl!^2GEBG7! Hf$skRGi3a; literal 0 HcmV?d00001 diff --git a/target/classes/com/example/telegaapp/controller/WebAppController.class b/target/classes/com/example/telegaapp/controller/WebAppController.class new file mode 100644 index 0000000000000000000000000000000000000000..ba5e651fa2a4c55dba0a31d320a104e32fad4b41 GIT binary patch literal 2012 zcmb7FZF3tn5PoFGIma<^aGSKDw76|r@&Y+Zn*wnNBra(KPMe84>4y|%eWRSHmQbZ1; z43jVTA-7%bckCz47s4?NqpQ-FW{n{`H@}xhp5a1U=_9UNE4K7o;^k7;c$Nd5>MI; zx99p0sUWNKsUw0Ui)xwjn=axKE;C&6_<^V?-{Iz&G+mNH!+jH;0ZS~0fEDl_u2^`# zh^x3p1PsZ6LJZ=JT%VFmhj@ZY+*KH^Jm7{`v~Ywx6s<}aIgSX!cI3Lp*Dc&&xZ^0# z7B9IMxWYEV6&=olz;={xv~pdc?PsF79t4y`a=PmO)Fea+g*4z_EN*~xqqG>m&m27^hYd;iboAQn;$&l+6pJBrODd48Nvj4;LrSBJh zW*AS1j7epDpvHtSyMFR!_OqZ<$kFhUr1Fj)N1zmIqZ=-)^?lN&nhZ*C_1C zZDG2qwZr2~jnG8ESVMMvZX!*^**X*MIdO-QzI<+CcT|{ScHHKHw8N0^dp($7Jn*!TO0`z=?5vvs8oqM({;qvX{{oeUU0 zrId!K@2B*WMohO$0#W0x+mJ>O5ydUv7rN&1FchJMZy9dAmD8|LEz}vV{kJN8I{JCx zI{h;A9s^m>ZN@0gH)&_n%4p3k{0a6O2^q}N9RCdzajQ4?6mT0K(vD#c^Q09Uf1DU+ z%hs>7O`DcerrE@FfpjLwWRb>4`(R-YV2NVL_28ZpLL6iHcZ@Cmh0-fb0e@ho{6UPK z?FANpEP=}?VW#I{x^IzqAX|KbJB0r!X%%VhpWG$s9?3aIe*?=jGPsX8pfX9Hod)zd uzM!)e8dl6pm4p$j(ww0$b*vr}vqtMzH1Z^G(D)jUXjdR<3*TWIGyekC`z{>- literal 0 HcmV?d00001 diff --git a/target/classes/com/example/telegaapp/dto/CreateRequest.class b/target/classes/com/example/telegaapp/dto/CreateRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..1700feed6160a070c35fad87d492b119bc480f7e GIT binary patch literal 2243 zcma)7T~ixX7=BK&n_a>JDHhrYR%)pwd^A?8wh5q?LZJdOrQ(dBJnO-=0Q)m1Q{tPdz^*Os6NJ_@(B-!(x_q-p^`@HYj{Q2+GUjfWvJ&P35 z77Pa_G6K0r@`)_Evc6mVZ2OU_gaVn_TD=y|3#2CsTRpJRV-^l%j ztBRp=)vlC{MsX+fiVMDyp?aVmH&wtW*@i0*l)o)@o`hS0z(sR-Z98>;Y)2iMA$kVf?&l=UzWxYZ6g$$l137l;BzoNHjUR#)rI{cYtxl-q8^pjVOZmh@|S zpD2y6T4TP#>MM4oOsaxTsyfI`uokvB7i%i4dOI7^X9Gj!GffX&V}=BT*V)vhEdr(& zR+TR>prMVo&p<9Z=}`4XMsf26oY5`gHZQIVmwEeAyih5A_;QIPz7DwdfP;h#pKo(ljxgDaO!Mzb>{1!i*w)0&URPlDNHkk&RmKLBhJaGpJ8>! zJxm*2NsL=dnh1dzYE4cza@<_+9LJmYB`4UV}{>{~5w(8X6_b`p4so!CL z2Qz&%^&9N9>B(c{qAi8<>(hLcjF~^sn>U`}+##Hqym5?+EsK$oNt2OMCU0t+%rgug zqAzdeGc6a zHH_eWN*R2>_+$LXvj0K91^YRMEu{Fh#dBPY#hw!~iX_9(|2GL4x0zBm#MCTkr0v5J zBaJ&|o**@ePa{n_b|a#fe;rimA^3|SOs=I|dDfVVNF2?TtEAA*O&!9TImV^0wSJ^z z=!3kGoY}DJ_fsw|C{M=$rlQi6>ltPxUO8lj9h4WmdWJKiLhw*|6gX9Q7 zLLkHo8lCP_S}_E(Wze!QI#o1dzS)zzqI2pC*{_S#1wF-Ez{{7W{kry_pr4DVp2tUA VZAQ7n-^WJjy3K~&4ZK<=)*FUziMZk2D|x$D$J0b{n&Y=oBtvJ;cH24G>p#Gs8K*aD~P-fr1>Aa`4? zQw|;1*^;u=DsP5f`MTF=t~&SHPM~7=p0``u6v!|3E?5iwMsusGLLRa)qT&sauy|UR$~XqZ6s1G3x5%*UI>~jRM{j7}#>c z)dazjiOH0Cf zM;04RXSuz5$MM(Y9hZ3Wi(Xy2x1`@t`$VaQ+YKT(v-n!&tdh{6N9Z2<6Wo)x*h))I zxb1DONT1aV9iJBr)2+v2942N@KzMt*BPpbS?uFZqFEFG)7CVh(N80XoBs%PM53i36 z(yBN@+)DyUgwA$&EtK`0CD}?i(N|V$OIL`irrOsD+AjOp>|QujOh-10oiJAD#T>Ai z*Sxl0cNQ9o_gv~doK_}i2B9xoF;jts8v-*a!-+WCIWc{zcbnS9x6O&k5d%wu zSjJ5gE2_i36e#vySfhF0+i}V0|y)%D(eFQ>rAyymZ~QM(D7+>{_$w`17s|0w*xB&N*`+r+!dPuQm1keu>Ox_*KVL;w-;* zBA4+#cR~#xe)l^63iD?kX3%ps`#N*-^l={E?`-vT=5XrcoZIg_(AW6`oFhI3yTVm* zWK5NQgV{gnqp=0~QAsO86q^DcQr7uwk>lp0{vn57H>4^|H{?hZ^5gy?bFUjx)wmln zABE)nj}sRcxehRaN2RHspleS`f5Q3^diF`_4_HgnQ%~_mw54!td77V!HuD#T3fc=C zehho2pgqNjj>T9-r^#5wDCo+@c!B(53>Wl*kun;um^2!%SOrrVS&5NZusTNC69USn z`X+9=Z)2cc{vY8yE-VGGV>MQ4<;dSmGs)$KpU*?3DdH3Dwk}>X=a8FDS7i6q72E z^aF?!i5p4pCZZF*N+fBdi&2UA_mwL4rZ~$G1_N#6sNd+@Aw3loG{tdhFV2}j2YE>p^25H~PS z)LH&}a1LKk(n#bnT%n{#WPT6h6%`uE6oLdoh*vc4?K4U-3cX{{vC;Ob5;G%Z*0bEN zr7>YHbcez$Z&YI|uV_;g@pt?=CV>4DB0bph-Ndg(1-ynDSBsGr`FovofCLDvVFR~O F_z%UV@ZbOd literal 0 HcmV?d00001 diff --git a/target/classes/com/example/telegaapp/dto/TeamJoinRequest.class b/target/classes/com/example/telegaapp/dto/TeamJoinRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..6bf9fb4bf93e99552964c319d928dc5993f5e303 GIT binary patch literal 2223 zcma)7UsD@Z6#w01H@k!dQUuxvRw`5pfyQdpHi4?8P=WzFz~GF&cuDS%Et}nR_oidN ziQ@;57anv*ai$NBzSJ2%gCE03Ydv>&6Bfugog{nDJ@@?io!>ck^XI?Meg&|Mtt?VV z8_+E1$S~v{@h80GaQC3}`TiqOmkgOD+qLCghV)!vZvZ9+3}h_~!eS`Yy;ezl!&_}f zl%#OP0q5;@sUf}6uHdZ=&vv)P1Huc%$pDz$*wTylG(?*9bzB2hA0)AwnLiqr~2fg;`u@xZL80V#RaoTz+9o zGI9gST^TUkPJ)fIU&PY~B7+v?8mZZ?*y^N-3*qltj>RXr_!_EMvCoXi6_CfFZl% zb^N+mvlVe;3Up#3Z>TAx3h#NI45ZK7QK^B6PZ?&;8P7!}EVG5_D9Y9RLjvGW2|#b|qRFt@`{gU_XXt@6b~nlM-|Ev|_n{dD=1c z4xr~*=bvEwK!+)uIvahR=>^codFZ^e+1I&<1xleZm&3vc=X~*J82xcikd3M&!mT7l z1j8a}b-Fmn(dI_~kVCH;QgPY~ITD7X*ItbBZ(0q?)-29{4_!Mh{tojy=;`C)Z!k9( z=1-6dw2nL zDOWntf~bG%5r!TQO=|kP1bQ4hxJf-t(apM#_ehtf-Cev-l7g&k`nA$emNj*d*WwdX z5lcr?{Rz7jMU7#k@ezG)Q%;>|xIqD;E%ok-%Be2ouqsj&^bBtS=Pyn2x(@fyFNaj$#mBUo6y+ZM QKEXQevLsdU88tZn9~!x;=>Px# literal 0 HcmV?d00001 diff --git a/target/classes/com/example/telegaapp/model/GameState.class b/target/classes/com/example/telegaapp/model/GameState.class new file mode 100644 index 0000000000000000000000000000000000000000..6e54975f07e98772df175d926b9522e7c59a25c4 GIT binary patch literal 1344 zcma)6VNcUg6g^$LwW}S>p$G_yFk~A_MM1?*WWazWV`<+!gc5U6aUAt;o z$H#iDeqg)$hE=mo-}3D+1V|c!2nh)0iz_Q-0n_=Opa#P#8o~@KZ|5`RTw#O7u4&L% zEVP~3HM46h)Tg1Jh5B}iyM?vA^;{umZnl@MYlyL>@J41UyH_k_cNpM?hMO29-gqgK z-_4o=5^s9kmWm+^%NW!!g4@(p#jSfbF(#7vBkR=CUCXQL#r-3@;u|W)a7V^n4db{+ z+q+80dd(V@KegPZU3@EGA<>0ib*+;Vqbp$g4ach*-4z%C=bzLN#}tht?RbvABw(im}XQSYoIT4UbBzqkOmHma1R_W*k^yeMVE;MWV zcH_0R?^4A0$9|GM4qHGhU$0nh$!a)^twSk!BrvviHPB9@0-{^Ce^@`*wi=Y<+YM?+ z@(&#{YTTxw#oO3O+o?AW9M5t|AEs0FEWgeku0m|^=^nSgWKdPJ z-fUFtb%)KO@Au7^Wm{jKqXQVDTNPR!W|ssYOM>T?M9wWKn_H4G5FKH{B}9<&9ziGk z9C;ID*-vd@;1h0LV(0^T0v^*l#Mea1AIB2}c>X+DhEQWd>H?#e5LkZTkNkOxXzeU4 z;3;{}=n0Zm-?LN_9YjtxM^>aIIW;qSj){--`9CHZ&si6oDICCJ6nH_8!6E6W%A`mo zSxW{adV>V}6+&5TK{U%!3$j@bwrHs3Pzw>WEVmFf|L#?x|EY9`$nOwsej%RNeeoRA zXArrQkhmjrCmH09%AHh*I}z^8$lQru;K3ONSby!wj__V2MCdfw_cUb8LqUed5$H6v KgjbXw!17NPrx@)3 literal 0 HcmV?d00001 diff --git a/target/classes/com/example/telegaapp/model/Player.class b/target/classes/com/example/telegaapp/model/Player.class new file mode 100644 index 0000000000000000000000000000000000000000..3dddc4a80d3d8301dd5f4871340d10635d67ff0e GIT binary patch literal 3584 zcmb_f-*XdH6#j0qn@!R!4V40+hy{af)0QayKvIfGp|;wVN(*QaWt*;TXqt`LEn{b# zah&nN@xf>HL0=p@z=#$>z_Nn z0vJIlfe4}&3>zk50!IqoYR>)8S*?`ZT;P`6CC8~$a;x5=TguIpoOQPp0|L=L zJwIsUNgNWem)u}>%kVvY{S6vI)061IVGBoWJT3Q2ZTY6Rpk=Py-ykSaRM*X<5R_QF*vP^yUg@yOFJfu zWp{dQb-}I9ISVD)-Z|+NoYG~dT9osUX#~qfTAP{t@46ahiu`RU+Lq(c$9|fSnsS3> zZ*j({GQNRZ-E|+p%!Je3ncZDo@gmu^>wM*w0$;k3M*4iC5)gsb8%woJk6b8Dypu( zR^qWpHX31NYCD=4y@8dfX^RJ*4xGT`|5z~$Uvk!4s}|g`qRf4pZVkued0~FedS2iM zRi~m8<;U@!z)6kis|R#M4EAWtB_%DFqqba9x(AGi{*D-&Bo@wlx5!c%6VWdm`V> z!dA1e-BOsXvxRW7S-8EWFneqZ;r3?XT`h%qXS5Jb-D>i=qowd^yu!drpYt3e9Anvm zO^BbGq%9@AS0loR$!N;d2%I6>WdBh)c(t`kYo{t@mg_1LO6A$sDw8`^DGR2q(pD-* zTdQo}sY+RUb(I}T3=v~dr+H((E?joWyt2G8V8LNfVS z+LV~sJ#=oMJ#D6A4WQnslj(#6B|}gmoveWjS(Q=N zTJ0q2x~gc`>UDJ&V|b0R=)w;e=jn{#IedW$@}j)jKf~*!49sB#Z;&!E4;Pc9Vpyl- z6e$ZIvnr=a#qkZB$pumge1~q#kV@iBT5tj>EB-fjS%}#8vDZQme{pdi`!$((1X(Nh zF{a3n-*;iwPtsy}f=rp4=Hu6RfXuq1Cf$>co{?gL6WPT0ZN)dwq}ZfBi%XxThEEwI z2UEk#GQD3Rp1QCBGv!<#Q5lvC%x^q3umNl6Hii^GlQ-l-+6Y(TGV6M&H*cyXCR_={ z(`Iccn~$lbSbd3QK&gYRGdHg73muB$6I{eBtv4C}IZ_dJw)b&~PRh(p;W8-{Ju^g%dI!@O&6*iTP2h(T2GKbiu3vY8YcXD}==w zU|Yy$ZV0xvgSYT47AQia->x_Gb97SPLkDE0_+^2zeqe}{FA<}R-*MPE(_!oUg! zZ$2!uk2uPEuP6HpUR2FGJGcoeJG6;pHf?O8J=hgmQ|lBN!K;ZJ%^xe>%gpR8Fg8bWy`G4k|;9X84ZIB7W>Mw zE6$d+W0)$=3MflAN_W}doQ5F`lR?FJ@W3b^)ZE7c$<;R1l55i$`54)bYIp@>0%}<| zm%cpEYXZZm4pTp>eEM@XKCj^dUK2RCC*93c>?qzMTV2#J!B%my+G$bbo!2#7!j!*r ztApE6D&28pi(LqBXt>PmB9f^&EPh%;hSAlk?o<~^xFjWJM#C)T1V-!nzFf4-vhMB} zE^V8RtD7!Kmr50jr_bndEa}Lo0)wlDDc29`yVBm$cWbngT(!!2ZCkeuo(GGHTQvwj zyZX|p&69vmF9DTQF}+QRUz2Xts%+@CUYD-42|Z5sZ7KbEr+{543-n_sVRa`y$fiKp za;ws&AesGCXPqRxovx*L$<@pIYkDIHIlQr1Tw9{7*wUfm5*X+*S6$1eKowZB4(zgA zHdwxXF7P?7LdxE{bleroaidrfnD{^KNR*qFb!3fr3SjU|xHn@O35twQ>iD5pn_GQiw#jmMlz3f^xHPbhpEfN^|yjFCx zQj^Zqs%7mTH1elQu4ARkaqDqI_AvjV!@k*z9ZLbkqF$?&3|CTVX+_hN_F_$U97&a< zHpPkJQ-SGI;q_u2#g4%Ei%lu}eu$W)#tu;r_R*6rIeH86{p5{w4beCNDmX;wnWNbn z?F$-5Ge1LQ5``l~Gl}sd#52jn5t2_m$2aMjghJ10dR|5hDI}1_TePD2?sywlXeRhd z3ZQc|GITie6QYOo5&{G9$smxnbGYS9H&qYk_(|tfPiMN!dN?P4JaKX-?e@u6@ec80 zMdoQ_1tXdBBt}~RpZBzP^oVZ}@aC9UYk_ykFH9Xs>Il5o8#4Z~kes#_=B(NV?Gj$iHX|Qvmm}nI8~V4zs^O{TAWA!|bn6*Jd)u81bg`^6Cuz zzvDfcjMHSiIhkCi+2p)3`v(Tbl;3go3AEWU!<@?&#V5yEj{m17V^Y& z7%M1HVTEuV7wLnaC*NB{_&U8Q_<*oRp+?oeaV82?)BeFo6e0Sltsv(qNQFPDL6Fx7 zm9rb>=uXyEXL6gRL8e53$ppzQc(Tz~kCwPzz9&3xjVpNZED9|qVV3LV)0-4}5g22gM@dfc)JQ)yDC)4qz^D4`!)*v4lV`w#vR=9mBg literal 0 HcmV?d00001 diff --git a/target/classes/com/example/telegaapp/model/Room.class b/target/classes/com/example/telegaapp/model/Room.class new file mode 100644 index 0000000000000000000000000000000000000000..77be20d84fd02364c6de94a6aa31f75d28db976a GIT binary patch literal 5919 zcmbtY>vvRF75|;d%-lPZ8wd#jrqDLv6!HLKv9@*+C?vc>Cj<$CP(*H$OEP3K6J~CZ zsP$2**7~aUVOt;dS$t3{Er9}B^-EpLKf+Ib(&c|(#os>n&YeewkX6@8?%C(;=h?5b zlfV7<=DPs4OQC%%Ki%V8u%~CTPLJzkoeA5XndzC%k2~3(!}4z#}ziEm&8CdCRSQ#6CIJF$S|;4p;g;6 z>t?b&y9xz+E}bd5ajZgv(BETWE!L6Vb?oUP9phQAsfDoDz8N$i4IrkrxWHn(0uxVIIEhd32ITkaq?7E6Wl~U5y&~Y#7EZ(V z1jsd+oGm5&<+K;dF$?3M>*7>(sFcVns%RyZg>=HgBr*z(VpWitTkc|5b#BUqrz~W} z$>t<0YJlw}jvVp^W-OdTp{j3ry@fS)-pS=q* zkvg{BV;PqkbL<;Amp(aHDa`L<3uS$;ryM4a=jkuqx_wvxq{cd$>S^UJ)wbMhk(WGx)H0c{-CIiK>B)z032BxB$FZIay zNPf03=IqT#{l+9FTjiDJg%3JKcgT_IX7x7r=kspSE!Z<&g%(Y`si143!*kzuwYgoZ z7eK2Qz*n!4zIuUc-|&jF>fj2Z^19nq=kh47#PJs1HgHvX^}Iq-4;Ff6&E(GKr<@+| zdS3h9Ymd44!kog(ey&#%de_-+=f<;6F`3Tir)Fn*>$JuN8a&1$tkOE#^W6AG z4%pf3NXB*8_^iQP&M6FJ?PAfPyUh{bSq5%!D!zmAYO4+0Qn+t%Ql^o2MXcx39O82) zUk>twLNXrfm18dyKBM6aJm0d%iX&O69PuN zu0wTo&%@|?3r+KA?Yf0k$FF0}JQ4)&C3ycl+6g8JZk)%auB%AgLih2OE!WX=1KUD4 z794%7eAFta;+Y&N>DV(_&tFTL~~RhHfo8MN8n3TGMn+F zmbtZ-*{aLTxy*NHrRGE}b5k8=FOFZLZjNkqgtXTRS$0PuU#1Wab9JtYNq~+c-oIemB`kmij-Onva^jTuJ9Fn6%9JU(v?;wL}Wundfv%O zuk61@YAlzoGT-^91-Icw8W zoh1z`a8{>w*0=GU1tQn7l`K`H^u9o3pBDLCeUTN7Y4I$PHX4ZBsYQMl-wUj4puZ*Y z*d})^)k^8efye&0W{9M{f!2 z-^}0F1jkL9n{;V2%+2r%ulT5ugWQg!!dw1|#zgo%thfYgOCo#?$4Zh;q#`6ak%}fF zLKA%tEtk-gh$NyFM5j^)iB6@=gds$xPh=#_3Zl_ej6|cUcp@f5ai1ubh*uDuNi~w_ zOv*|$3X$a#5h@XdrGG3ekEcD?1Vwxs&*KI9vJL;li+m$ONaJn1#Ipu=mN)QyLSf|b z99||A;au`8ULh3a?-X9;*WlN|4+xpKfxY-4p&0&zo%j)Boc`@edZ>YlJNP zgtqNQn_>P3%M6&7)$~4A83^&mRPSSr2gdFWmfo@FnFC?@M~9zQkMc^=&mt21+D=;8 zC?bI;BD}wN!hacG)LF$p&3VMfEwrAOk5l5+=H9;W_I1s@lafEDOHlgscJ7D!1+l)l z{mJzgpV22HsfZj&R+!D*mtZC$*Kk&&m@FC<4N%M#55+{$D5izoG09ehUe0n3|HTRhfDf`4xVL UYuvSvBFVGswB;S##2=9OAIVD)O#lD@ literal 0 HcmV?d00001 diff --git a/target/classes/com/example/telegaapp/model/Team.class b/target/classes/com/example/telegaapp/model/Team.class new file mode 100644 index 0000000000000000000000000000000000000000..4818d9054f9aa6b64a9a9f197af481d89068ab11 GIT binary patch literal 3360 zcma)9-%}G;6#j0qn+km{2VA|56O~9%sH5JqfV*SzT5>|*L*_dolp8C}P zq2o*6>WdHUOhw1eblMj?)4!?Ke)sMsEFrDVkll07{m!}PeCOPg@Yg>te*-XujTk}* z8_-PXhzNAux7Mvx!78n!E-&4;bFM&SGGEHOrv$=7!;3LQ(PkiKVi!z-4h65d`9kX2 zwd^^8Sj8$WJ4J619~z$B4#-IR4ilZ|5{SCayj#haRs?p}k?Lemn`uKFJqC80=tZBv zft*uJ*^jJZxnQSUyI`+aR=J!iI?Hw;wP0ICflz)~Anu*n>}ijQgmj~otfDPl?=vxg z_XPB6&Z*b}B5UA%fu601&r~Yb#%#Xo#;_k@X>-WLVGIhil?&E}UCAz2Nm(FA31*IQ z95rzaL(DN}mCiq?Sp|XKp+I0BxtZac5}Y(Kf>DB3YjnABa_3U+%*{BT3an3z-%tXkF8X)+qa zDST$&w23n~yR9wiB{SBoLe0K>PvB^)!~(hc<&3l8&Y3um8G-(ywPsH{rJUtn&$~Ra zRCTSAOExbCo%xnKePws5{8kH=opqYeuaqpeChI%s*{EifiBInIaVpbPCO?4TMfQ!P zMWAywU$QUNic5B7!CER%6Q6Z*R$zN#DhPUKR zx)9Fx%jfqvo7Zty?FxgGqzuYC8dVx4wkf5&l$;)(+FNv}jlf0g^mYT9_IcOJt<70w zpLPAp)$H7P-i?Y~tra-C!s-Zp(04x=u#L?-wMx#O$;%qH$@y_y-h7thtmC*Td!?H!Vcq5Sfc7(F1p$+sFDQfRoH62qMllwxpDHt;}pJM$h?BSm#)zO?SF*(tBD zybCa62_FC66D3UNwkd~)Pd3dxzR z-W=8H&G8F?&y{=u?UZ$7iTi?@0>a9EF!>xJ`2xl!+Ml62Ir0qs$?!AmP5z4gH=g6b zGaUR`dAP{uUPSopf2G)93lb94>JMo-bn(xJ+3WT!0G>X+C8T zDZYi=O8$cGpD2VNPl+gHOnEdtfbUVr;Z04maeuS%u9n99=4fHO_i59~W=ms!MfltW z!#>!2a(fG7uLM_k_Lq$Ur0Gl+Fd`}M-lEt`KB~NUbVeF{9=ahHX1!1N&X03dphz5;*X(+pN{;F_}pl66GzmN!tf|RKgc~U z#x8L+me$7p#IA()3f)g&jwQ5Bd{Bpvr*%Tc(~*QOF_Bk@KS6s!PecNsiL^n`L^_%< zBq-{Gj6}2!(q!}PB;d9eb))i+aRWD*SueiBEnY7Ewm}}ZsSD!-a`>8(#;VQW8%jDq zr*VhR2sSt>?ou-FE%w2p6vYzH97Vek{Tm$y;^u4g83^$&DqdrcC$uEv z?v$#DT(Tn3u8}7&#x{{w`th_THxin^6P0!HwkFcL+G2^6Q8b~et%268pYo3OV-1tv zoa$uB=Q5=b$J|BOT!k^lF1trbV;lBkg_5p#eTc{#Qm&C#AxI^JctiNsIwTdn(CdIY zM%%9PVUYlA3)!qCnEdfS1&>8cGb}k+6OuN5#wCgTOuWFuR3!3JN4gdfE literal 0 HcmV?d00001 diff --git a/target/classes/com/example/telegaapp/service/GameService.class b/target/classes/com/example/telegaapp/service/GameService.class new file mode 100644 index 0000000000000000000000000000000000000000..8bd51a3984d34421abf9e27f6f3f4c59d598327d GIT binary patch literal 5343 zcmbVQcYG7)8Gb%5Vfny=X`GON4R|6(QwTORV1`9(E0{dZMyq6zohB&-kqfr$O^yu_w(uQ(>tE`dB^vi9{=z8 zM*wWWe}X7MX#iy!%2AV01ZEhI}V2;8nM<`>P zu~5WHL^7$Ak+4JE+1nmHJ<+Epg9xCs5>?Own5$tPsufxyRy<@J)8omQ5weY#F|O;$ zWGHQ2Dcv>(=`I{qSkTTwfS{+=?2p zkf;aIfMr7EbqWicue8!K62x+>2%u3z6ILp$C}wdWrXM#_3W2m?_gHD>qO5sTOf+D% zhGw)V1jh~A6(do#Gr%2MgevjYrlDQp)F?V+q|>IA2uG{12B84fYFLN$3Ul)qW~!4J zdfViWz%7SPUrgSLpDb@ltUph~4R}6H(Jf1+fT;qCL2SZ}0c_ULi7sX?2WxNACU8B* zkgc))Of04!iWv&cv)gq@m{IE#NLw|$05`ERCiPgxAYn`L2(#Ts6Mmy)}*o#LWGLmo};YKUg| zWoI2{>s=a7;N?VS8`8NuntPwS)jK^%PU((i5>7FO22w`UjBr3P53j_l0(iBCyYU)@ z#kpkU`6tRTGsYTJxY6s6*(~}U=Gkz3-K*iXxR30QnThBwGbMrKS9-R;>Y#8^!|U*R zde*OS%++ysdxs?AoeJx(7EF%sI+Wt1WdGe7-Xon>sz;+z&F|CjeyNdimSvbL zNAW=o9}pN=S0p zBcU{V!m#Y)Nh9PPyqV#e?UrS8JJ6GE_oQnuTwQ@5$g%l{8or6gYw%-*mBk}-xgV{; zPiHxljL_!K#pW+Gd;^cw;8#~^Qxu;R#ouVSh_CbMck=Xm4PV7$eEMS$f5M*w_=|?8 z@K=^~uF}lJq;0GYImwhPQQRF#kcvz{hxwjTAb#S=Bnf4_ynI6K8a7!xtKml z=`wz1?1Ybr&f5%1C3C4C}Z1>?Rb#T==ey^qVWu)~wlD^!Br!kAC(Lo{f zHsTDC37&->o++-*fqELt13Y94y2=uYgMxzaEY1;`(72OolF`~cgy*m^$CD%zSm|I` z3uL#x{jM2ESY36f(T&Q!Y1>yJ_4~ z!sUZbBB!yh1p9e=>oi`du(_tpBBktqTRccb|;vg&Y z0=~#vSOLT1oZ)48xgQU+LKGwqOHuwbssreG1~)Jpyt#y?OSt9|N%44lm|`XJYXwy# zE4_p!Sy@n9`V_&>uWf9eLhO#NhI2^f5+gtD09|aBExzO|@IX`(+#~oBEef$;p)4({ z)%=u9oXE?!aC#B(dN$80rot)HK^G7VIMTySdWCYZ!yrgMH{H z>wEdOIDjN>;mg_}?&7LsWGh2z;(M-iLAeB%&BKXokDPEaB7~j5qs&byJtm#Zl{s0O zhmvQo&&kj7OZ@FcGBdZ-=^4q+qd-kib{{W8H<3p%rg6^btplx)cc1lzn?23~O1)6(Y&kcJ8VjZ2M8gzke5vUxxd2_%nO%B<` zI5fmsumuSXtqE*Jn?PsQFPP4CyHLzKX6WRdoNX72X2}Vzxmm}&B`q~UM|aN9ZxFDFFd_3r-`TKDS^2BNv;qR?VnynEXn1{mvUCefhuB| z9DgW}X9Tv&U*#-g&Q|V_YdMa?IHKX%1Uk^UnrEa{Ul7<+tgP8CrQH&hJ=}4*T4bHx zsm{8(6)d#{N71d}xde{E6lh&13%gP*lj=mr<4liRYTWhVbi6=W2l__(b-X0dPC+P7 z<%`M<%5aCm%<*|k?c}nKR|NLS-zd(UoUh!h++yKMn0exsxXvk|UlrIZf2JHazel`~4c(+QlxSxS|2DAkcoq}oIn4TJ3Mn%Jrr zitJnhY1M}W$%cb|XTmP$Lk;KGwR*(%#{EJZLx^p`0NzPp1Qx3+xt}}HMH*CR??GAiZw1$NT#cpn8?EH~%bVL2e(*}5-=H>IZzU%eWsI)Ex; z6GU&SSE+x>A17g3+V!0C<-(W~T(rmXv>0hWYv)IKHPyamYz!w|e$GeJ|NEk=5NenR z>=`M0p<8f9-I7bjKF{+*Tit#V9%Q;#?I5&G`;pna;FrQvJPw0$HY86g<*%x&2FZr5 z*2=C|u4dx5H11AJxLG!BO4SuLIJyvz5KU?rF^}X1*%)=#dL5>Ut6Ch|fZbGLQVu!c zq(6Sa4(x&xIsv1^Ex#OOoinb|IaxOqkEzrII?{fSGfPD^<0h0Fv%6}R=wMCKLwx# zjb!|oZwY!5k56FpDKJK^hKTF$h!wcoHG{a3OzO)pGBIO^m1#6~S(zr|2`kfV?B&ol z+O3Rk?6We-W@A5B%{XYyor)9g7qrcn+o>U z8f>i)gC(fMd$A1;W%(A{>k7JCD=15h5@$Rr&cQ^jxNqnkqwTm#?`XBc1@t%IFAOZ; z?U;HFbuVFv0uFaC;DW#dTwK6=3SmssGln%eccC4-qv-pqthMOmM-G#W-;TX-afQ*Z a(pQOIwd83j(9$FbR2}uA)yHb$Mc_YvpHT<^ literal 0 HcmV?d00001 diff --git a/target/classes/static/assets/index-Plf17G8e.css b/target/classes/static/assets/index-Plf17G8e.css new file mode 100644 index 0000000..4ac8f7a --- /dev/null +++ b/target/classes/static/assets/index-Plf17G8e.css @@ -0,0 +1 @@ +@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-500:oklch(63.7% .237 25.331);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-medium:500;--font-weight-bold:700;--tracking-widest:.1em;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.-mx-4{margin-inline:calc(var(--spacing)*-4)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-auto{margin-bottom:auto}.ml-1{margin-left:calc(var(--spacing)*1)}.block{display:block}.flex{display:flex}.h-8{height:calc(var(--spacing)*8)}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-8{width:calc(var(--spacing)*8)}.w-full{width:100%}.max-w-sm{max-width:var(--container-sm)}.min-w-\[45\%\]{min-width:45%}.flex-1{flex:1}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-gray-700{border-color:var(--color-gray-700)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.bg-gray-900{background-color:var(--color-gray-900)}.bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.bg-gray-900\/60{background-color:#10182899}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/60{background-color:color-mix(in oklab,var(--color-gray-900)60%,transparent)}}.bg-green-600{background-color:var(--color-green-600)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-blue-400{--tw-gradient-from:var(--color-blue-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-500{--tw-gradient-from:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-600{--tw-gradient-from:var(--color-blue-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-700{--tw-gradient-to:var(--color-blue-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-500{--tw-gradient-to:var(--color-purple-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-600{--tw-gradient-to:var(--color-purple-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-blue-500{color:var(--color-blue-500)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-red-500{color:var(--color-red-500)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-yellow-500{color:var(--color-yellow-500)}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.placeholder-gray-600::-moz-placeholder{color:var(--color-gray-600)}.placeholder-gray-600::placeholder{color:var(--color-gray-600)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}@media(hover:hover){.hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.hover\:bg-green-500:hover{background-color:var(--color-green-500)}.hover\:from-blue-500:hover{--tw-gradient-from:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hover\:to-blue-600:hover{--tw-gradient-to:var(--color-blue-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hover\:text-white:hover{color:var(--color-white)}}.focus\:border-transparent:focus{border-color:#0000}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}}:root{color-scheme:light dark;color:#ffffffde;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#242424;font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;font-weight:400;line-height:1.5}body{place-items:center;min-width:320px;min-height:100vh;margin:0;display:flex}#root{text-align:center;width:100%;max-width:1280px;margin:0 auto;padding:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1} diff --git a/target/classes/static/assets/index-WmiXnQva.js b/target/classes/static/assets/index-WmiXnQva.js new file mode 100644 index 0000000..4f80a9c --- /dev/null +++ b/target/classes/static/assets/index-WmiXnQva.js @@ -0,0 +1,16 @@ +(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const v of document.querySelectorAll('link[rel="modulepreload"]'))s(v);new MutationObserver(v=>{for(const N of v)if(N.type==="childList")for(const I of N.addedNodes)I.tagName==="LINK"&&I.rel==="modulepreload"&&s(I)}).observe(document,{childList:!0,subtree:!0});function b(v){const N={};return v.integrity&&(N.integrity=v.integrity),v.referrerPolicy&&(N.referrerPolicy=v.referrerPolicy),v.crossOrigin==="use-credentials"?N.credentials="include":v.crossOrigin==="anonymous"?N.credentials="omit":N.credentials="same-origin",N}function s(v){if(v.ep)return;v.ep=!0;const N=b(v);fetch(v.href,N)}})();function dm(O){return O&&O.__esModule&&Object.prototype.hasOwnProperty.call(O,"default")?O.default:O}var fr={exports:{}},Mu={};var Kd;function hm(){if(Kd)return Mu;Kd=1;var O=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function b(s,v,N){var I=null;if(N!==void 0&&(I=""+N),v.key!==void 0&&(I=""+v.key),"key"in v){N={};for(var W in v)W!=="key"&&(N[W]=v[W])}else N=v;return v=N.ref,{$$typeof:O,type:s,key:I,ref:v!==void 0?v:null,props:N}}return Mu.Fragment=r,Mu.jsx=b,Mu.jsxs=b,Mu}var Jd;function pm(){return Jd||(Jd=1,fr.exports=hm()),fr.exports}var P=pm(),sr={exports:{}},oe={};var Fd;function mm(){if(Fd)return oe;Fd=1;var O=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),b=Symbol.for("react.fragment"),s=Symbol.for("react.strict_mode"),v=Symbol.for("react.profiler"),N=Symbol.for("react.consumer"),I=Symbol.for("react.context"),W=Symbol.for("react.forward_ref"),H=Symbol.for("react.suspense"),S=Symbol.for("react.memo"),ae=Symbol.for("react.lazy"),ee=Symbol.for("react.activity"),_e=Symbol.iterator;function Ke(m){return m===null||typeof m!="object"?null:(m=_e&&m[_e]||m["@@iterator"],typeof m=="function"?m:null)}var Ce={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Te=Object.assign,Be={};function Le(m,B,w){this.props=m,this.context=B,this.refs=Be,this.updater=w||Ce}Le.prototype.isReactComponent={},Le.prototype.setState=function(m,B){if(typeof m!="object"&&typeof m!="function"&&m!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,m,B,"setState")},Le.prototype.forceUpdate=function(m){this.updater.enqueueForceUpdate(this,m,"forceUpdate")};function D(){}D.prototype=Le.prototype;function V(m,B,w){this.props=m,this.context=B,this.refs=Be,this.updater=w||Ce}var ue=V.prototype=new D;ue.constructor=V,Te(ue,Le.prototype),ue.isPureReactComponent=!0;var Ue=Array.isArray;function De(){}var re={H:null,A:null,T:null,S:null},tt=Object.prototype.hasOwnProperty;function wt(m,B,w){var X=w.ref;return{$$typeof:O,type:m,key:B,ref:X!==void 0?X:null,props:w}}function Sl(m,B){return wt(m.type,B,m.props)}function Xt(m){return typeof m=="object"&&m!==null&&m.$$typeof===O}function st(m){var B={"=":"=0",":":"=2"};return"$"+m.replace(/[=:]/g,function(w){return B[w]})}var Al=/\/+/g;function Zt(m,B){return typeof m=="object"&&m!==null&&m.key!=null?st(""+m.key):B.toString(36)}function Dt(m){switch(m.status){case"fulfilled":return m.value;case"rejected":throw m.reason;default:switch(typeof m.status=="string"?m.then(De,De):(m.status="pending",m.then(function(B){m.status==="pending"&&(m.status="fulfilled",m.value=B)},function(B){m.status==="pending"&&(m.status="rejected",m.reason=B)})),m.status){case"fulfilled":return m.value;case"rejected":throw m.reason}}throw m}function M(m,B,w,X,ie){var de=typeof m;(de==="undefined"||de==="boolean")&&(m=null);var Oe=!1;if(m===null)Oe=!0;else switch(de){case"bigint":case"string":case"number":Oe=!0;break;case"object":switch(m.$$typeof){case O:case r:Oe=!0;break;case ae:return Oe=m._init,M(Oe(m._payload),B,w,X,ie)}}if(Oe)return ie=ie(m),Oe=X===""?"."+Zt(m,0):X,Ue(ie)?(w="",Oe!=null&&(w=Oe.replace(Al,"$&/")+"/"),M(ie,B,w,"",function(ll){return ll})):ie!=null&&(Xt(ie)&&(ie=Sl(ie,w+(ie.key==null||m&&m.key===ie.key?"":(""+ie.key).replace(Al,"$&/")+"/")+Oe)),B.push(ie)),1;Oe=0;var Ve=X===""?".":X+":";if(Ue(m))for(var Xe=0;Xe>>1,G=M[ve];if(0>>1;vev(w,ne))Xv(ie,w)?(M[ve]=ie,M[X]=ne,ve=X):(M[ve]=w,M[B]=ne,ve=B);else if(Xv(ie,ne))M[ve]=ie,M[X]=ne,ve=X;else break e}}return R}function v(M,R){var ne=M.sortIndex-R.sortIndex;return ne!==0?ne:M.id-R.id}if(O.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var N=performance;O.unstable_now=function(){return N.now()}}else{var I=Date,W=I.now();O.unstable_now=function(){return I.now()-W}}var H=[],S=[],ae=1,ee=null,_e=3,Ke=!1,Ce=!1,Te=!1,Be=!1,Le=typeof setTimeout=="function"?setTimeout:null,D=typeof clearTimeout=="function"?clearTimeout:null,V=typeof setImmediate<"u"?setImmediate:null;function ue(M){for(var R=b(S);R!==null;){if(R.callback===null)s(S);else if(R.startTime<=M)s(S),R.sortIndex=R.expirationTime,r(H,R);else break;R=b(S)}}function Ue(M){if(Te=!1,ue(M),!Ce)if(b(H)!==null)Ce=!0,De||(De=!0,st());else{var R=b(S);R!==null&&Dt(Ue,R.startTime-M)}}var De=!1,re=-1,tt=5,wt=-1;function Sl(){return Be?!0:!(O.unstable_now()-wtM&&Sl());){var ve=ee.callback;if(typeof ve=="function"){ee.callback=null,_e=ee.priorityLevel;var G=ve(ee.expirationTime<=M);if(M=O.unstable_now(),typeof G=="function"){ee.callback=G,ue(M),R=!0;break t}ee===b(H)&&s(H),ue(M)}else s(H);ee=b(H)}if(ee!==null)R=!0;else{var m=b(S);m!==null&&Dt(Ue,m.startTime-M),R=!1}}break e}finally{ee=null,_e=ne,Ke=!1}R=void 0}}finally{R?st():De=!1}}}var st;if(typeof V=="function")st=function(){V(Xt)};else if(typeof MessageChannel<"u"){var Al=new MessageChannel,Zt=Al.port2;Al.port1.onmessage=Xt,st=function(){Zt.postMessage(null)}}else st=function(){Le(Xt,0)};function Dt(M,R){re=Le(function(){M(O.unstable_now())},R)}O.unstable_IdlePriority=5,O.unstable_ImmediatePriority=1,O.unstable_LowPriority=4,O.unstable_NormalPriority=3,O.unstable_Profiling=null,O.unstable_UserBlockingPriority=2,O.unstable_cancelCallback=function(M){M.callback=null},O.unstable_forceFrameRate=function(M){0>M||125ve?(M.sortIndex=ne,r(S,M),b(H)===null&&M===b(S)&&(Te?(D(re),re=-1):Te=!0,Dt(Ue,ne-ve))):(M.sortIndex=G,r(H,M),Ce||Ke||(Ce=!0,De||(De=!0,st()))),M},O.unstable_shouldYield=Sl,O.unstable_wrapCallback=function(M){var R=_e;return function(){var ne=_e;_e=R;try{return M.apply(this,arguments)}finally{_e=ne}}}})(pr)),pr}var Pd;function bm(){return Pd||(Pd=1,hr.exports=vm()),hr.exports}var mr={exports:{}},_t={};var eh;function gm(){if(eh)return _t;eh=1;var O=vr();function r(H){var S="https://react.dev/errors/"+H;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(O)}catch(r){console.error(r)}}return O(),mr.exports=gm(),mr.exports}var lh;function _m(){if(lh)return xu;lh=1;var O=bm(),r=vr(),b=ym();function s(e){var t="https://react.dev/errors/"+e;if(1G||(e.current=ve[G],ve[G]=null,G--)}function w(e,t){G++,ve[G]=e.current,e.current=t}var X=m(null),ie=m(null),de=m(null),Oe=m(null);function Ve(e,t){switch(w(de,t),w(ie,e),w(X,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?bd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=bd(t),e=gd(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}B(X),w(X,e)}function Xe(){B(X),B(ie),B(de)}function ll(e){e.memoizedState!==null&&w(Oe,e);var t=X.current,l=gd(t,e.type);t!==l&&(w(ie,e),w(X,l))}function fl(e){ie.current===e&&(B(X),B(ie)),Oe.current===e&&(B(Oe),Tu._currentValue=ne)}var Jn,Fn;function dt(e){if(Jn===void 0)try{throw Error()}catch(l){var t=l.stack.trim().match(/\n( *(at )?)/);Jn=t&&t[1]||"",Fn=-1)":-1a||d[n]!==_[a]){var z=` +`+d[n].replace(" at new "," at ");return e.displayName&&z.includes("")&&(z=z.replace("",e.displayName)),z}while(1<=n&&0<=a);break}}}finally{wa=!1,Error.prepareStackTrace=l}return(l=e?e.displayName||e.name:"")?dt(l):""}function lc(e,t){switch(e.tag){case 26:case 27:case 5:return dt(e.type);case 16:return dt("Lazy");case 13:return e.child!==t&&t!==null?dt("Suspense Fallback"):dt("Suspense");case 19:return dt("SuspenseList");case 0:case 15:return Rt(e.type,!1);case 11:return Rt(e.type.render,!1);case 1:return Rt(e.type,!0);case 31:return dt("Activity");default:return""}}function $n(e){try{var t="",l=null;do t+=lc(e,l),l=e,e=e.return;while(e);return t}catch(n){return` +Error generating stack: `+n.message+` +`+n.stack}}var Da=Object.prototype.hasOwnProperty,Tn=O.unstable_scheduleCallback,Ra=O.unstable_cancelCallback,nc=O.unstable_shouldYield,ac=O.unstable_requestPaint,St=O.unstable_now,On=O.unstable_getCurrentPriorityLevel,Hu=O.unstable_ImmediatePriority,wu=O.unstable_UserBlockingPriority,jt=O.unstable_NormalPriority,uc=O.unstable_LowPriority,Du=O.unstable_IdlePriority,sl=O.log,ic=O.unstable_setDisableYieldValue,Cn=null,ot=null;function dl(e){if(typeof sl=="function"&&ic(e),ot&&typeof ot.setStrictMode=="function")try{ot.setStrictMode(Cn,e)}catch{}}var At=Math.clz32?Math.clz32:ja,cc=Math.log,Ru=Math.LN2;function ja(e){return e>>>=0,e===0?32:31-(cc(e)/Ru|0)|0}var Ql=256,zn=262144,In=4194304;function hl(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Wl(e,t,l){var n=e.pendingLanes;if(n===0)return 0;var a=0,u=e.suspendedLanes,i=e.pingedLanes;e=e.warmLanes;var c=n&134217727;return c!==0?(n=c&~u,n!==0?a=hl(n):(i&=c,i!==0?a=hl(i):l||(l=c&~e,l!==0&&(a=hl(l))))):(c=n&~u,c!==0?a=hl(c):i!==0?a=hl(i):l||(l=n&~e,l!==0&&(a=hl(l)))),a===0?0:t!==0&&t!==a&&(t&u)===0&&(u=a&-a,l=t&-t,u>=l||u===32&&(l&4194048)!==0)?t:a}function nl(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Mn(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function ju(){var e=In;return In<<=1,(In&62914560)===0&&(In=4194304),e}function Pn(e){for(var t=[],l=0;31>l;l++)t.push(e);return t}function El(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Xl(e,t,l,n,a,u){var i=e.pendingLanes;e.pendingLanes=l,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=l,e.entangledLanes&=l,e.errorRecoveryDisabledLanes&=l,e.shellSuspendCounter=0;var c=e.entanglements,d=e.expirationTimes,_=e.hiddenUpdates;for(l=i&~l;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var Ya=/[\n"\\]/g;function o(e){return e.replace(Ya,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function f(e,t,l,n,a,u,i,c){e.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?e.type=i:e.removeAttribute("type"),t!=null?i==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Ct(t)):e.value!==""+Ct(t)&&(e.value=""+Ct(t)):i!=="submit"&&i!=="reset"||e.removeAttribute("value"),t!=null?E(e,i,Ct(t)):l!=null?E(e,i,Ct(l)):n!=null&&e.removeAttribute("value"),a==null&&u!=null&&(e.defaultChecked=!!u),a!=null&&(e.checked=a&&typeof a!="function"&&typeof a!="symbol"),c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?e.name=""+Ct(c):e.removeAttribute("name")}function h(e,t,l,n,a,u,i,c){if(u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(e.type=u),t!=null||l!=null){if(!(u!=="submit"&&u!=="reset"||t!=null)){Cl(e);return}l=l!=null?""+Ct(l):"",t=t!=null?""+Ct(t):l,c||t===e.value||(e.value=t),e.defaultValue=t}n=n??a,n=typeof n!="function"&&typeof n!="symbol"&&!!n,e.checked=c?e.checked:!!n,e.defaultChecked=!!n,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(e.name=i),Cl(e)}function E(e,t,l){t==="number"&&na(e.ownerDocument)===e||e.defaultValue===""+l||(e.defaultValue=""+l)}function C(e,t,l,n){if(e=e.options,t){t={};for(var a=0;a"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Bn=!1;if(ul)try{var Un={};Object.defineProperty(Un,"passive",{get:function(){Bn=!0}}),window.addEventListener("test",Un,Un),window.removeEventListener("test",Un,Un)}catch{Bn=!1}var vl=null,L=null,zt=null;function zl(){if(zt)return zt;var e,t=L,l=t.length,n,a="value"in vl?vl.value:vl.textContent,u=a.length;for(e=0;e=Xa),Er=" ",Tr=!1;function Or(e,t){switch(e){case"keyup":return wh.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Cr(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var aa=!1;function Rh(e,t){switch(e){case"compositionend":return Cr(t);case"keypress":return t.which!==32?null:(Tr=!0,Er);case"textInput":return e=t.data,e===Er&&Tr?null:e;default:return null}}function jh(e,t){if(aa)return e==="compositionend"||!mc&&Or(e,t)?(e=zl(),zt=L=vl=null,aa=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:l,offset:t-e};e=n}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=wr(l)}}function Rr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Rr(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function jr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=na(e.document);t instanceof e.HTMLIFrameElement;){try{var l=typeof t.contentWindow.location.href=="string"}catch{l=!1}if(l)e=t.contentWindow;else break;t=na(e.document)}return t}function gc(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var Xh=ul&&"documentMode"in document&&11>=document.documentMode,ua=null,yc=null,Ja=null,_c=!1;function qr(e,t,l){var n=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;_c||ua==null||ua!==na(n)||(n=ua,"selectionStart"in n&&gc(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Ja&&Ka(Ja,n)||(Ja=n,n=ji(yc,"onSelect"),0>=i,a-=i,bl=1<<32-At(t)+a|l<pe?(Ae=$,$=null):Ae=$.sibling;var xe=A(g,$,y[pe],x);if(xe===null){$===null&&($=Ae);break}e&&$&&xe.alternate===null&&t(g,$),p=u(xe,p,pe),Me===null?te=xe:Me.sibling=xe,Me=xe,$=Ae}if(pe===y.length)return l(g,$),Ee&&xl(g,pe),te;if($===null){for(;pepe?(Ae=$,$=null):Ae=$.sibling;var Sn=A(g,$,xe.value,x);if(Sn===null){$===null&&($=Ae);break}e&&$&&Sn.alternate===null&&t(g,$),p=u(Sn,p,pe),Me===null?te=Sn:Me.sibling=Sn,Me=Sn,$=Ae}if(xe.done)return l(g,$),Ee&&xl(g,pe),te;if($===null){for(;!xe.done;pe++,xe=y.next())xe=U(g,xe.value,x),xe!==null&&(p=u(xe,p,pe),Me===null?te=xe:Me.sibling=xe,Me=xe);return Ee&&xl(g,pe),te}for($=n($);!xe.done;pe++,xe=y.next())xe=T($,g,pe,xe.value,x),xe!==null&&(e&&xe.alternate!==null&&$.delete(xe.key===null?pe:xe.key),p=u(xe,p,pe),Me===null?te=xe:Me.sibling=xe,Me=xe);return e&&$.forEach(function(sm){return t(g,sm)}),Ee&&xl(g,pe),te}function Ge(g,p,y,x){if(typeof y=="object"&&y!==null&&y.type===Te&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case Ke:e:{for(var te=y.key;p!==null;){if(p.key===te){if(te=y.type,te===Te){if(p.tag===7){l(g,p.sibling),x=a(p,y.props.children),x.return=g,g=x;break e}}else if(p.elementType===te||typeof te=="object"&&te!==null&&te.$$typeof===tt&&Vn(te)===p.type){l(g,p.sibling),x=a(p,y.props),tu(x,y),x.return=g,g=x;break e}l(g,p);break}else t(g,p);p=p.sibling}y.type===Te?(x=jn(y.props.children,g.mode,x,y.key),x.return=g,g=x):(x=ei(y.type,y.key,y.props,null,g.mode,x),tu(x,y),x.return=g,g=x)}return i(g);case Ce:e:{for(te=y.key;p!==null;){if(p.key===te)if(p.tag===4&&p.stateNode.containerInfo===y.containerInfo&&p.stateNode.implementation===y.implementation){l(g,p.sibling),x=a(p,y.children||[]),x.return=g,g=x;break e}else{l(g,p);break}else t(g,p);p=p.sibling}x=zc(y,g.mode,x),x.return=g,g=x}return i(g);case tt:return y=Vn(y),Ge(g,p,y,x)}if(Dt(y))return k(g,p,y,x);if(st(y)){if(te=st(y),typeof te!="function")throw Error(s(150));return y=te.call(y),le(g,p,y,x)}if(typeof y.then=="function")return Ge(g,p,ci(y),x);if(y.$$typeof===V)return Ge(g,p,ni(g,y),x);oi(g,y)}return typeof y=="string"&&y!==""||typeof y=="number"||typeof y=="bigint"?(y=""+y,p!==null&&p.tag===6?(l(g,p.sibling),x=a(p,y),x.return=g,g=x):(l(g,p),x=Cc(y,g.mode,x),x.return=g,g=x),i(g)):l(g,p)}return function(g,p,y,x){try{eu=0;var te=Ge(g,p,y,x);return va=null,te}catch($){if($===ma||$===ui)throw $;var Me=Gt(29,$,null,g.mode);return Me.lanes=x,Me.return=g,Me}finally{}}}var Wn=of(!0),rf=of(!1),nn=!1;function Gc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Lc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function an(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function un(e,t,l){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,(Ne&2)!==0){var a=n.pending;return a===null?t.next=t:(t.next=a.next,a.next=t),n.pending=t,t=Pu(e),Xr(e,null,l),t}return Iu(e,n,t,l),Pu(e)}function lu(e,t,l){if(t=t.updateQueue,t!==null&&(t=t.shared,(l&4194048)!==0)){var n=t.lanes;n&=e.pendingLanes,l|=n,t.lanes=l,Gu(e,l)}}function Yc(e,t){var l=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,l===n)){var a=null,u=null;if(l=l.firstBaseUpdate,l!==null){do{var i={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};u===null?a=u=i:u=u.next=i,l=l.next}while(l!==null);u===null?a=u=t:u=u.next=t}else a=u=t;l={baseState:n.baseState,firstBaseUpdate:a,lastBaseUpdate:u,shared:n.shared,callbacks:n.callbacks},e.updateQueue=l;return}e=l.lastBaseUpdate,e===null?l.firstBaseUpdate=t:e.next=t,l.lastBaseUpdate=t}var Vc=!1;function nu(){if(Vc){var e=pa;if(e!==null)throw e}}function au(e,t,l,n){Vc=!1;var a=e.updateQueue;nn=!1;var u=a.firstBaseUpdate,i=a.lastBaseUpdate,c=a.shared.pending;if(c!==null){a.shared.pending=null;var d=c,_=d.next;d.next=null,i===null?u=_:i.next=_,i=d;var z=e.alternate;z!==null&&(z=z.updateQueue,c=z.lastBaseUpdate,c!==i&&(c===null?z.firstBaseUpdate=_:c.next=_,z.lastBaseUpdate=d))}if(u!==null){var U=a.baseState;i=0,z=_=d=null,c=u;do{var A=c.lane&-536870913,T=A!==c.lane;if(T?(Se&A)===A:(n&A)===A){A!==0&&A===ha&&(Vc=!0),z!==null&&(z=z.next={lane:0,tag:c.tag,payload:c.payload,callback:null,next:null});e:{var k=e,le=c;A=t;var Ge=l;switch(le.tag){case 1:if(k=le.payload,typeof k=="function"){U=k.call(Ge,U,A);break e}U=k;break e;case 3:k.flags=k.flags&-65537|128;case 0:if(k=le.payload,A=typeof k=="function"?k.call(Ge,U,A):k,A==null)break e;U=ee({},U,A);break e;case 2:nn=!0}}A=c.callback,A!==null&&(e.flags|=64,T&&(e.flags|=8192),T=a.callbacks,T===null?a.callbacks=[A]:T.push(A))}else T={lane:A,tag:c.tag,payload:c.payload,callback:c.callback,next:null},z===null?(_=z=T,d=U):z=z.next=T,i|=A;if(c=c.next,c===null){if(c=a.shared.pending,c===null)break;T=c,c=T.next,T.next=null,a.lastBaseUpdate=T,a.shared.pending=null}}while(!0);z===null&&(d=U),a.baseState=d,a.firstBaseUpdate=_,a.lastBaseUpdate=z,u===null&&(a.shared.lanes=0),sn|=i,e.lanes=i,e.memoizedState=U}}function ff(e,t){if(typeof e!="function")throw Error(s(191,e));e.call(t)}function sf(e,t){var l=e.callbacks;if(l!==null)for(e.callbacks=null,e=0;eu?u:8;var i=M.T,c={};M.T=c,co(e,!1,t,l);try{var d=a(),_=M.S;if(_!==null&&_(c,d),d!==null&&typeof d=="object"&&typeof d.then=="function"){var z=ep(d,n);cu(e,t,z,Wt(e))}else cu(e,t,n,Wt(e))}catch(U){cu(e,t,{then:function(){},status:"rejected",reason:U},Wt())}finally{R.p=u,i!==null&&c.types!==null&&(i.types=c.types),M.T=i}}function ip(){}function uo(e,t,l,n){if(e.tag!==5)throw Error(s(476));var a=Qf(e).queue;Vf(e,a,t,ne,l===null?ip:function(){return Wf(e),l(n)})}function Qf(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ne,baseState:ne,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Hl,lastRenderedState:ne},next:null};var l={};return t.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Hl,lastRenderedState:l},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Wf(e){var t=Qf(e);t.next===null&&(t=e.alternate.memoizedState),cu(e,t.next.queue,{},Wt())}function io(){return mt(Tu)}function Xf(){return et().memoizedState}function Zf(){return et().memoizedState}function cp(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var l=Wt();e=an(l);var n=un(t,e,l);n!==null&&(Ht(n,t,l),lu(n,t,l)),t={cache:Dc()},e.payload=t;return}t=t.return}}function op(e,t,l){var n=Wt();l={lane:n,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},gi(e)?Kf(t,l):(l=Tc(e,t,l,n),l!==null&&(Ht(l,e,n),Jf(l,t,n)))}function kf(e,t,l){var n=Wt();cu(e,t,l,n)}function cu(e,t,l,n){var a={lane:n,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(gi(e))Kf(t,a);else{var u=e.alternate;if(e.lanes===0&&(u===null||u.lanes===0)&&(u=t.lastRenderedReducer,u!==null))try{var i=t.lastRenderedState,c=u(i,l);if(a.hasEagerState=!0,a.eagerState=c,qt(c,i))return Iu(e,t,a,0),Ye===null&&$u(),!1}catch{}finally{}if(l=Tc(e,t,a,n),l!==null)return Ht(l,e,n),Jf(l,t,n),!0}return!1}function co(e,t,l,n){if(n={lane:2,revertLane:Lo(),gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},gi(e)){if(t)throw Error(s(479))}else t=Tc(e,l,n,2),t!==null&&Ht(t,e,2)}function gi(e){var t=e.alternate;return e===se||t!==null&&t===se}function Kf(e,t){ga=si=!0;var l=e.pending;l===null?t.next=t:(t.next=l.next,l.next=t),e.pending=t}function Jf(e,t,l){if((l&4194048)!==0){var n=t.lanes;n&=e.pendingLanes,l|=n,t.lanes=l,Gu(e,l)}}var ou={readContext:mt,use:pi,useCallback:$e,useContext:$e,useEffect:$e,useImperativeHandle:$e,useLayoutEffect:$e,useInsertionEffect:$e,useMemo:$e,useReducer:$e,useRef:$e,useState:$e,useDebugValue:$e,useDeferredValue:$e,useTransition:$e,useSyncExternalStore:$e,useId:$e,useHostTransitionStatus:$e,useFormState:$e,useActionState:$e,useOptimistic:$e,useMemoCache:$e,useCacheRefresh:$e};ou.useEffectEvent=$e;var Ff={readContext:mt,use:pi,useCallback:function(e,t){return Tt().memoizedState=[e,t===void 0?null:t],e},useContext:mt,useEffect:Hf,useImperativeHandle:function(e,t,l){l=l!=null?l.concat([e]):null,vi(4194308,4,jf.bind(null,t,e),l)},useLayoutEffect:function(e,t){return vi(4194308,4,e,t)},useInsertionEffect:function(e,t){vi(4,2,e,t)},useMemo:function(e,t){var l=Tt();t=t===void 0?null:t;var n=e();if(Xn){dl(!0);try{e()}finally{dl(!1)}}return l.memoizedState=[n,t],n},useReducer:function(e,t,l){var n=Tt();if(l!==void 0){var a=l(t);if(Xn){dl(!0);try{l(t)}finally{dl(!1)}}}else a=t;return n.memoizedState=n.baseState=a,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:a},n.queue=e,e=e.dispatch=op.bind(null,se,e),[n.memoizedState,e]},useRef:function(e){var t=Tt();return e={current:e},t.memoizedState=e},useState:function(e){e=eo(e);var t=e.queue,l=kf.bind(null,se,t);return t.dispatch=l,[e.memoizedState,l]},useDebugValue:no,useDeferredValue:function(e,t){var l=Tt();return ao(l,e,t)},useTransition:function(){var e=eo(!1);return e=Vf.bind(null,se,e.queue,!0,!1),Tt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,l){var n=se,a=Tt();if(Ee){if(l===void 0)throw Error(s(407));l=l()}else{if(l=t(),Ye===null)throw Error(s(349));(Se&127)!==0||bf(n,t,l)}a.memoizedState=l;var u={value:l,getSnapshot:t};return a.queue=u,Hf(yf.bind(null,n,u,e),[e]),n.flags|=2048,_a(9,{destroy:void 0},gf.bind(null,n,u,l,t),null),l},useId:function(){var e=Tt(),t=Ye.identifierPrefix;if(Ee){var l=gl,n=bl;l=(n&~(1<<32-At(n)-1)).toString(32)+l,t="_"+t+"R_"+l,l=di++,0<\/script>",u=u.removeChild(u.firstChild);break;case"select":u=typeof n.is=="string"?i.createElement("select",{is:n.is}):i.createElement("select"),n.multiple?u.multiple=!0:n.size&&(u.size=n.size);break;default:u=typeof n.is=="string"?i.createElement(a,{is:n.is}):i.createElement(a)}}u[lt]=t,u[ht]=n;e:for(i=t.child;i!==null;){if(i.tag===5||i.tag===6)u.appendChild(i.stateNode);else if(i.tag!==4&&i.tag!==27&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===t)break e;for(;i.sibling===null;){if(i.return===null||i.return===t)break e;i=i.return}i.sibling.return=i.return,i=i.sibling}t.stateNode=u;e:switch(bt(u,a,n),a){case"button":case"input":case"select":case"textarea":n=!!n.autoFocus;break e;case"img":n=!0;break e;default:n=!1}n&&Dl(t)}}return We(t),Ao(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,l),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==n&&Dl(t);else{if(typeof n!="string"&&t.stateNode===null)throw Error(s(166));if(e=de.current,sa(t)){if(e=t.stateNode,l=t.memoizedProps,n=null,a=pt,a!==null)switch(a.tag){case 27:case 5:n=a.memoizedProps}e[lt]=t,e=!!(e.nodeValue===l||n!==null&&n.suppressHydrationWarning===!0||md(e.nodeValue,l)),e||tn(t,!0)}else e=qi(e).createTextNode(n),e[lt]=t,t.stateNode=e}return We(t),null;case 31:if(l=t.memoizedState,e===null||e.memoizedState!==null){if(n=sa(t),l!==null){if(e===null){if(!n)throw Error(s(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(s(557));e[lt]=t}else qn(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;We(t),e=!1}else l=Uc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=l),e=!0;if(!e)return t.flags&256?(Yt(t),t):(Yt(t),null);if((t.flags&128)!==0)throw Error(s(558))}return We(t),null;case 13:if(n=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=sa(t),n!==null&&n.dehydrated!==null){if(e===null){if(!a)throw Error(s(318));if(a=t.memoizedState,a=a!==null?a.dehydrated:null,!a)throw Error(s(317));a[lt]=t}else qn(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;We(t),a=!1}else a=Uc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(Yt(t),t):(Yt(t),null)}return Yt(t),(t.flags&128)!==0?(t.lanes=l,t):(l=n!==null,e=e!==null&&e.memoizedState!==null,l&&(n=t.child,a=null,n.alternate!==null&&n.alternate.memoizedState!==null&&n.alternate.memoizedState.cachePool!==null&&(a=n.alternate.memoizedState.cachePool.pool),u=null,n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(u=n.memoizedState.cachePool.pool),u!==a&&(n.flags|=2048)),l!==e&&l&&(t.child.flags|=8192),Ei(t,t.updateQueue),We(t),null);case 4:return Xe(),e===null&&Wo(t.stateNode.containerInfo),We(t),null;case 10:return Ul(t.type),We(t),null;case 19:if(B(Pe),n=t.memoizedState,n===null)return We(t),null;if(a=(t.flags&128)!==0,u=n.rendering,u===null)if(a)fu(n,!1);else{if(Ie!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(u=fi(e),u!==null){for(t.flags|=128,fu(n,!1),e=u.updateQueue,t.updateQueue=e,Ei(t,e),t.subtreeFlags=0,e=l,l=t.child;l!==null;)Zr(l,e),l=l.sibling;return w(Pe,Pe.current&1|2),Ee&&xl(t,n.treeForkCount),t.child}e=e.sibling}n.tail!==null&&St()>Mi&&(t.flags|=128,a=!0,fu(n,!1),t.lanes=4194304)}else{if(!a)if(e=fi(u),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Ei(t,e),fu(n,!0),n.tail===null&&n.tailMode==="hidden"&&!u.alternate&&!Ee)return We(t),null}else 2*St()-n.renderingStartTime>Mi&&l!==536870912&&(t.flags|=128,a=!0,fu(n,!1),t.lanes=4194304);n.isBackwards?(u.sibling=t.child,t.child=u):(e=n.last,e!==null?e.sibling=u:t.child=u,n.last=u)}return n.tail!==null?(e=n.tail,n.rendering=e,n.tail=e.sibling,n.renderingStartTime=St(),e.sibling=null,l=Pe.current,w(Pe,a?l&1|2:l&1),Ee&&xl(t,n.treeForkCount),e):(We(t),null);case 22:case 23:return Yt(t),Wc(),n=t.memoizedState!==null,e!==null?e.memoizedState!==null!==n&&(t.flags|=8192):n&&(t.flags|=8192),n?(l&536870912)!==0&&(t.flags&128)===0&&(We(t),t.subtreeFlags&6&&(t.flags|=8192)):We(t),l=t.updateQueue,l!==null&&Ei(t,l.retryQueue),l=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(l=e.memoizedState.cachePool.pool),n=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(n=t.memoizedState.cachePool.pool),n!==l&&(t.flags|=2048),e!==null&&B(Yn),null;case 24:return l=null,e!==null&&(l=e.memoizedState.cache),t.memoizedState.cache!==l&&(t.flags|=2048),Ul(at),We(t),null;case 25:return null;case 30:return null}throw Error(s(156,t.tag))}function hp(e,t){switch(xc(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Ul(at),Xe(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return fl(t),null;case 31:if(t.memoizedState!==null){if(Yt(t),t.alternate===null)throw Error(s(340));qn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Yt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(s(340));qn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return B(Pe),null;case 4:return Xe(),null;case 10:return Ul(t.type),null;case 22:case 23:return Yt(t),Wc(),e!==null&&B(Yn),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Ul(at),null;case 25:return null;default:return null}}function _s(e,t){switch(xc(t),t.tag){case 3:Ul(at),Xe();break;case 26:case 27:case 5:fl(t);break;case 4:Xe();break;case 31:t.memoizedState!==null&&Yt(t);break;case 13:Yt(t);break;case 19:B(Pe);break;case 10:Ul(t.type);break;case 22:case 23:Yt(t),Wc(),e!==null&&B(Yn);break;case 24:Ul(at)}}function su(e,t){try{var l=t.updateQueue,n=l!==null?l.lastEffect:null;if(n!==null){var a=n.next;l=a;do{if((l.tag&e)===e){n=void 0;var u=l.create,i=l.inst;n=u(),i.destroy=n}l=l.next}while(l!==a)}}catch(c){we(t,t.return,c)}}function rn(e,t,l){try{var n=t.updateQueue,a=n!==null?n.lastEffect:null;if(a!==null){var u=a.next;n=u;do{if((n.tag&e)===e){var i=n.inst,c=i.destroy;if(c!==void 0){i.destroy=void 0,a=t;var d=l,_=c;try{_()}catch(z){we(a,d,z)}}}n=n.next}while(n!==u)}}catch(z){we(t,t.return,z)}}function Ss(e){var t=e.updateQueue;if(t!==null){var l=e.stateNode;try{sf(t,l)}catch(n){we(e,e.return,n)}}}function As(e,t,l){l.props=Zn(e.type,e.memoizedProps),l.state=e.memoizedState;try{l.componentWillUnmount()}catch(n){we(e,t,n)}}function du(e,t){try{var l=e.ref;if(l!==null){switch(e.tag){case 26:case 27:case 5:var n=e.stateNode;break;case 30:n=e.stateNode;break;default:n=e.stateNode}typeof l=="function"?e.refCleanup=l(n):l.current=n}}catch(a){we(e,t,a)}}function yl(e,t){var l=e.ref,n=e.refCleanup;if(l!==null)if(typeof n=="function")try{n()}catch(a){we(e,t,a)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(a){we(e,t,a)}else l.current=null}function Es(e){var t=e.type,l=e.memoizedProps,n=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":l.autoFocus&&n.focus();break e;case"img":l.src?n.src=l.src:l.srcSet&&(n.srcset=l.srcSet)}}catch(a){we(e,e.return,a)}}function Eo(e,t,l){try{var n=e.stateNode;Dp(n,e.type,l,t),n[ht]=t}catch(a){we(e,e.return,a)}}function Ts(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&vn(e.type)||e.tag===4}function To(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Ts(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&vn(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Oo(e,t,l){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(e,t):(t=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,t.appendChild(e),l=l._reactRootContainer,l!=null||t.onclick!==null||(t.onclick=F));else if(n!==4&&(n===27&&vn(e.type)&&(l=e.stateNode,t=null),e=e.child,e!==null))for(Oo(e,t,l),e=e.sibling;e!==null;)Oo(e,t,l),e=e.sibling}function Ti(e,t,l){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?l.insertBefore(e,t):l.appendChild(e);else if(n!==4&&(n===27&&vn(e.type)&&(l=e.stateNode),e=e.child,e!==null))for(Ti(e,t,l),e=e.sibling;e!==null;)Ti(e,t,l),e=e.sibling}function Os(e){var t=e.stateNode,l=e.memoizedProps;try{for(var n=e.type,a=t.attributes;a.length;)t.removeAttributeNode(a[0]);bt(t,n,l),t[lt]=e,t[ht]=l}catch(u){we(e,e.return,u)}}var Rl=!1,ct=!1,Co=!1,Cs=typeof WeakSet=="function"?WeakSet:Set,ft=null;function pp(e,t){if(e=e.containerInfo,ko=Xi,e=jr(e),gc(e)){if("selectionStart"in e)var l={start:e.selectionStart,end:e.selectionEnd};else e:{l=(l=e.ownerDocument)&&l.defaultView||window;var n=l.getSelection&&l.getSelection();if(n&&n.rangeCount!==0){l=n.anchorNode;var a=n.anchorOffset,u=n.focusNode;n=n.focusOffset;try{l.nodeType,u.nodeType}catch{l=null;break e}var i=0,c=-1,d=-1,_=0,z=0,U=e,A=null;t:for(;;){for(var T;U!==l||a!==0&&U.nodeType!==3||(c=i+a),U!==u||n!==0&&U.nodeType!==3||(d=i+n),U.nodeType===3&&(i+=U.nodeValue.length),(T=U.firstChild)!==null;)A=U,U=T;for(;;){if(U===e)break t;if(A===l&&++_===a&&(c=i),A===u&&++z===n&&(d=i),(T=U.nextSibling)!==null)break;U=A,A=U.parentNode}U=T}l=c===-1||d===-1?null:{start:c,end:d}}else l=null}l=l||{start:0,end:0}}else l=null;for(Ko={focusedElem:e,selectionRange:l},Xi=!1,ft=t;ft!==null;)if(t=ft,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ft=e;else for(;ft!==null;){switch(t=ft,u=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(l=0;l title"))),bt(u,n,l),u[lt]=e,nt(u),n=u;break e;case"link":var i=Nd("link","href",a).get(n+(l.href||""));if(i){for(var c=0;cGe&&(i=Ge,Ge=le,le=i);var g=Dr(c,le),p=Dr(c,Ge);if(g&&p&&(T.rangeCount!==1||T.anchorNode!==g.node||T.anchorOffset!==g.offset||T.focusNode!==p.node||T.focusOffset!==p.offset)){var y=U.createRange();y.setStart(g.node,g.offset),T.removeAllRanges(),le>Ge?(T.addRange(y),T.extend(p.node,p.offset)):(y.setEnd(p.node,p.offset),T.addRange(y))}}}}for(U=[],T=c;T=T.parentNode;)T.nodeType===1&&U.push({element:T,left:T.scrollLeft,top:T.scrollTop});for(typeof c.focus=="function"&&c.focus(),c=0;cl?32:l,M.T=null,l=Ho,Ho=null;var u=hn,i=Yl;if(rt=0,Oa=hn=null,Yl=0,(Ne&6)!==0)throw Error(s(331));var c=Ne;if(Ne|=4,js(u.current),ws(u,u.current,i,l),Ne=c,gu(0,!1),ot&&typeof ot.onPostCommitFiberRoot=="function")try{ot.onPostCommitFiberRoot(Cn,u)}catch{}return!0}finally{R.p=a,M.T=n,td(e,t)}}function nd(e,t,l){t=Jt(l,t),t=so(e.stateNode,t,2),e=un(e,t,2),e!==null&&(El(e,2),_l(e))}function we(e,t,l){if(e.tag===3)nd(e,e,l);else for(;t!==null;){if(t.tag===3){nd(t,e,l);break}else if(t.tag===1){var n=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof n.componentDidCatch=="function"&&(dn===null||!dn.has(n))){e=Jt(l,e),l=as(2),n=un(t,l,2),n!==null&&(us(l,n,t,e),El(n,2),_l(n));break}}t=t.return}}function jo(e,t,l){var n=e.pingCache;if(n===null){n=e.pingCache=new bp;var a=new Set;n.set(t,a)}else a=n.get(t),a===void 0&&(a=new Set,n.set(t,a));a.has(l)||(xo=!0,a.add(l),e=Ap.bind(null,e,t,l),t.then(e,e))}function Ap(e,t,l){var n=e.pingCache;n!==null&&n.delete(t),e.pingedLanes|=e.suspendedLanes&l,e.warmLanes&=~l,Ye===e&&(Se&l)===l&&(Ie===4||Ie===3&&(Se&62914560)===Se&&300>St()-zi?(Ne&2)===0&&Ca(e,0):Bo|=l,Ta===Se&&(Ta=0)),_l(e)}function ad(e,t){t===0&&(t=ju()),e=Rn(e,t),e!==null&&(El(e,t),_l(e))}function Ep(e){var t=e.memoizedState,l=0;t!==null&&(l=t.retryLane),ad(e,l)}function Tp(e,t){var l=0;switch(e.tag){case 31:case 13:var n=e.stateNode,a=e.memoizedState;a!==null&&(l=a.retryLane);break;case 19:n=e.stateNode;break;case 22:n=e.stateNode._retryCache;break;default:throw Error(s(314))}n!==null&&n.delete(t),ad(e,l)}function Op(e,t){return Tn(e,t)}var wi=null,Ma=null,qo=!1,Di=!1,Go=!1,mn=0;function _l(e){e!==Ma&&e.next===null&&(Ma===null?wi=Ma=e:Ma=Ma.next=e),Di=!0,qo||(qo=!0,zp())}function gu(e,t){if(!Go&&Di){Go=!0;do for(var l=!1,n=wi;n!==null;){if(e!==0){var a=n.pendingLanes;if(a===0)var u=0;else{var i=n.suspendedLanes,c=n.pingedLanes;u=(1<<31-At(42|e)+1)-1,u&=a&~(i&~c),u=u&201326741?u&201326741|1:u?u|2:0}u!==0&&(l=!0,od(n,u))}else u=Se,u=Wl(n,n===Ye?u:0,n.cancelPendingCommit!==null||n.timeoutHandle!==-1),(u&3)===0||nl(n,u)||(l=!0,od(n,u));n=n.next}while(l);Go=!1}}function Cp(){ud()}function ud(){Di=qo=!1;var e=0;mn!==0&&jp()&&(e=mn);for(var t=St(),l=null,n=wi;n!==null;){var a=n.next,u=id(n,t);u===0?(n.next=null,l===null?wi=a:l.next=a,a===null&&(Ma=l)):(l=n,(e!==0||(u&3)!==0)&&(Di=!0)),n=a}rt!==0&&rt!==5||gu(e),mn!==0&&(mn=0)}function id(e,t){for(var l=e.suspendedLanes,n=e.pingedLanes,a=e.expirationTimes,u=e.pendingLanes&-62914561;0c)break;var z=d.transferSize,U=d.initiatorType;z&&vd(U)&&(d=d.responseEnd,i+=z*(d"u"?null:document;function Md(e,t,l){var n=xa;if(n&&typeof t=="string"&&t){var a=o(t);a='link[rel="'+e+'"][href="'+a+'"]',typeof l=="string"&&(a+='[crossorigin="'+l+'"]'),zd.has(a)||(zd.add(a),e={rel:e,crossOrigin:l,href:t},n.querySelector(a)===null&&(t=n.createElement("link"),bt(t,"link",e),nt(t),n.head.appendChild(t)))}}function Zp(e){Vl.D(e),Md("dns-prefetch",e,null)}function kp(e,t){Vl.C(e,t),Md("preconnect",e,t)}function Kp(e,t,l){Vl.L(e,t,l);var n=xa;if(n&&e&&t){var a='link[rel="preload"][as="'+o(t)+'"]';t==="image"&&l&&l.imageSrcSet?(a+='[imagesrcset="'+o(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(a+='[imagesizes="'+o(l.imageSizes)+'"]')):a+='[href="'+o(e)+'"]';var u=a;switch(t){case"style":u=Ba(e);break;case"script":u=Ua(e)}tl.has(u)||(e=ee({rel:"preload",href:t==="image"&&l&&l.imageSrcSet?void 0:e,as:t},l),tl.set(u,e),n.querySelector(a)!==null||t==="style"&&n.querySelector(Au(u))||t==="script"&&n.querySelector(Eu(u))||(t=n.createElement("link"),bt(t,"link",e),nt(t),n.head.appendChild(t)))}}function Jp(e,t){Vl.m(e,t);var l=xa;if(l&&e){var n=t&&typeof t.as=="string"?t.as:"script",a='link[rel="modulepreload"][as="'+o(n)+'"][href="'+o(e)+'"]',u=a;switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=Ua(e)}if(!tl.has(u)&&(e=ee({rel:"modulepreload",href:e},t),tl.set(u,e),l.querySelector(a)===null)){switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(Eu(u)))return}n=l.createElement("link"),bt(n,"link",e),nt(n),l.head.appendChild(n)}}}function Fp(e,t,l){Vl.S(e,t,l);var n=xa;if(n&&e){var a=Jl(n).hoistableStyles,u=Ba(e);t=t||"default";var i=a.get(u);if(!i){var c={loading:0,preload:null};if(i=n.querySelector(Au(u)))c.loading=5;else{e=ee({rel:"stylesheet",href:e,"data-precedence":t},l),(l=tl.get(u))&&tr(e,l);var d=i=n.createElement("link");nt(d),bt(d,"link",e),d._p=new Promise(function(_,z){d.onload=_,d.onerror=z}),d.addEventListener("load",function(){c.loading|=1}),d.addEventListener("error",function(){c.loading|=2}),c.loading|=4,Li(i,t,n)}i={type:"stylesheet",instance:i,count:1,state:c},a.set(u,i)}}}function $p(e,t){Vl.X(e,t);var l=xa;if(l&&e){var n=Jl(l).hoistableScripts,a=Ua(e),u=n.get(a);u||(u=l.querySelector(Eu(a)),u||(e=ee({src:e,async:!0},t),(t=tl.get(a))&&lr(e,t),u=l.createElement("script"),nt(u),bt(u,"link",e),l.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},n.set(a,u))}}function Ip(e,t){Vl.M(e,t);var l=xa;if(l&&e){var n=Jl(l).hoistableScripts,a=Ua(e),u=n.get(a);u||(u=l.querySelector(Eu(a)),u||(e=ee({src:e,async:!0,type:"module"},t),(t=tl.get(a))&&lr(e,t),u=l.createElement("script"),nt(u),bt(u,"link",e),l.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},n.set(a,u))}}function xd(e,t,l,n){var a=(a=de.current)?Gi(a):null;if(!a)throw Error(s(446));switch(e){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(t=Ba(l.href),l=Jl(a).hoistableStyles,n=l.get(t),n||(n={type:"style",instance:null,count:0,state:null},l.set(t,n)),n):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){e=Ba(l.href);var u=Jl(a).hoistableStyles,i=u.get(e);if(i||(a=a.ownerDocument||a,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(e,i),(u=a.querySelector(Au(e)))&&!u._p&&(i.instance=u,i.state.loading=5),tl.has(e)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},tl.set(e,l),u||Pp(a,e,l,i.state))),t&&n===null)throw Error(s(528,""));return i}if(t&&n!==null)throw Error(s(529,""));return null;case"script":return t=l.async,l=l.src,typeof l=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Ua(l),l=Jl(a).hoistableScripts,n=l.get(t),n||(n={type:"script",instance:null,count:0,state:null},l.set(t,n)),n):{type:"void",instance:null,count:0,state:null};default:throw Error(s(444,e))}}function Ba(e){return'href="'+o(e)+'"'}function Au(e){return'link[rel="stylesheet"]['+e+"]"}function Bd(e){return ee({},e,{"data-precedence":e.precedence,precedence:null})}function Pp(e,t,l,n){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?n.loading=1:(t=e.createElement("link"),n.preload=t,t.addEventListener("load",function(){return n.loading|=1}),t.addEventListener("error",function(){return n.loading|=2}),bt(t,"link",l),nt(t),e.head.appendChild(t))}function Ua(e){return'[src="'+o(e)+'"]'}function Eu(e){return"script[async]"+e}function Ud(e,t,l){if(t.count++,t.instance===null)switch(t.type){case"style":var n=e.querySelector('style[data-href~="'+o(l.href)+'"]');if(n)return t.instance=n,nt(n),n;var a=ee({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return n=(e.ownerDocument||e).createElement("style"),nt(n),bt(n,"style",a),Li(n,l.precedence,e),t.instance=n;case"stylesheet":a=Ba(l.href);var u=e.querySelector(Au(a));if(u)return t.state.loading|=4,t.instance=u,nt(u),u;n=Bd(l),(a=tl.get(a))&&tr(n,a),u=(e.ownerDocument||e).createElement("link"),nt(u);var i=u;return i._p=new Promise(function(c,d){i.onload=c,i.onerror=d}),bt(u,"link",n),t.state.loading|=4,Li(u,l.precedence,e),t.instance=u;case"script":return u=Ua(l.src),(a=e.querySelector(Eu(u)))?(t.instance=a,nt(a),a):(n=l,(a=tl.get(u))&&(n=ee({},l),lr(n,a)),e=e.ownerDocument||e,a=e.createElement("script"),nt(a),bt(a,"link",n),e.head.appendChild(a),t.instance=a);case"void":return null;default:throw Error(s(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(n=t.instance,t.state.loading|=4,Li(n,l.precedence,e));return t.instance}function Li(e,t,l){for(var n=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),a=n.length?n[n.length-1]:null,u=a,i=0;i title"):null)}function em(e,t,l){if(l===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return e=t.disabled,typeof t.precedence=="string"&&e==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function wd(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function tm(e,t,l,n){if(l.type==="stylesheet"&&(typeof n.media!="string"||matchMedia(n.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var a=Ba(n.href),u=t.querySelector(Au(a));if(u){t=u._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Vi.bind(e),t.then(e,e)),l.state.loading|=4,l.instance=u,nt(u);return}u=t.ownerDocument||t,n=Bd(n),(a=tl.get(a))&&tr(n,a),u=u.createElement("link"),nt(u);var i=u;i._p=new Promise(function(c,d){i.onload=c,i.onerror=d}),bt(u,"link",n),l.instance=u}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(l,t),(t=l.state.preload)&&(l.state.loading&3)===0&&(e.count++,l=Vi.bind(e),t.addEventListener("load",l),t.addEventListener("error",l))}}var nr=0;function lm(e,t){return e.stylesheets&&e.count===0&&Wi(e,e.stylesheets),0nr?50:800)+t);return e.unsuspend=l,function(){e.unsuspend=null,clearTimeout(n),clearTimeout(a)}}:null}function Vi(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Wi(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Qi=null;function Wi(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Qi=new Map,t.forEach(nm,e),Qi=null,Vi.call(e))}function nm(e,t){if(!(t.state.loading&4)){var l=Qi.get(e);if(l)var n=l.get(null);else{l=new Map,Qi.set(e,l);for(var a=e.querySelectorAll("link[data-precedence],style[data-precedence]"),u=0;u"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(O)}catch(r){console.error(r)}}return O(),dr.exports=_m(),dr.exports}var Am=Sm();function Em(O,r){O.terminate=function(){const b=()=>{};this.onerror=b,this.onmessage=b,this.onopen=b;const s=new Date,v=Math.random().toString().substring(2,8),N=this.onclose;this.onclose=I=>{const W=new Date().getTime()-s.getTime();r(`Discarded socket (#${v}) closed after ${W}ms, with code/reason: ${I.code}/${I.reason}`)},this.close(),N?.call(O,{code:4001,reason:`Quick discarding socket (#${v}) without waiting for the shutdown sequence.`,wasClean:!1})}}const Uu={LF:` +`,NULL:"\0"};class An{get body(){return!this._body&&this.isBinaryBody&&(this._body=new TextDecoder().decode(this._binaryBody)),this._body||""}get binaryBody(){return!this._binaryBody&&!this.isBinaryBody&&(this._binaryBody=new TextEncoder().encode(this._body)),this._binaryBody}constructor(r){const{command:b,headers:s,body:v,binaryBody:N,escapeHeaderValues:I,skipContentLengthHeader:W}=r;this.command=b,this.headers=Object.assign({},s||{}),N?(this._binaryBody=N,this.isBinaryBody=!0):(this._body=v||"",this.isBinaryBody=!1),this.escapeHeaderValues=I||!1,this.skipContentLengthHeader=W||!1}static fromRawFrame(r,b){const s={},v=N=>N.replace(/^\s+|\s+$/g,"");for(const N of r.headers.reverse()){N.indexOf(":");const I=v(N[0]);let W=v(N[1]);b&&r.command!=="CONNECT"&&r.command!=="CONNECTED"&&(W=An.hdrValueUnEscape(W)),s[I]=W}return new An({command:r.command,headers:s,binaryBody:r.binaryBody,escapeHeaderValues:b})}toString(){return this.serializeCmdAndHeaders()}serialize(){const r=this.serializeCmdAndHeaders();return this.isBinaryBody?An.toUnit8Array(r,this._binaryBody).buffer:r+this._body+Uu.NULL}serializeCmdAndHeaders(){const r=[this.command];this.skipContentLengthHeader&&delete this.headers["content-length"];for(const b of Object.keys(this.headers||{})){const s=this.headers[b];this.escapeHeaderValues&&this.command!=="CONNECT"&&this.command!=="CONNECTED"?r.push(`${b}:${An.hdrValueEscape(`${s}`)}`):r.push(`${b}:${s}`)}return(this.isBinaryBody||!this.isBodyEmpty()&&!this.skipContentLengthHeader)&&r.push(`content-length:${this.bodyLength()}`),r.join(Uu.LF)+Uu.LF+Uu.LF}isBodyEmpty(){return this.bodyLength()===0}bodyLength(){const r=this.binaryBody;return r?r.length:0}static sizeOfUTF8(r){return r?new TextEncoder().encode(r).length:0}static toUnit8Array(r,b){const s=new TextEncoder().encode(r),v=new Uint8Array([0]),N=new Uint8Array(s.length+b.length+v.length);return N.set(s),N.set(b,s.length),N.set(v,s.length+b.length),N}static marshall(r){return new An(r).serialize()}static hdrValueEscape(r){return r.replace(/\\/g,"\\\\").replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/:/g,"\\c")}static hdrValueUnEscape(r){return r.replace(/\\r/g,"\r").replace(/\\n/g,` +`).replace(/\\c/g,":").replace(/\\\\/g,"\\")}}const ah=0,Ii=10,Pi=13,Tm=58;class Om{constructor(r,b){this.onFrame=r,this.onIncomingPing=b,this._encoder=new TextEncoder,this._decoder=new TextDecoder,this._token=[],this._initState()}parseChunk(r,b=!1){let s;if(typeof r=="string"?s=this._encoder.encode(r):s=new Uint8Array(r),b&&s[s.length-1]!==0){const v=new Uint8Array(s.length+1);v.set(s,0),v[s.length]=0,s=v}for(let v=0;vb[0]==="content-length")[0];r?(this._bodyBytesRemaining=parseInt(r[1],10),this._onByte=this._collectBodyFixedSize):this._onByte=this._collectBodyNullTerminated}_collectBodyNullTerminated(r){if(r===ah){this._retrievedBody();return}this._consumeByte(r)}_collectBodyFixedSize(r){if(this._bodyBytesRemaining--===0){this._retrievedBody();return}this._consumeByte(r)}_retrievedBody(){this._results.binaryBody=this._consumeTokenAsRaw();try{this.onFrame(this._results)}catch(r){console.log("Ignoring an exception thrown by a frame handler. Original exception: ",r)}this._initState()}_consumeByte(r){this._token.push(r)}_consumeTokenAsUTF8(){return this._decoder.decode(this._consumeTokenAsRaw())}_consumeTokenAsRaw(){const r=new Uint8Array(this._token);return this._token=[],r}_initState(){this._results={command:void 0,headers:[],binaryBody:void 0},this._token=[],this._headerKey=void 0,this._onByte=this._collectFrame}}var En;(function(O){O[O.CONNECTING=0]="CONNECTING",O[O.OPEN=1]="OPEN",O[O.CLOSING=2]="CLOSING",O[O.CLOSED=3]="CLOSED"})(En||(En={}));var rl;(function(O){O[O.ACTIVE=0]="ACTIVE",O[O.DEACTIVATING=1]="DEACTIVATING",O[O.INACTIVE=2]="INACTIVE"})(rl||(rl={}));var tc;(function(O){O[O.LINEAR=0]="LINEAR",O[O.EXPONENTIAL=1]="EXPONENTIAL"})(tc||(tc={}));var Nu;(function(O){O.Interval="interval",O.Worker="worker"})(Nu||(Nu={}));class Cm{constructor(r,b=Nu.Interval,s){this._interval=r,this._strategy=b,this._debug=s,this._workerScript=` + var startTime = Date.now(); + setInterval(function() { + self.postMessage(Date.now() - startTime); + }, ${this._interval}); + `}start(r){this.stop(),this.shouldUseWorker()?this.runWorker(r):this.runInterval(r)}stop(){this.disposeWorker(),this.disposeInterval()}shouldUseWorker(){return typeof Worker<"u"&&this._strategy===Nu.Worker}runWorker(r){this._debug("Using runWorker for outgoing pings"),this._worker||(this._worker=new Worker(URL.createObjectURL(new Blob([this._workerScript],{type:"text/javascript"}))),this._worker.onmessage=b=>r(b.data))}runInterval(r){if(this._debug("Using runInterval for outgoing pings"),!this._timer){const b=Date.now();this._timer=setInterval(()=>{r(Date.now()-b)},this._interval)}}disposeWorker(){this._worker&&(this._worker.terminate(),delete this._worker,this._debug("Outgoing ping disposeWorker"))}disposeInterval(){this._timer&&(clearInterval(this._timer),delete this._timer,this._debug("Outgoing ping disposeInterval"))}}class Ot{constructor(r){this.versions=r}supportedVersions(){return this.versions.join(",")}protocolVersions(){return this.versions.map(r=>`v${r.replace(".","")}.stomp`)}}Ot.V1_0="1.0";Ot.V1_1="1.1";Ot.V1_2="1.2";Ot.default=new Ot([Ot.V1_2,Ot.V1_1,Ot.V1_0]);class zm{get connectedVersion(){return this._connectedVersion}get connected(){return this._connected}constructor(r,b,s){this._client=r,this._webSocket=b,this._connected=!1,this._serverFrameHandlers={CONNECTED:v=>{this.debug(`connected to server ${v.headers.server}`),this._connected=!0,this._connectedVersion=v.headers.version,this._connectedVersion===Ot.V1_2&&(this._escapeHeaderValues=!0),this._setupHeartbeat(v.headers),this.onConnect(v)},MESSAGE:v=>{const N=v.headers.subscription,I=this._subscriptions[N]||this.onUnhandledMessage,W=v,H=this,S=this._connectedVersion===Ot.V1_2?W.headers.ack:W.headers["message-id"];W.ack=(ae={})=>H.ack(S,N,ae),W.nack=(ae={})=>H.nack(S,N,ae),I(W)},RECEIPT:v=>{const N=this._receiptWatchers[v.headers["receipt-id"]];N?(N(v),delete this._receiptWatchers[v.headers["receipt-id"]]):this.onUnhandledReceipt(v)},ERROR:v=>{this.onStompError(v)}},this._counter=0,this._subscriptions={},this._receiptWatchers={},this._partialData="",this._escapeHeaderValues=!1,this._lastServerActivityTS=Date.now(),this.debug=s.debug,this.stompVersions=s.stompVersions,this.connectHeaders=s.connectHeaders,this.disconnectHeaders=s.disconnectHeaders,this.heartbeatIncoming=s.heartbeatIncoming,this.heartbeatToleranceMultiplier=s.heartbeatGracePeriods,this.heartbeatOutgoing=s.heartbeatOutgoing,this.splitLargeFrames=s.splitLargeFrames,this.maxWebSocketChunkSize=s.maxWebSocketChunkSize,this.forceBinaryWSFrames=s.forceBinaryWSFrames,this.logRawCommunication=s.logRawCommunication,this.appendMissingNULLonIncoming=s.appendMissingNULLonIncoming,this.discardWebsocketOnCommFailure=s.discardWebsocketOnCommFailure,this.onConnect=s.onConnect,this.onDisconnect=s.onDisconnect,this.onStompError=s.onStompError,this.onWebSocketClose=s.onWebSocketClose,this.onWebSocketError=s.onWebSocketError,this.onUnhandledMessage=s.onUnhandledMessage,this.onUnhandledReceipt=s.onUnhandledReceipt,this.onUnhandledFrame=s.onUnhandledFrame,this.onHeartbeatReceived=s.onHeartbeatReceived,this.onHeartbeatLost=s.onHeartbeatLost}start(){const r=new Om(b=>{const s=An.fromRawFrame(b,this._escapeHeaderValues);this.logRawCommunication||this.debug(`<<< ${s}`),(this._serverFrameHandlers[s.command]||this.onUnhandledFrame)(s)},()=>{this.debug("<<< PONG"),this.onHeartbeatReceived()});this._webSocket.onmessage=b=>{if(this.debug("Received data"),this._lastServerActivityTS=Date.now(),this.logRawCommunication){const s=b.data instanceof ArrayBuffer?new TextDecoder().decode(b.data):b.data;this.debug(`<<< ${s}`)}r.parseChunk(b.data,this.appendMissingNULLonIncoming)},this._webSocket.onclose=b=>{this.debug(`Connection closed to ${this._webSocket.url}`),this._cleanUp(),this.onWebSocketClose(b)},this._webSocket.onerror=b=>{this.onWebSocketError(b)},this._webSocket.onopen=()=>{const b=Object.assign({},this.connectHeaders);this.debug("Web Socket Opened..."),b["accept-version"]=this.stompVersions.supportedVersions(),b["heart-beat"]=[this.heartbeatOutgoing,this.heartbeatIncoming].join(","),this._transmit({command:"CONNECT",headers:b})}}_setupHeartbeat(r){if(r.version!==Ot.V1_1&&r.version!==Ot.V1_2||!r["heart-beat"])return;const[b,s]=r["heart-beat"].split(",").map(v=>parseInt(v,10));if(this.heartbeatOutgoing!==0&&s!==0){const v=Math.max(this.heartbeatOutgoing,s);this.debug(`send PING every ${v}ms`),this._pinger=new Cm(v,this._client.heartbeatStrategy,this.debug),this._pinger.start(()=>{this._webSocket.readyState===En.OPEN&&(this._webSocket.send(Uu.LF),this.debug(">>> PING"))})}if(this.heartbeatIncoming!==0&&b!==0){const v=Math.max(this.heartbeatIncoming,b);this.debug(`check PONG every ${v}ms`),this._ponger=setInterval(()=>{const N=Date.now()-this._lastServerActivityTS;N>v*this.heartbeatToleranceMultiplier&&(this.debug(`did not receive server activity for the last ${N}ms`),this.onHeartbeatLost(),this._closeOrDiscardWebsocket())},v)}}_closeOrDiscardWebsocket(){this.discardWebsocketOnCommFailure?(this.debug("Discarding websocket, the underlying socket may linger for a while"),this.discardWebsocket()):(this.debug("Issuing close on the websocket"),this._closeWebsocket())}forceDisconnect(){this._webSocket&&(this._webSocket.readyState===En.CONNECTING||this._webSocket.readyState===En.OPEN)&&this._closeOrDiscardWebsocket()}_closeWebsocket(){this._webSocket.onmessage=()=>{},this._webSocket.close()}discardWebsocket(){typeof this._webSocket.terminate!="function"&&Em(this._webSocket,r=>this.debug(r)),this._webSocket.terminate()}_transmit(r){const{command:b,headers:s,body:v,binaryBody:N,skipContentLengthHeader:I}=r,W=new An({command:b,headers:s,body:v,binaryBody:N,escapeHeaderValues:this._escapeHeaderValues,skipContentLengthHeader:I});let H=W.serialize();if(this.logRawCommunication?this.debug(`>>> ${H}`):this.debug(`>>> ${W}`),this.forceBinaryWSFrames&&typeof H=="string"&&(H=new TextEncoder().encode(H)),typeof H!="string"||!this.splitLargeFrames)this._webSocket.send(H);else{let S=H;for(;S.length>0;){const ae=S.substring(0,this.maxWebSocketChunkSize);S=S.substring(this.maxWebSocketChunkSize),this._webSocket.send(ae),this.debug(`chunk sent = ${ae.length}, remaining = ${S.length}`)}}}dispose(){if(this.connected)try{const r=Object.assign({},this.disconnectHeaders);r.receipt||(r.receipt=`close-${this._counter++}`),this.watchForReceipt(r.receipt,b=>{this._closeWebsocket(),this._cleanUp(),this.onDisconnect(b)}),this._transmit({command:"DISCONNECT",headers:r})}catch(r){this.debug(`Ignoring error during disconnect ${r}`)}else(this._webSocket.readyState===En.CONNECTING||this._webSocket.readyState===En.OPEN)&&this._closeWebsocket()}_cleanUp(){this._connected=!1,this._pinger&&(this._pinger.stop(),this._pinger=void 0),this._ponger&&(clearInterval(this._ponger),this._ponger=void 0)}publish(r){const{destination:b,headers:s,body:v,binaryBody:N,skipContentLengthHeader:I}=r,W=Object.assign({destination:b},s);this._transmit({command:"SEND",headers:W,body:v,binaryBody:N,skipContentLengthHeader:I})}watchForReceipt(r,b){this._receiptWatchers[r]=b}subscribe(r,b,s={}){s=Object.assign({},s),s.id||(s.id=`sub-${this._counter++}`),s.destination=r,this._subscriptions[s.id]=b,this._transmit({command:"SUBSCRIBE",headers:s});const v=this;return{id:s.id,unsubscribe(N){return v.unsubscribe(s.id,N)}}}unsubscribe(r,b={}){b=Object.assign({},b),delete this._subscriptions[r],b.id=r,this._transmit({command:"UNSUBSCRIBE",headers:b})}begin(r){const b=r||`tx-${this._counter++}`;this._transmit({command:"BEGIN",headers:{transaction:b}});const s=this;return{id:b,commit(){s.commit(b)},abort(){s.abort(b)}}}commit(r){this._transmit({command:"COMMIT",headers:{transaction:r}})}abort(r){this._transmit({command:"ABORT",headers:{transaction:r}})}ack(r,b,s={}){s=Object.assign({},s),this._connectedVersion===Ot.V1_2?s.id=r:s["message-id"]=r,s.subscription=b,this._transmit({command:"ACK",headers:s})}nack(r,b,s={}){return s=Object.assign({},s),this._connectedVersion===Ot.V1_2?s.id=r:s["message-id"]=r,s.subscription=b,this._transmit({command:"NACK",headers:s})}}class Mm{get webSocket(){return this._stompHandler?._webSocket}get disconnectHeaders(){return this._disconnectHeaders}set disconnectHeaders(r){this._disconnectHeaders=r,this._stompHandler&&(this._stompHandler.disconnectHeaders=this._disconnectHeaders)}get connected(){return!!this._stompHandler&&this._stompHandler.connected}get connectedVersion(){return this._stompHandler?this._stompHandler.connectedVersion:void 0}get active(){return this.state===rl.ACTIVE}_changeState(r){this.state=r,this.onChangeState(r)}constructor(r={}){this.stompVersions=Ot.default,this.connectionTimeout=0,this.reconnectDelay=5e3,this._nextReconnectDelay=0,this.maxReconnectDelay=900*1e3,this.reconnectTimeMode=tc.LINEAR,this.heartbeatIncoming=1e4,this.heartbeatToleranceMultiplier=2,this.heartbeatOutgoing=1e4,this.heartbeatStrategy=Nu.Interval,this.splitLargeFrames=!1,this.maxWebSocketChunkSize=8*1024,this.forceBinaryWSFrames=!1,this.appendMissingNULLonIncoming=!1,this.discardWebsocketOnCommFailure=!1,this.state=rl.INACTIVE;const b=()=>{};this.debug=b,this.beforeConnect=b,this.onConnect=b,this.onDisconnect=b,this.onUnhandledMessage=b,this.onUnhandledReceipt=b,this.onUnhandledFrame=b,this.onHeartbeatReceived=b,this.onHeartbeatLost=b,this.onStompError=b,this.onWebSocketClose=b,this.onWebSocketError=b,this.logRawCommunication=!1,this.onChangeState=b,this.connectHeaders={},this._disconnectHeaders={},this.configure(r)}configure(r){Object.assign(this,r),this.maxReconnectDelay>0&&this.maxReconnectDelay{if(this.active){this.debug("Already ACTIVE, ignoring request to activate");return}this._changeState(rl.ACTIVE),this._nextReconnectDelay=this.reconnectDelay,this._connect()};this.state===rl.DEACTIVATING?(this.debug("Waiting for deactivation to finish before activating"),this.deactivate().then(()=>{r()})):r()}async _connect(){if(await this.beforeConnect(this),this._stompHandler){this.debug("There is already a stompHandler, skipping the call to connect");return}if(!this.active){this.debug("Client has been marked inactive, will not attempt to connect");return}this.connectionTimeout>0&&(this._connectionWatcher&&clearTimeout(this._connectionWatcher),this._connectionWatcher=setTimeout(()=>{this.connected||(this.debug(`Connection not established in ${this.connectionTimeout}ms, closing socket`),this.forceDisconnect())},this.connectionTimeout)),this.debug("Opening Web Socket...");const r=this._createWebSocket();this._stompHandler=new zm(this,r,{debug:this.debug,stompVersions:this.stompVersions,connectHeaders:this.connectHeaders,disconnectHeaders:this._disconnectHeaders,heartbeatIncoming:this.heartbeatIncoming,heartbeatGracePeriods:this.heartbeatToleranceMultiplier,heartbeatOutgoing:this.heartbeatOutgoing,heartbeatStrategy:this.heartbeatStrategy,splitLargeFrames:this.splitLargeFrames,maxWebSocketChunkSize:this.maxWebSocketChunkSize,forceBinaryWSFrames:this.forceBinaryWSFrames,logRawCommunication:this.logRawCommunication,appendMissingNULLonIncoming:this.appendMissingNULLonIncoming,discardWebsocketOnCommFailure:this.discardWebsocketOnCommFailure,onConnect:b=>{if(this._connectionWatcher&&(clearTimeout(this._connectionWatcher),this._connectionWatcher=void 0),this._nextReconnectDelay=this.reconnectDelay,!this.active){this.debug("STOMP got connected while deactivate was issued, will disconnect now"),this._disposeStompHandler();return}this.onConnect(b)},onDisconnect:b=>{this.onDisconnect(b)},onStompError:b=>{this.onStompError(b)},onWebSocketClose:b=>{this._stompHandler=void 0,this.state===rl.DEACTIVATING&&this._changeState(rl.INACTIVE),this.onWebSocketClose(b),this.active&&this._schedule_reconnect()},onWebSocketError:b=>{this.onWebSocketError(b)},onUnhandledMessage:b=>{this.onUnhandledMessage(b)},onUnhandledReceipt:b=>{this.onUnhandledReceipt(b)},onUnhandledFrame:b=>{this.onUnhandledFrame(b)},onHeartbeatReceived:()=>{this.onHeartbeatReceived()},onHeartbeatLost:()=>{this.onHeartbeatLost()}}),this._stompHandler.start()}_createWebSocket(){let r;if(this.webSocketFactory)r=this.webSocketFactory();else if(this.brokerURL)r=new WebSocket(this.brokerURL,this.stompVersions.protocolVersions());else throw new Error("Either brokerURL or webSocketFactory must be provided");return r.binaryType="arraybuffer",r}_schedule_reconnect(){this._nextReconnectDelay>0&&(this.debug(`STOMP: scheduling reconnection in ${this._nextReconnectDelay}ms`),this._reconnector=setTimeout(()=>{this.reconnectTimeMode===tc.EXPONENTIAL&&(this._nextReconnectDelay=this._nextReconnectDelay*2,this.maxReconnectDelay!==0&&(this._nextReconnectDelay=Math.min(this._nextReconnectDelay,this.maxReconnectDelay))),this._connect()},this._nextReconnectDelay))}async deactivate(r={}){const b=r.force||!1,s=this.active;let v;if(this.state===rl.INACTIVE)return this.debug("Already INACTIVE, nothing more to do"),Promise.resolve();if(this._changeState(rl.DEACTIVATING),this._nextReconnectDelay=0,this._reconnector&&(clearTimeout(this._reconnector),this._reconnector=void 0),this._stompHandler&&this.webSocket.readyState!==En.CLOSED){const N=this._stompHandler.onWebSocketClose;v=new Promise((I,W)=>{this._stompHandler.onWebSocketClose=H=>{N(H),I()}})}else return this._changeState(rl.INACTIVE),Promise.resolve();return b?this._stompHandler?.discardWebsocket():s&&this._disposeStompHandler(),v}forceDisconnect(){this._stompHandler&&this._stompHandler.forceDisconnect()}_disposeStompHandler(){this._stompHandler&&this._stompHandler.dispose()}publish(r){this._checkConnection(),this._stompHandler.publish(r)}_checkConnection(){if(!this.connected)throw new TypeError("There is no underlying STOMP connection")}watchForReceipt(r,b){this._checkConnection(),this._stompHandler.watchForReceipt(r,b)}subscribe(r,b,s={}){return this._checkConnection(),this._stompHandler.subscribe(r,b,s)}unsubscribe(r,b={}){this._checkConnection(),this._stompHandler.unsubscribe(r,b)}begin(r){return this._checkConnection(),this._stompHandler.begin(r)}commit(r){this._checkConnection(),this._stompHandler.commit(r)}abort(r){this._checkConnection(),this._stompHandler.abort(r)}ack(r,b,s={}){this._checkConnection(),this._stompHandler.ack(r,b,s)}nack(r,b,s={}){this._checkConnection(),this._stompHandler.nack(r,b,s)}}const rh=gt.createContext(null),br=()=>{const O=gt.useContext(rh);if(!O)throw new Error("useGame must be used within a GameProvider");return O},xm=({children:O})=>{const[r,b]=gt.useState(null),[s,v]=gt.useState(!1),[N,I]=gt.useState(null),[W,H]=gt.useState(null),[S,ae]=gt.useState(null);gt.useEffect(()=>{const Te=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`,Be=new Mm({brokerURL:Te,reconnectDelay:5e3,debug:Le=>{console.log(Le)},onConnect:Le=>{console.log("Connected: "+Le),v(!0),Be.subscribe("/user/queue/errors",D=>{ae(D.body)}),Be.subscribe("/user/queue/player-info",D=>{const V=JSON.parse(D.body);H(V),console.log("Current player set:",V)}),Be.subscribe("/user/queue/created",D=>{const V=JSON.parse(D.body);I(V)})},onStompError:Le=>{console.error("Broker reported error: "+Le.headers.message),console.error("Additional details: "+Le.body),ae(Le.headers.message)},onWebSocketClose:()=>{v(!1),console.log("WebSocket connection closed")}});return Be.activate(),b(Be),()=>{Be.deactivate()}},[]),gt.useEffect(()=>{if(s&&r&&N){const Ce=r.subscribe(`/topic/room/${N.roomId}`,Te=>{const Be=JSON.parse(Te.body);I(Be)});return()=>Ce.unsubscribe()}},[s,r,N?.roomId]);const ee=gt.useCallback((Ce,Te)=>{r&&s&&r.publish({destination:"/app/create",body:JSON.stringify({playerName:Ce,userId:Te})})},[r,s]),_e=gt.useCallback((Ce,Te,Be)=>{r&&s&&r.publish({destination:"/app/join",body:JSON.stringify({roomId:Ce,playerName:Te,userId:Be})})},[r,s]),Ke=gt.useCallback(Ce=>{r&&s&&N&&r.publish({destination:"/app/team/join",body:JSON.stringify({roomId:N.roomId,teamId:Ce})})},[r,s,N]);return P.jsx(rh.Provider,{value:{connected:s,room:N,currentPlayer:W,error:S,createRoom:ee,joinRoom:_e,joinTeam:Ke},children:O})};var ec={},Bu={},uh={},ih;function Bm(){return ih||(ih=1,(function(){var O={},r="";try{r=location.hash.toString()}catch{}var b=H(r),s=Le("initParams");if(s)for(var v in s)typeof b[v]>"u"&&(b[v]=s[v]);Be("initParams",b);var N=!1,I;try{if(N=window.parent!=null&&window!=window.parent,N){window.addEventListener("message",function(D){if(D.source===window.parent){try{var V=JSON.parse(D.data)}catch{return}if(!(!V||!V.eventType))if(V.eventType=="set_custom_style")D.origin==="https://web.telegram.org"&&(I.innerHTML=V.eventData);else if(V.eventType=="reload_iframe"){try{window.parent.postMessage(JSON.stringify({eventType:"iframe_will_reload"}),"*")}catch{}location.reload()}else _e(V.eventType,V.eventData)}}),I=document.createElement("style"),document.head.appendChild(I);try{window.parent.postMessage(JSON.stringify({eventType:"iframe_ready",eventData:{reload_supported:!0}}),"*")}catch{}}}catch{}function W(D){try{return D=D.replace(/\+/g,"%20"),decodeURIComponent(D)}catch{return D}}function H(D){D=D.replace(/^#/,"");var V={};if(!D.length)return V;if(D.indexOf("=")<0&&D.indexOf("?")<0)return V._path=W(D),V;var ue=D.indexOf("?");if(ue>=0){var Ue=D.substr(0,ue);V._path=W(Ue),D=D.substr(ue+1)}var De=S(D);for(var re in De)V[re]=De[re];return V}function S(D){var V={};if(!D.length)return V;var ue=D.split("&"),Ue,De,re,tt;for(Ue=0;Ue=0?D+"&"+V:Ue.length>0?D+"?"+V:D+V}function ee(D,V,ue){if(V||(V=function(){}),ue===void 0&&(ue=""),console.log("[Telegram.WebView] > postEvent",D,ue),window.TelegramWebviewProxy!==void 0)TelegramWebviewProxy.postEvent(D,JSON.stringify(ue)),V();else if(window.external&&"notify"in window.external)window.external.notify(JSON.stringify({eventType:D,eventData:ue})),V();else if(N)try{var Ue="https://web.telegram.org";Ue="*",window.parent.postMessage(JSON.stringify({eventType:D,eventData:ue}),Ue),V()}catch(De){V(De)}else V({notAvailable:!0})}function _e(D,V){console.log("[Telegram.WebView] < receiveEvent",D,V),Ke(D,function(ue){ue(D,V)})}function Ke(D,V){var ue=O[D];if(!(ue===void 0||!ue.length))for(var Ue=0;Ue0){for(var E=0;Ej?1:-1;return 0}function ce(o){return Gu(S,o)>=0}function qa(o){if(window.Blob)try{return new Blob([o]).size}catch{}for(var f=o.length,h=o.length-1;h>=0;h--){var E=o.charCodeAt(h);E>127&&E<=2047?f++:E>2047&&E<=65535&&(f+=2),E>=56320&&E<=57343&&h--}return f}var Ga=(function(){var o=!1,f={};Object.defineProperty(f,"isVisible",{set:function(J){be({is_visible:J})},get:function(){return o},enumerable:!0});var h=null;r.onEvent("back_button_pressed",E);function E(){G("backButtonClicked")}function C(){return{is_visible:o}}function j(J){return typeof J>"u"&&(J=C()),JSON.stringify(J)}function Z(){return ce("6.1")?!0:(console.warn("[Telegram.WebApp] BackButton is not supported in version "+S),!1)}function Y(){var J=C(),me=j(J);h!==me&&(h=me,r.postEvent("web_app_setup_back_button",!1,J))}function be(J){return Z()&&(typeof J.is_visible<"u"&&(o=!!J.is_visible),Y()),f}return f.onClick=function(J){return Z()&&m("backButtonClicked",J),f},f.offClick=function(J){return Z()&&B("backButtonClicked",J),f},f.show=function(){return be({is_visible:!0})},f.hide=function(){return be({is_visible:!1})},f})(),Et=null,ea={},Fe=0;if(b.tgWebAppDebug){Et=document.createElement("tg-bottom-bar");var lt={display:"flex",gap:"7px",font:"600 14px/18px sans-serif",width:"100%",background:Mn(),position:"fixed",left:"0",right:"0",bottom:"0",margin:"0",padding:"7px",textAlign:"center",boxSizing:"border-box",zIndex:"10000"};for(var ht in lt)Et.style[ht]=lt[ht];document.addEventListener("DOMContentLoaded",function o(f){document.removeEventListener("DOMContentLoaded",o),document.body.appendChild(Et)});var Tl=document.createElement("style");Tl.innerHTML='tg-bottom-button.shine { position: relative; overflow: hidden; } tg-bottom-button.shine:before { content:""; position: absolute; top: 0; width: 100%; height: 100%; background: linear-gradient(120deg, transparent, rgba(255, 255, 255, .2), transparent); animation: tg-bottom-button-shine 5s ease-in-out infinite; } @-webkit-keyframes tg-bottom-button-shine { 0% {left: -100%;} 12%,100% {left: 100%}} @keyframes tg-bottom-button-shine { 0% {left: -100%;} 12%,100% {left: 100%}}',Et.appendChild(Tl)}function ta(){var o=ea.main._bottomButton,f=ea.secondary._bottomButton;o.isVisible||f.isVisible?(Et.style.display="flex",Fe=58,o.isVisible&&f.isVisible&&(f.position=="top"?(Et.style.flexDirection="column-reverse",Fe+=51):f.position=="bottom"?(Et.style.flexDirection="column",Fe+=51):f.position=="left"?Et.style.flexDirection="row-reverse":f.position=="right"&&(Et.style.flexDirection="row"))):(Et.style.display="none",Fe=0),Et.style.background=Mn(),document.documentElement&&(document.documentElement.style.boxSizing="border-box",document.documentElement.style.paddingBottom=Fe+"px"),Fn()}var Lu=function(o){var f=o=="main";if(f)var h="web_app_setup_main_button",E="main_button_pressed",C="mainButtonClicked",j="Continue",Z=function(){return W.button_color||"#2481cc"},Y=function(){return W.button_text_color||"#ffffff"};else var h="web_app_setup_secondary_button",E="secondary_button_pressed",C="secondaryButtonClicked",j="Cancel",Z=function(){return Mn()},Y=function(){return W.button_color||"#2481cc"};var be=!1,J=!0,me=!1,ze=!1,he=o,q=j,Q=!1,F=!1,Ze="left",K={};Object.defineProperty(K,"type",{get:function(){return he},enumerable:!0}),Object.defineProperty(K,"text",{set:function(L){K.setParams({text:L})},get:function(){return q},enumerable:!0}),Object.defineProperty(K,"color",{set:function(L){K.setParams({color:L})},get:function(){return Q||Z()},enumerable:!0}),Object.defineProperty(K,"textColor",{set:function(L){K.setParams({text_color:L})},get:function(){return F||Y()},enumerable:!0}),Object.defineProperty(K,"isVisible",{set:function(L){K.setParams({is_visible:L})},get:function(){return be},enumerable:!0}),Object.defineProperty(K,"isProgressVisible",{get:function(){return ze},enumerable:!0}),Object.defineProperty(K,"isActive",{set:function(L){K.setParams({is_active:L})},get:function(){return J},enumerable:!0}),Object.defineProperty(K,"hasShineEffect",{set:function(L){K.setParams({has_shine_effect:L})},get:function(){return me},enumerable:!0}),f||Object.defineProperty(K,"position",{set:function(L){K.setParams({position:L})},get:function(){return Ze},enumerable:!0});var Re=null;r.onEvent(E,Va);var fe=null;if(b.tgWebAppDebug){fe=document.createElement("tg-bottom-button");var Je={display:"none",width:"100%",height:"44px",borderRadius:"0",background:"no-repeat right center",padding:"13px 15px",textAlign:"center",boxSizing:"border-box"};for(var kt in Je)fe.style[kt]=Je[kt];Et.appendChild(fe),fe.addEventListener("click",Va,!1),fe._bottomButton=K,ea[o]=fe}function Va(){J&&G(C)}function Il(){var L=K.color,zt=K.textColor;if(be){var zl={is_visible:!0,is_active:J,is_progress_visible:ze,text:q,color:L,text_color:zt,has_shine_effect:me&&J&&!ze};f||(zl.position=Ze)}else var zl={is_visible:!1};return zl}function ul(L){return typeof L>"u"&&(L=Il()),JSON.stringify(L)}function Bn(){var L=Il(),zt=ul(L);Re!==zt&&(Re=zt,r.postEvent(h,!1,L),b.tgWebAppDebug&&Un(L))}function Un(L){L.is_visible?(fe.style.display="block",fe.style.opacity=L.is_active?"1":"0.8",fe.style.cursor=L.is_active?"pointer":"auto",fe.disabled=!L.is_active,fe.innerText=L.text,fe.className=L.has_shine_effect?"shine":"",fe.style.backgroundImage=L.is_progress_visible?"url('data:image/svg+xml,"+encodeURIComponent('')+"')":"none",fe.style.backgroundColor=L.color,fe.style.color=L.text_color):fe.style.display="none",ta()}function vl(L){if(typeof L.text<"u"){var zt=ve(L.text);if(!zt.length)throw console.error("[Telegram.WebApp] Bottom button text is required",L.text),Error("WebAppBottomButtonParamInvalid");if(zt.length>64)throw console.error("[Telegram.WebApp] Bottom button text is too long",zt),Error("WebAppBottomButtonParamInvalid");q=zt}if(typeof L.color<"u")if(L.color===!1||L.color===null)Q=!1;else{var zl=Xl(L.color);if(!zl)throw console.error("[Telegram.WebApp] Bottom button color format is invalid",L.color),Error("WebAppBottomButtonParamInvalid");Q=zl}if(typeof L.text_color<"u")if(L.text_color===!1||L.text_color===null)F=!1;else{var Nn=Xl(L.text_color);if(!Nn)throw console.error("[Telegram.WebApp] Bottom button text color format is invalid",L.text_color),Error("WebAppBottomButtonParamInvalid");F=Nn}if(typeof L.is_visible<"u"){if(L.is_visible&&!K.text.length)throw console.error("[Telegram.WebApp] Bottom button text is required"),Error("WebAppBottomButtonParamInvalid");be=!!L.is_visible}if(typeof L.has_shine_effect<"u"&&(me=!!L.has_shine_effect),!f&&typeof L.position<"u"){if(L.position!="left"&&L.position!="right"&&L.position!="top"&&L.position!="bottom")throw console.error("[Telegram.WebApp] Bottom button posiition is invalid",L.position),Error("WebAppBottomButtonParamInvalid");Ze=L.position}return typeof L.is_active<"u"&&(J=!!L.is_active),Bn(),K}return K.setText=function(L){return K.setParams({text:L})},K.onClick=function(L){return m(C,L),K},K.offClick=function(L){return B(C,L),K},K.show=function(){return K.setParams({is_visible:!0})},K.hide=function(){return K.setParams({is_visible:!1})},K.enable=function(){return K.setParams({is_active:!0})},K.disable=function(){return K.setParams({is_active:!1})},K.showProgress=function(L){return J=!!L,ze=!0,Bn(),K},K.hideProgress=function(){return K.isActive||(J=!0),ze=!1,Bn(),K},K.setParams=vl,K},oc=Lu("main"),Yu=Lu("secondary"),Zl=(function(){var o=!1,f={};Object.defineProperty(f,"isVisible",{set:function(J){be({is_visible:J})},get:function(){return o},enumerable:!0});var h=null;r.onEvent("settings_button_pressed",E);function E(){G("settingsButtonClicked")}function C(){return{is_visible:o}}function j(J){return typeof J>"u"&&(J=C()),JSON.stringify(J)}function Z(){return ce("6.10")?!0:(console.warn("[Telegram.WebApp] SettingsButton is not supported in version "+S),!1)}function Y(){var J=C(),me=j(J);h!==me&&(h=me,r.postEvent("web_app_setup_settings_button",!1,J))}function be(J){return Z()&&(typeof J.is_visible<"u"&&(o=!!J.is_visible),Y()),f}return f.onClick=function(J){return Z()&&m("settingsButtonClicked",J),f},f.offClick=function(J){return Z()&&B("settingsButtonClicked",J),f},f.show=function(){return be({is_visible:!0})},f.hide=function(){return be({is_visible:!1})},f})(),La=(function(){var o={};function f(h){if(!ce("6.1"))return console.warn("[Telegram.WebApp] HapticFeedback is not supported in version "+S),o;if(h.type=="impact"){if(h.impact_style!="light"&&h.impact_style!="medium"&&h.impact_style!="heavy"&&h.impact_style!="rigid"&&h.impact_style!="soft")throw console.error("[Telegram.WebApp] Haptic impact style is invalid",h.impact_style),Error("WebAppHapticImpactStyleInvalid")}else if(h.type=="notification"){if(h.notification_type!="error"&&h.notification_type!="success"&&h.notification_type!="warning")throw console.error("[Telegram.WebApp] Haptic notification type is invalid",h.notification_type),Error("WebAppHapticNotificationTypeInvalid")}else if(h.type!="selection_change")throw console.error("[Telegram.WebApp] Haptic feedback type is invalid",h.type),Error("WebAppHapticFeedbackTypeInvalid");return r.postEvent("web_app_trigger_haptic_feedback",!1,h),o}return o.impactOccurred=function(h){return f({type:"impact",impact_style:h})},o.notificationOccurred=function(h){return f({type:"notification",notification_type:h})},o.selectionChanged=function(){return f({type:"selection_change"})},o})(),kl=(function(){var o={};function f(h,E,C){if(!ce("6.9"))throw console.error("[Telegram.WebApp] CloudStorage is not supported in version "+S),Error("WebAppMethodUnsupported");return Ya(h,E,C),o}return o.setItem=function(h,E,C){return f("saveStorageValue",{key:h,value:E},C)},o.getItem=function(h,E){return o.getItems([h],E?function(C,j){C?E(C):E(null,j[h])}:null)},o.getItems=function(h,E){return f("getStorageValues",{keys:h},E)},o.removeItem=function(h,E){return o.removeItems([h],E)},o.removeItems=function(h,E){return f("deleteStorageValues",{keys:h},E)},o.getKeys=function(h){return f("getStorageKeys",{},h)},o})(),Kl=(function(){var o=!1,f=!1,h="unknown",E=!1,C=!1,j=!1,Z="",Y={};Object.defineProperty(Y,"isInited",{get:function(){return o},enumerable:!0}),Object.defineProperty(Y,"isBiometricAvailable",{get:function(){return o&&f},enumerable:!0}),Object.defineProperty(Y,"biometricType",{get:function(){return h||"unknown"},enumerable:!0}),Object.defineProperty(Y,"isAccessRequested",{get:function(){return E},enumerable:!0}),Object.defineProperty(Y,"isAccessGranted",{get:function(){return E&&C},enumerable:!0}),Object.defineProperty(Y,"isBiometricTokenSaved",{get:function(){return j},enumerable:!0}),Object.defineProperty(Y,"deviceId",{get:function(){return Z||""},enumerable:!0});var be={callbacks:[]},J=!1,me=!1,ze=!1;r.onEvent("biometry_info_received",he),r.onEvent("biometry_auth_requested",q),r.onEvent("biometry_token_updated",Q);function he(K,Re){if(o=!0,Re.available?(f=!0,h=Re.type||"unknown",Re.access_requested?(E=!0,C=!!Re.access_granted,j=!!Re.token_saved):(E=!1,C=!1,j=!1)):(f=!1,h="unknown",E=!1,C=!1,j=!1),Z=Re.device_id||"",be.callbacks.length>0){for(var fe=0;fe128)throw console.error("[Telegram.WebApp] Biometric reason is too long",Je),Error("WebAppBiometricRequestAccessParamInvalid");Je.length>0&&(fe.reason=Je)}return J={callback:Re},r.postEvent("web_app_biometry_request_access",!1,fe),Y},Y.authenticate=function(K,Re){if(!F())return Y;if(Ze(),!f)throw console.error("[Telegram.WebApp] Biometrics is not available on this device."),Error("WebAppBiometricManagerBiometricsNotAvailable");if(!C)throw console.error("[Telegram.WebApp] Biometric access was not granted by the user."),Error("WebAppBiometricManagerBiometricAccessNotGranted");if(me)throw console.error("[Telegram.WebApp] Authentication request is already in progress."),Error("WebAppBiometricManagerAuthenticationRequested");var fe={};if(typeof K.reason<"u"){var Je=ve(K.reason);if(Je.length>128)throw console.error("[Telegram.WebApp] Biometric reason is too long",Je),Error("WebAppBiometricRequestAccessParamInvalid");Je.length>0&&(fe.reason=Je)}return me={callback:Re},r.postEvent("web_app_biometry_request_auth",!1,fe),Y},Y.updateBiometricToken=function(K,Re){if(!F())return Y;if(K=K||"",K.length>1024)throw console.error("[Telegram.WebApp] Token is too long",K),Error("WebAppBiometricManagerTokenInvalid");if(Ze(),!f)throw console.error("[Telegram.WebApp] Biometrics is not available on this device."),Error("WebAppBiometricManagerBiometricsNotAvailable");if(!C)throw console.error("[Telegram.WebApp] Biometric access was not granted by the user."),Error("WebAppBiometricManagerBiometricAccessNotGranted");if(ze)throw console.error("[Telegram.WebApp] Token request is already in progress."),Error("WebAppBiometricManagerTokenUpdateRequested");return ze={callback:Re},r.postEvent("web_app_biometry_update_token",!1,{token:K}),Y},Y.openSettings=function(){if(!F())return Y;if(Ze(),!f)throw console.error("[Telegram.WebApp] Biometrics is not available on this device."),Error("WebAppBiometricManagerBiometricsNotAvailable");if(!E)throw console.error("[Telegram.WebApp] Biometric access was not requested yet."),Error("WebAppBiometricManagerBiometricsAccessNotRequested");return C?(console.warn("[Telegram.WebApp] Biometric access was granted by the user, no need to go to settings."),Y):(r.postEvent("web_app_biometry_open_settings",!1),Y)},Y})(),xn=(function(){var o=!1,f=!1,h=!1,E=!1,C={};Object.defineProperty(C,"isInited",{get:function(){return o},enumerable:!0}),Object.defineProperty(C,"isLocationAvailable",{get:function(){return o&&f},enumerable:!0}),Object.defineProperty(C,"isAccessRequested",{get:function(){return h},enumerable:!0}),Object.defineProperty(C,"isAccessGranted",{get:function(){return h&&E},enumerable:!0});var j={callbacks:[]},Z={callbacks:[]};r.onEvent("location_checked",Y),r.onEvent("location_requested",be);function Y(he,q){if(o=!0,q.available?(f=!0,q.access_requested?(h=!0,E=!!q.access_granted):(h=!1,E=!1)):(f=!1,h=!1,E=!1),j.callbacks.length>0){for(var Q=0;Q0){for(var q=0;q0){for(var Q=0;Q0){for(var Q=0;Q0){for(var Q=0;Q1e3?console.warn("[Telegram.WebApp] Accelerometer refresh_rate is invalid",F):Q.refresh_rate=F,q&&C.push(q),r.postEvent("web_app_start_accelerometer",!1,Q),Z},Z.stop=function(he){return ze()&&(he&&j.push(he),r.postEvent("web_app_stop_accelerometer")),Z},Z})(),nt=(function(){var o=!1,f=null,h=null,E=null,C=!1,j=[],Z=[],Y={};Object.defineProperty(Y,"isStarted",{get:function(){return o},enumerable:!0}),Object.defineProperty(Y,"absolute",{get:function(){return C},enumerable:!0}),Object.defineProperty(Y,"alpha",{get:function(){return f},enumerable:!0}),Object.defineProperty(Y,"beta",{get:function(){return h},enumerable:!0}),Object.defineProperty(Y,"gamma",{get:function(){return E},enumerable:!0}),r.onEvent("device_orientation_started",be),r.onEvent("device_orientation_stopped",J),r.onEvent("device_orientation_changed",me),r.onEvent("device_orientation_failed",ze);function be(q,Q){if(o=!0,j.length>0){for(var F=0;F0){for(var F=0;F0){for(var F=0;F1e3?console.warn("[Telegram.WebApp] DeviceOrientation refresh_rate is invalid",Ze):F.refresh_rate=Ze,F.need_absolute=!!q.need_absolute,Q&&j.push(Q),r.postEvent("web_app_start_device_orientation",!1,F),Y},Y.stop=function(q){return he()&&(q&&Z.push(q),r.postEvent("web_app_stop_device_orientation")),Y},Y})(),Vu=(function(){var o=!1,f=null,h=null,E=null,C=[],j=[],Z={};Object.defineProperty(Z,"isStarted",{get:function(){return o},enumerable:!0}),Object.defineProperty(Z,"x",{get:function(){return f},enumerable:!0}),Object.defineProperty(Z,"y",{get:function(){return h},enumerable:!0}),Object.defineProperty(Z,"z",{get:function(){return E},enumerable:!0}),r.onEvent("gyroscope_started",Y),r.onEvent("gyroscope_stopped",be),r.onEvent("gyroscope_changed",J),r.onEvent("gyroscope_failed",me);function Y(he,q){if(o=!0,C.length>0){for(var Q=0;Q0){for(var Q=0;Q0){for(var Q=0;Q1e3?console.warn("[Telegram.WebApp] Gyroscope refresh_rate is invalid",F):Q.refresh_rate=F,q&&C.push(q),r.postEvent("web_app_start_gyroscope",!1,Q),Z},Z.stop=function(he){return ze()&&(he&&j.push(he),r.postEvent("web_app_stop_gyroscope")),Z},Z})(),Fl={};function Ol(o,f){if(f.slug&&Fl[f.slug]){var h=Fl[f.slug];delete Fl[f.slug],h.callback&&h.callback(f.status),G("invoiceClosed",{url:h.url,status:f.status})}}var yt=!1;function Qu(o,f){if(yt){var h=yt;yt=!1;var E=null;typeof f.button_id<"u"&&(E=f.button_id),h.callback&&h.callback(E),G("popupClosed",{button_id:E})}}var pl=!1;function Wu(o,f){if(pl){var h=pl,E=null;typeof f.data<"u"&&(E=f.data),h.callback&&h.callback(E)&&(pl=!1,r.postEvent("web_app_close_scan_qr_popup",!1)),G("qrTextReceived",{data:E})}}function rc(o,f){pl=!1,G("scanQrPopupClosed")}function la(o,f){if(f.req_id&&Ve[f.req_id]){var h=Ve[f.req_id];delete Ve[f.req_id];var E=null;typeof f.data<"u"&&(E=f.data),h.callback&&h.callback(E),G("clipboardTextReceived",{data:E})}}var ml=!1;function al(o,f){if(ml){var h=ml;ml=!1,h.callback&&h.callback(f.status=="allowed"),G("writeAccessRequested",{status:f.status})}}function Ct(o,f){var h,E,C=0,j=function(){Ya("getRequestedContact",{},function(Y,be){be&&be.length?(clearTimeout(E),o(be)):(C+=50,h=setTimeout(j,C))})},Z=function(){clearTimeout(h),o("")};E=setTimeout(Z,f),j()}var $l=!1;function fc(o,f){if($l){var h=$l;$l=!1;var E=f.status=="sent",C={status:f.status};E?Ct(function(j){if(j&&j.length){C.response=j,C.responseUnsafe=O.urlParseQueryString(j);for(var Z in C.responseUnsafe){var Y=C.responseUnsafe[Z];try{(Y.substr(0,1)=="{"&&Y.substr(-1)=="}"||Y.substr(0,1)=="["&&Y.substr(-1)=="]")&&(C.responseUnsafe[Z]=JSON.parse(Y))}catch{}}}h.callback&&h.callback(E,C),G("contactRequested",C)},3e3):(h.callback&&h.callback(E,C),G("contactRequested",C))}}var Cl=!1;function Xu(o,f){if(Cl){var h=Cl;Cl=!1;var E=f.status=="downloading";h.callback&&h.callback(E),G("fileDownloadRequested",{status:E?"downloading":"cancelled"})}}function na(o,f){if(f.req_id&&Ve[f.req_id]){var h=Ve[f.req_id];delete Ve[f.req_id];var E=null,C=null;typeof f.result<"u"&&(E=f.result),typeof f.error<"u"&&(C=f.error),h.callback&&h.callback(C,E)}}function Ya(o,f,h){if(!ce("6.9"))throw console.error("[Telegram.WebApp] Method invokeCustomMethod is not supported in version "+S),Error("WebAppMethodUnsupported");var E=Xe(16),C={req_id:E,method:o,params:f||{}};Ve[E]={callback:h},r.postEvent("web_app_invoke_custom_method",!1,C)}window.Telegram||(window.Telegram={}),Object.defineProperty(v,"initData",{get:function(){return N},enumerable:!0}),Object.defineProperty(v,"initDataUnsafe",{get:function(){return I},enumerable:!0}),Object.defineProperty(v,"version",{get:function(){return S},enumerable:!0}),Object.defineProperty(v,"platform",{get:function(){return ae},enumerable:!0}),Object.defineProperty(v,"colorScheme",{get:function(){return H},enumerable:!0}),Object.defineProperty(v,"themeParams",{get:function(){return W},enumerable:!0}),Object.defineProperty(v,"isExpanded",{get:function(){return Jn},enumerable:!0}),Object.defineProperty(v,"viewportHeight",{get:function(){return(ll===!1?window.innerHeight:ll)-Fe},enumerable:!0}),Object.defineProperty(v,"viewportStableHeight",{get:function(){return(fl===!1?window.innerHeight:fl)-Fe},enumerable:!0}),Object.defineProperty(v,"safeAreaInset",{get:function(){return dt},enumerable:!0}),Object.defineProperty(v,"contentSafeAreaInset",{get:function(){return Rt},enumerable:!0}),Object.defineProperty(v,"isClosingConfirmationEnabled",{set:function(o){Da(o)},get:function(){return $n},enumerable:!0}),Object.defineProperty(v,"isVerticalSwipesEnabled",{set:function(o){Ra(o)},get:function(){return Tn},enumerable:!0}),Object.defineProperty(v,"isFullscreen",{get:function(){return _e},enumerable:!0}),Object.defineProperty(v,"isOrientationLocked",{set:function(o){St(o)},get:function(){return Ke},enumerable:!0}),Object.defineProperty(v,"isActive",{get:function(){return ee},enumerable:!0}),Object.defineProperty(v,"headerColor",{set:function(o){cc(o)},get:function(){return At()},enumerable:!0}),Object.defineProperty(v,"backgroundColor",{set:function(o){In(o)},get:function(){return zn()},enumerable:!0}),Object.defineProperty(v,"bottomBarColor",{set:function(o){ju(o)},get:function(){return Mn()},enumerable:!0}),Object.defineProperty(v,"BackButton",{value:Ga,enumerable:!0}),Object.defineProperty(v,"MainButton",{value:oc,enumerable:!0}),Object.defineProperty(v,"SecondaryButton",{value:Yu,enumerable:!0}),Object.defineProperty(v,"SettingsButton",{value:Zl,enumerable:!0}),Object.defineProperty(v,"HapticFeedback",{value:La,enumerable:!0}),Object.defineProperty(v,"CloudStorage",{value:kl,enumerable:!0}),Object.defineProperty(v,"BiometricManager",{value:Kl,enumerable:!0}),Object.defineProperty(v,"Accelerometer",{value:Jl,enumerable:!0}),Object.defineProperty(v,"DeviceOrientation",{value:nt,enumerable:!0}),Object.defineProperty(v,"Gyroscope",{value:Vu,enumerable:!0}),Object.defineProperty(v,"LocationManager",{value:xn,enumerable:!0}),v.isVersionAtLeast=function(o){return ce(o)},v.setHeaderColor=function(o){v.headerColor=o},v.setBackgroundColor=function(o){v.backgroundColor=o},v.setBottomBarColor=function(o){v.bottomBarColor=o},v.enableClosingConfirmation=function(){v.isClosingConfirmationEnabled=!0},v.disableClosingConfirmation=function(){v.isClosingConfirmationEnabled=!1},v.enableVerticalSwipes=function(){v.isVerticalSwipesEnabled=!0},v.disableVerticalSwipes=function(){v.isVerticalSwipesEnabled=!1},v.lockOrientation=function(){v.isOrientationLocked=!0},v.unlockOrientation=function(){v.isOrientationLocked=!1},v.requestFullscreen=function(){if(!ce("8.0"))throw console.error("[Telegram.WebApp] Method requestFullscreen is not supported in version "+S),Error("WebAppMethodUnsupported");r.postEvent("web_app_request_fullscreen")},v.exitFullscreen=function(){if(!ce("8.0"))throw console.error("[Telegram.WebApp] Method exitFullscreen is not supported in version "+S),Error("WebAppMethodUnsupported");r.postEvent("web_app_exit_fullscreen")},v.addToHomeScreen=function(){if(!ce("8.0"))throw console.error("[Telegram.WebApp] Method addToHomeScreen is not supported in version "+S),Error("WebAppMethodUnsupported");r.postEvent("web_app_add_to_home_screen")},v.checkHomeScreenStatus=function(o){if(!ce("8.0"))throw console.error("[Telegram.WebApp] Method checkHomeScreenStatus is not supported in version "+S),Error("WebAppMethodUnsupported");o&&On.push(o),r.postEvent("web_app_check_home_screen")},v.onEvent=function(o,f){m(o,f)},v.offEvent=function(o,f){B(o,f)},v.sendData=function(o){if(!o||!o.length)throw console.error("[Telegram.WebApp] Data is required",o),Error("WebAppDataInvalid");if(qa(o)>4096)throw console.error("[Telegram.WebApp] Data is too long",o),Error("WebAppDataInvalid");r.postEvent("web_app_data_send",!1,{data:o})},v.switchInlineQuery=function(o,f){if(!ce("6.6"))throw console.error("[Telegram.WebApp] Method switchInlineQuery is not supported in version "+S),Error("WebAppMethodUnsupported");if(!b.tgWebAppBotInline)throw console.error("[Telegram.WebApp] Inline mode is disabled for this bot. Read more about inline mode: https://core.telegram.org/bots/inline"),Error("WebAppInlineModeDisabled");if(o=o||"",o.length>256)throw console.error("[Telegram.WebApp] Inline query is too long",o),Error("WebAppInlineQueryInvalid");var h=[];if(f){if(!Array.isArray(f))throw console.error("[Telegram.WebApp] Choose chat types should be an array",f),Error("WebAppInlineChooseChatTypesInvalid");for(var E={users:1,bots:1,groups:1,channels:1},C=0;C64)throw console.error("[Telegram.WebApp] Popup title is too long",h),Error("WebAppPopupParamInvalid");h.length>0&&(j.title=h)}if(typeof o.message<"u"&&(E=ve(o.message)),!E.length)throw console.error("[Telegram.WebApp] Popup message is required",o.message),Error("WebAppPopupParamInvalid");if(E.length>256)throw console.error("[Telegram.WebApp] Popup message is too long",E),Error("WebAppPopupParamInvalid");if(j.message=E,typeof o.buttons<"u"){if(!Array.isArray(o.buttons))throw console.error("[Telegram.WebApp] Popup buttons should be an array",o.buttons),Error("WebAppPopupParamInvalid");for(var Z=0;Z64))throw console.error("[Telegram.WebApp] Popup button id is too long",J),Error("WebAppPopupParamInvalid");be.id=J;var me=Y.type;if(typeof me>"u"&&(me="default"),be.type=me,!(me=="ok"||me=="close"||me=="cancel"))if(me=="default"||me=="destructive"){var ze="";if(typeof Y.text<"u"&&(ze=ve(Y.text)),!ze.length)throw console.error("[Telegram.WebApp] Popup button text is required for type "+me,Y.text),Error("WebAppPopupParamInvalid");if(ze.length>64)throw console.error("[Telegram.WebApp] Popup button text is too long",ze),Error("WebAppPopupParamInvalid");be.text=ze}else throw console.error("[Telegram.WebApp] Popup button type is invalid",me),Error("WebAppPopupParamInvalid");C.push(be)}}else C.push({id:"",type:"close"});if(C.length<1)throw console.error("[Telegram.WebApp] Popup should have at least one button"),Error("WebAppPopupParamInvalid");if(C.length>3)throw console.error("[Telegram.WebApp] Popup should not have more than 3 buttons"),Error("WebAppPopupParamInvalid");j.buttons=C,yt={callback:f},r.postEvent("web_app_open_popup",!1,j)},v.showAlert=function(o,f){v.showPopup({message:o},f?function(){f()}:null)},v.showConfirm=function(o,f){v.showPopup({message:o,buttons:[{type:"ok",id:"ok"},{type:"cancel"}]},f?function(h){f(h=="ok")}:null)},v.showScanQrPopup=function(o,f){if(!ce("6.4"))throw console.error("[Telegram.WebApp] Method showScanQrPopup is not supported in version "+S),Error("WebAppMethodUnsupported");if(pl)throw console.error("[Telegram.WebApp] Popup is already opened"),Error("WebAppScanQrPopupOpened");var h="",E={};if(typeof o.text<"u"){if(h=ve(o.text),h.length>64)throw console.error("[Telegram.WebApp] Scan QR popup text is too long",h),Error("WebAppScanQrPopupParamInvalid");h.length>0&&(E.text=h)}pl={callback:f},r.postEvent("web_app_open_scan_qr_popup",!1,E)},v.closeScanQrPopup=function(){if(!ce("6.4"))throw console.error("[Telegram.WebApp] Method closeScanQrPopup is not supported in version "+S),Error("WebAppMethodUnsupported");pl=!1,r.postEvent("web_app_close_scan_qr_popup",!1)},v.readTextFromClipboard=function(o){if(!ce("6.4"))throw console.error("[Telegram.WebApp] Method readTextFromClipboard is not supported in version "+S),Error("WebAppMethodUnsupported");var f=Xe(16),h={req_id:f};Ve[f]={callback:o},r.postEvent("web_app_read_text_from_clipboard",!1,h)},v.requestWriteAccess=function(o){if(!ce("6.9"))throw console.error("[Telegram.WebApp] Method requestWriteAccess is not supported in version "+S),Error("WebAppMethodUnsupported");if(ml)throw console.error("[Telegram.WebApp] Write access is already requested"),Error("WebAppWriteAccessRequested");ml={callback:o},r.postEvent("web_app_request_write_access")},v.requestContact=function(o){if(!ce("6.9"))throw console.error("[Telegram.WebApp] Method requestContact is not supported in version "+S),Error("WebAppMethodUnsupported");if($l)throw console.error("[Telegram.WebApp] Contact is already requested"),Error("WebAppContactRequested");$l={callback:o},r.postEvent("web_app_request_phone")},v.downloadFile=function(o,f){if(!ce("8.0"))throw console.error("[Telegram.WebApp] Method downloadFile is not supported in version "+S),Error("WebAppMethodUnsupported");if(Cl)throw console.error("[Telegram.WebApp] Popup is already opened"),Error("WebAppDownloadFilePopupOpened");var h=document.createElement("A"),E={};if(!o||!o.url||!o.url.length)throw console.error("[Telegram.WebApp] Url is required"),Error("WebAppDownloadFileParamInvalid");if(h.href=o.url,h.protocol!="https:")throw console.error("[Telegram.WebApp] Url protocol is not supported",url),Error("WebAppDownloadFileParamInvalid");if(E.url=h.href,!o||!o.file_name||!o.file_name.length)throw console.error("[Telegram.WebApp] File name is required"),Error("WebAppDownloadFileParamInvalid");E.file_name=o.file_name,Cl={callback:f},r.postEvent("web_app_request_file_download",!1,E)},v.shareToStory=function(o,f){if(f=f||{},!ce("7.8"))throw console.error("[Telegram.WebApp] Method shareToStory is not supported in version "+S),Error("WebAppMethodUnsupported");var h=document.createElement("A");if(h.href=o,h.protocol!="http:"&&h.protocol!="https:")throw console.error("[Telegram.WebApp] Media url protocol is not supported",url),Error("WebAppMediaUrlInvalid");var E={};if(E.media_url=h.href,typeof f.text<"u"){var C=ve(f.text);if(C.length>2048)throw console.error("[Telegram.WebApp] Text is too long",C),Error("WebAppShareToStoryParamInvalid");C.length>0&&(E.text=C)}if(typeof f.widget_link<"u"){if(f.widget_link=f.widget_link||{},h.href=f.widget_link.url,h.protocol!="http:"&&h.protocol!="https:")throw console.error("[Telegram.WebApp] Link protocol is not supported",url),Error("WebAppShareToStoryParamInvalid");var j={url:h.href};if(typeof f.widget_link.name<"u"){var Z=ve(f.widget_link.name);if(Z.length>48)throw console.error("[Telegram.WebApp] Link name is too long",Z),Error("WebAppShareToStoryParamInvalid");Z.length>0&&(j.name=Z)}E.widget_link=j}r.postEvent("web_app_share_to_story",!1,E)},v.shareMessage=function(o,f){if(!ce("8.0"))throw console.error("[Telegram.WebApp] Method shareMessage is not supported in version "+S),Error("WebAppMethodUnsupported");if(jt)throw console.error("[Telegram.WebApp] Share message is already opened"),Error("WebAppShareMessageOpened");jt={callback:f},r.postEvent("web_app_send_prepared_message",!1,{id:o})},v.setEmojiStatus=function(o,f,h){if(f=f||{},!ce("8.0"))throw console.error("[Telegram.WebApp] Method setEmojiStatus is not supported in version "+S),Error("WebAppMethodUnsupported");var E={};if(E.custom_emoji_id=o,typeof f.duration<"u"&&(E.duration=f.duration),sl)throw console.error("[Telegram.WebApp] Emoji status is already requested"),Error("WebAppEmojiStatusRequested");sl={callback:h},r.postEvent("web_app_set_emoji_status",!1,E)},v.requestEmojiStatusAccess=function(o){if(!ce("8.0"))throw console.error("[Telegram.WebApp] Method requestEmojiStatusAccess is not supported in version "+S),Error("WebAppMethodUnsupported");if(ot)throw console.error("[Telegram.WebApp] Emoji status permission is already requested"),Error("WebAppEmojiStatusAccessRequested");ot={callback:o},r.postEvent("web_app_request_emoji_status_access")},v.invokeCustomMethod=function(o,f,h){Ya(o,f,h)},v.ready=function(){r.postEvent("web_app_ready")},v.expand=function(){r.postEvent("web_app_expand")},v.close=function(o){o=o||{};var f={};ce("7.6")&&o.return_back&&(f.return_back=!0),r.postEvent("web_app_close",!1,f)},window.Telegram.WebApp=v,Ql(),Wl(),El(),Fn(),b.tgWebAppShowSettings&&Zl.show(),window.addEventListener("resize",Zt),s&&document.addEventListener("click",ne),r.onEvent("theme_changed",Xt),r.onEvent("viewport_changed",Al),r.onEvent("safe_area_changed",Dt),r.onEvent("content_safe_area_changed",M),r.onEvent("visibility_changed",R),r.onEvent("invoice_closed",Ol),r.onEvent("popup_closed",Qu),r.onEvent("qr_text_received",Wu),r.onEvent("scan_qr_popup_closed",rc),r.onEvent("clipboard_text_received",la),r.onEvent("write_access_requested",al),r.onEvent("phone_requested",fc),r.onEvent("file_download_requested",Xu),r.onEvent("custom_method_invoked",na),r.onEvent("fullscreen_changed",nc),r.onEvent("fullscreen_failed",ac),r.onEvent("home_screen_added",Hu),r.onEvent("home_screen_checked",wu),r.onEvent("prepared_message_sent",uc),r.onEvent("prepared_message_failed",Du),r.onEvent("emoji_status_set",ic),r.onEvent("emoji_status_failed",Cn),r.onEvent("emoji_status_access_requested",dl),r.postEvent("web_app_request_theme"),r.postEvent("web_app_request_viewport"),r.postEvent("web_app_request_safe_area"),r.postEvent("web_app_request_content_safe_area")})()),uh}var ch;function Um(){if(ch)return Bu;ch=1,Object.defineProperty(Bu,"__esModule",{value:!0}),Bu.WebApp=void 0,Bm();var O=window;return Bu.WebApp=O.Telegram.WebApp,Bu}var oh;function Nm(){if(oh)return ec;oh=1,Object.defineProperty(ec,"__esModule",{value:!0});var O=Um();return ec.default=O.WebApp,ec}var Hm=Nm();const Ha=dm(Hm),wm=()=>{const{createRoom:O,joinRoom:r}=br(),[b,s]=gt.useState(""),[v,N]=gt.useState(""),[I,W]=gt.useState("create");gt.useEffect(()=>{Ha.initDataUnsafe?.user?.first_name&&s(Ha.initDataUnsafe.user.first_name)},[]);const H=()=>{b&&O(b,Ha.initDataUnsafe?.user?.id?.toString())},S=()=>{!b||!v||r(v,b,Ha.initDataUnsafe?.user?.id?.toString())};return P.jsxs("div",{className:"flex flex-col items-center justify-center min-h-screen p-4 space-y-8",children:[P.jsx("h1",{className:"text-4xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-blue-400 to-purple-600",children:"Alias"}),P.jsxs("div",{className:"w-full max-w-sm bg-gray-800/50 backdrop-blur-md rounded-2xl p-6 shadow-xl border border-gray-700",children:[P.jsxs("div",{className:"flex space-x-2 mb-6 bg-gray-900/50 p-1 rounded-lg",children:[P.jsx("button",{onClick:()=>W("create"),className:`flex-1 py-2 rounded-md text-sm font-medium transition-all ${I==="create"?"bg-blue-600 text-white shadow-lg":"text-gray-400 hover:text-white"}`,children:"Создать"}),P.jsx("button",{onClick:()=>W("join"),className:`flex-1 py-2 rounded-md text-sm font-medium transition-all ${I==="join"?"bg-blue-600 text-white shadow-lg":"text-gray-400 hover:text-white"}`,children:"Войти"})]}),P.jsxs("div",{className:"space-y-4",children:[P.jsxs("div",{children:[P.jsx("label",{className:"block text-xs font-medium text-gray-400 mb-1 ml-1",children:"Твое имя"}),P.jsx("input",{type:"text",value:b,onChange:ae=>s(ae.target.value),placeholder:"Введите имя...",className:"w-full px-4 py-3 bg-gray-900 border border-gray-700 rounded-xl focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition-all text-white placeholder-gray-600"})]}),I==="join"&&P.jsxs("div",{children:[P.jsx("label",{className:"block text-xs font-medium text-gray-400 mb-1 ml-1",children:"Номер комнаты"}),P.jsx("input",{type:"number",value:v,onChange:ae=>N(ae.target.value),placeholder:"1234",className:"w-full px-4 py-3 bg-gray-900 border border-gray-700 rounded-xl focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition-all text-white placeholder-gray-600 font-mono tracking-widest text-center text-lg"})]}),P.jsx("button",{onClick:I==="create"?H:S,className:"w-full py-3 mt-2 bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-500 hover:to-blue-600 text-white font-bold rounded-xl shadow-lg transform transition-all active:scale-95",children:I==="create"?"Создать комнату":"Присоединиться"})]})]})]})},Dm=()=>{const{room:O,currentPlayer:r,joinTeam:b}=br();if(!O)return null;const s=N=>{const I=O.teams.find(H=>H.id===N.id)?.playerIds.map(H=>O.players[H])||[],W=r?.teamId===N.id;return P.jsxs("div",{className:"flex-1 min-w-[45%] bg-gray-800/50 rounded-xl p-4 border border-gray-700 flex flex-col",children:[P.jsxs("div",{className:"flex justify-between items-center mb-3",children:[P.jsx("h3",{className:"font-bold text-lg text-white",children:N.name}),!W&&P.jsx("button",{onClick:()=>b(N.id),className:"text-xs px-3 py-1 bg-gray-700 hover:bg-gray-600 rounded-full transition-colors",children:"Войти"})]}),P.jsxs("div",{className:"flex-1 space-y-2",children:[I.map(H=>P.jsxs("div",{className:"flex items-center space-x-2 bg-gray-900/60 p-2 rounded-lg",children:[P.jsx("div",{className:"w-8 h-8 bg-gradient-to-br from-blue-500 to-purple-500 rounded-full flex items-center justify-center text-xs font-bold",children:H.name.substring(0,2).toUpperCase()}),P.jsx("span",{className:"text-sm truncate",children:H.name}),H.host&&P.jsx("span",{className:"text-xs text-yellow-500",children:"👑"})]},H.sessionId)),I.length===0&&P.jsx("div",{className:"text-center text-gray-500 text-sm py-4",children:"Пусто"})]})]},N.id)},v=Object.values(O.players).filter(N=>!N.teamId);return P.jsxs("div",{className:"flex flex-col h-screen p-4 bg-gray-900 text-white",children:[P.jsxs("header",{className:"flex justify-between items-center mb-6",children:[P.jsxs("div",{children:[P.jsxs("h2",{className:"text-xl font-bold",children:["Комната #",O.roomId]}),P.jsx("p",{className:"text-xs text-gray-400",children:"Ожидание игроков..."})]}),P.jsxs("div",{className:"bg-gray-800 px-3 py-1 rounded-full text-xs font-mono",children:[Object.keys(O.players).length," Online"]})]}),v.length>0&&P.jsxs("div",{className:"mb-6",children:[P.jsx("h4",{className:"text-xs text-gray-400 uppercase mb-2 ml-1",children:"Без команды"}),P.jsx("div",{className:"flex flex-wrap gap-2",children:v.map(N=>P.jsx("div",{className:"bg-gray-800 px-3 py-1.5 rounded-full text-sm border border-gray-700",children:N.name},N.sessionId))})]}),P.jsx("div",{className:"flex gap-4 mb-auto",children:O.teams.map(s)}),r?.host?P.jsxs("div",{className:"mt-4 p-4 bg-gray-800 rounded-t-2xl -mx-4 space-y-4 shadow-2xl border-t border-gray-700",children:[P.jsxs("div",{className:"flex justify-between items-center",children:[P.jsx("span",{className:"text-sm text-gray-400",children:"Сложность"}),P.jsxs("select",{className:"bg-gray-900 border border-gray-700 rounded px-2 py-1 text-sm outline-none",children:[P.jsx("option",{children:"EASY"}),P.jsx("option",{children:"MEDIUM"}),P.jsx("option",{children:"HARD"})]})]}),P.jsx("button",{className:"w-full py-4 bg-green-600 hover:bg-green-500 text-white font-bold rounded-xl text-lg shadow-lg active:scale-95 transition-all",children:"Начать игру"})]}):P.jsx("div",{className:"mt-4 text-center text-gray-500 text-sm pb-4",children:"Ждем, пока хост начнет игру..."})]})},Rm={LOBBY:"LOBBY"};Ha.ready();Ha.expand();const jm=()=>{const{room:O,error:r}=br();return r?P.jsx("div",{className:"flex items-center justify-center h-screen text-red-500 p-4 text-center",children:P.jsxs("div",{children:[P.jsx("h2",{className:"text-xl font-bold mb-2",children:"Ошибка"}),P.jsx("p",{children:r}),P.jsx("button",{onClick:()=>window.location.reload(),className:"mt-4 text-blue-500 underline",children:"Перезагрузить"})]})}):O?O.state===Rm.LOBBY?P.jsx(Dm,{}):P.jsx("div",{className:"flex items-center justify-center h-screen text-white",children:"Game Started! (Coming soon)"}):P.jsx(wm,{})},qm=()=>P.jsx(xm,{children:P.jsx(jm,{})});Am.createRoot(document.getElementById("root")).render(P.jsx(gt.StrictMode,{children:P.jsx(qm,{})})); diff --git a/target/classes/static/index.html b/target/classes/static/index.html new file mode 100644 index 0000000..6381f70 --- /dev/null +++ b/target/classes/static/index.html @@ -0,0 +1,14 @@ + + + + + + + frontend + + + + +
+ + diff --git a/target/classes/static/vite.svg b/target/classes/static/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/target/classes/static/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file