diff --git a/.gitignore b/.gitignore index b2f4587..3814e20 100644 --- a/.gitignore +++ b/.gitignore @@ -317,3 +317,8 @@ frontend/test-results frontend/playwright-report backend/data .aider* + +# Additional patterns +blob-report/ +.DS_Store +Thumbs.db diff --git a/SLOP_CLEANUP_PLAN.md b/SLOP_CLEANUP_PLAN.md deleted file mode 100644 index 990aa7c..0000000 --- a/SLOP_CLEANUP_PLAN.md +++ /dev/null @@ -1,33 +0,0 @@ -# Frontend Systematic Audit & Cleanup Plan - -## Goal -Perform a comprehensive audit and cleanup of the `frontend/` directory to remove shadowing, duplicates, corruption (appending), and dead code. - -## Phase 1: Discovery (READ-ONLY) -I will conduct a comprehensive scan of the `frontend/` directory to build an accurate inventory. -* **File Shadowing Audit**: Scan for files with overlapping names but different extensions (e.g., `.js` vs `.ts`, `.jsx` vs `.tsx`) that cause build-time shadowing. -* **Implementation Duplicate Audit**: Use content searching to find identical or near-identical function/class definitions across different files. -* **Corruption Check**: Scan files for duplicate symbol declarations (identifying where code was incorrectly appended rather than replaced). -* **Dependency/Import Audit**: Cross-reference `package.json` with actual imports to identify unused packages and orphaned imports in code. -* **Slop Identification**: Locate commented-out blocks, unused variables, and dead functions. - -## Phase 2: Categorization (PLANNING) -I will create a structured todo list (`FRONTEND_CLEANUP_TODO.md`) with the following categories: -* **`[DELETE]`**: Conflicting or redundant files (e.g., `client.js`). -* **`[REPAIR]`**: Corrupted files that must be completely overwritten to remove duplicates. -* **`[CLEAN]`**: Files requiring removal of unused imports, variables, or dead code. -* **`[REFACTOR]`**: Files requiring naming or pattern consistency fixes. - -## Phase 3: Systematic Execution (IMPLEMENTATION) -I will execute the cleanup in this order to maintain stability: -1. **File Purge**: Remove all files in the `[DELETE]` category first to resolve shadowing. -2. **File Repair**: Use full-file rewrites for files in the `[REPAIR]` category. -3. **Slop Removal**: Systematic pass through files in the `[CLEAN]` category. -4. **Verification**: - - Run `npm install` to ensure dependency integrity. - - Run all existing tests (`npm test`) and the reproduction test to confirm functionality. - - Check for build errors/linting issues. - -## Notes -- This plan will be updated and tracked via `FRONTEND_CLEANUP_TODO.md`. -- No changes will be made until the Phase 2 Todo list is reviewed and approved. diff --git a/SPEC.md b/SPEC.md index b13fca9..0220e97 100644 --- a/SPEC.md +++ b/SPEC.md @@ -198,7 +198,7 @@ List sessions, most recent first. --- -#### `PUT /api/sessions/{id}` +#### `PATCH /api/sessions/{id}` Update start_time, end_time, or notes on any session. @@ -393,10 +393,11 @@ A small gear icon opens an inline settings popover to change `dayStart` / `dayEn #### `SleepTimetable` A grid where: -- Rows = days (newest at top) -- Columns = 15-minute slots across 24 hours (96 columns) -- Each cell is a small coloured square: sleeping = navy, awake = light grey -- X-axis labels: 00:00, 03:00, 06:00 … 21:00 +- Rows = hours of the day (00:00 at top, 23:00 at bottom — 24 rows) +- Columns = days in the selected interval (newest on the right) +- Each cell is a small coloured square: sleeping = green (`bg-green-500`), awake = light grey (`bg-gray-50`) +- Column headers: short weekday name per day +- A red horizontal line marks the current time of day - Scrollable horizontally on mobile #### `WakeupPlot` and `BedtimePlot` diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js new file mode 100644 index 0000000..c63c052 --- /dev/null +++ b/frontend/eslint.config.js @@ -0,0 +1,37 @@ +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import reactPlugin from 'eslint-plugin-react'; +import reactHooksPlugin from 'eslint-plugin-react-hooks'; + +export default tseslint.config( + { + ignores: ['dist/**/*'], + }, + eslint.configs.recommended, + ...tseslint.configs.recommended, + { + files: ['**/*.{ts,tsx}'], + plugins: { + react: reactPlugin, + 'react-hooks': reactHooksPlugin, + }, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + }, + settings: { + react: { + version: 'detect', + }, + }, + rules: { + ...reactPlugin.configs.recommended.rules, + ...reactPlugin.configs['jsx-runtime'].rules, + ...reactHooksPlugin.configs.recommended.rules, + 'react/prop-types': 'off', + }, + } +); diff --git a/frontend/lint_output.txt b/frontend/lint_output.txt new file mode 100644 index 0000000..d85bd27 --- /dev/null +++ b/frontend/lint_output.txt @@ -0,0 +1,2224 @@ + +> baby-sleep-tracker-frontend@0.1.0 lint +> eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0 + + +/Users/jhag/projects/babymonitor/frontend/.eslintrc.cjs + 1:1 error 'module' is not defined no-undef + +/Users/jhag/projects/babymonitor/frontend/dist/assets/index-BwnxSiXR.js + 1:454 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:684 error 'document' is not defined no-undef + 1:789 error 'document' is not defined no-undef + 1:853 error 'MutationObserver' is not defined no-undef + 1:939 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:999 error 'document' is not defined no-undef + 1:1343 error 'fetch' is not defined no-undef + 1:2056 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:2114 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:2550 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:2632 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:3369 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:3437 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:3612 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:4148 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:4259 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:4771 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:4796 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:4868 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:5066 error 'reportError' is not defined no-undef + 1:5125 error 'window' is not defined no-undef + 1:5166 error 'window' is not defined no-undef + 1:5318 error 'window' is not defined no-undef + 1:5390 error 'process' is not defined no-undef + 1:5416 error 'process' is not defined no-undef + 1:5459 error 'console' is not defined no-undef + 1:5796 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:6361 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:6879 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:7118 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:7505 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:7606 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:8939 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:9182 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:9258 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:9432 error 'performance' is not defined no-undef + 1:9467 error 'performance' is not defined no-undef + 1:9672 error 'setTimeout' is not defined no-undef + 1:9722 error 'clearTimeout' is not defined no-undef + 1:9766 error 'setImmediate' is not defined no-undef + 1:9873 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:9978 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:10013 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:10183 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:10325 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:10432 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:10463 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:10533 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:10585 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:10601 error Unreachable code no-unreachable + 1:10619 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:10726 error 'MessageChannel' is not defined no-undef + 1:10751 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:10887 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:11150 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:11161 error 'console' is not defined no-undef + 1:13199 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:13539 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:13588 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:13730 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:13973 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:14476 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:15667 error '__REACT_DEVTOOLS_GLOBAL_HOOK__' is not defined no-undef + 1:15724 error '__REACT_DEVTOOLS_GLOBAL_HOOK__' is not defined no-undef + 1:15776 error 'console' is not defined no-undef + 1:15794 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:16361 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:17149 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:17199 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:17228 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:17294 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:17323 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:18975 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:19023 error Empty block statement no-empty + 1:19302 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:19361 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:19626 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:19713 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:19743 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:19779 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:19844 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:19886 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 1:20073 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 3:498 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 3:793 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 6:163 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 6:202 error Expected a conditional expression and instead saw an assignment no-cond-assign + 6:635 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:548 error Empty block statement no-empty + 8:2337 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:2467 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:2726 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:2809 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:2846 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:2937 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:2991 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:3160 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:3728 error 'window' is not defined no-undef + 8:4082 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:4218 error Expected a conditional expression and instead saw an assignment no-cond-assign + 8:4318 error Expected a conditional expression and instead saw an assignment no-cond-assign + 8:4352 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:4401 error Expected a conditional expression and instead saw an assignment no-cond-assign + 8:4761 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:5220 error Unexpected combined character in character class no-misleading-character-class + 8:6370 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 8:6575 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:6737 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:7090 error 'document' is not defined no-undef + 8:7325 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:8096 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:8184 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:8393 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:8586 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:8590 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 8:8756 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:8809 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:8843 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:8948 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:9158 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:9169 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:10383 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:10696 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:10699 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 8:10729 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 8:10839 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:10848 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 8:10907 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:10909 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 8:13872 error Unexpected control character(s) in regular expression: \x00, \x1f no-control-regex + 8:14202 error 'window' is not defined no-undef + 8:14867 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:14970 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:15548 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:15775 error 'window' is not defined no-undef + 8:15801 error 'window' is not defined no-undef + 8:15867 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:15903 error Expected to return a value in method 'get' getter-return + 8:15927 error 'window' is not defined no-undef + 8:15965 error 'window' is not defined no-undef + 8:16591 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:16593 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 8:16873 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:16935 error Invalid typeof comparison value valid-typeof + 8:17044 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:17109 error Invalid typeof comparison value valid-typeof + 8:18124 error 'window' is not defined no-undef + 8:18944 error Expected a conditional expression and instead saw an assignment no-cond-assign + 8:20199 error 'window' is not defined no-undef + 8:20214 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:20235 error 'document' is not defined no-undef + 8:20249 error 'document' is not defined no-undef + 8:20297 error 'window' is not defined no-undef + 8:21479 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:21782 error 'document' is not defined no-undef + 8:21806 error 'document' is not defined no-undef + 8:21836 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:21932 error 'document' is not defined no-undef + 8:21957 error 'document' is not defined no-undef + 8:21994 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:22110 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:22156 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:23383 error 'window' is not defined no-undef + 8:23826 error 'document' is not defined no-undef + 8:23840 error 'document' is not defined no-undef + 8:23974 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:24130 error 'window' is not defined no-undef + 8:24876 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:24884 error 'document' is not defined no-undef + 8:24939 error 'window' is not defined no-undef + 8:25076 error 'window' is not defined no-undef + 8:25206 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 8:26125 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:26185 error 'reportError' is not defined no-undef + 8:26244 error 'window' is not defined no-undef + 8:26285 error 'window' is not defined no-undef + 8:26437 error 'window' is not defined no-undef + 8:26509 error 'process' is not defined no-undef + 8:26535 error 'process' is not defined no-undef + 8:26578 error 'console' is not defined no-undef + 8:26785 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:26840 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:26879 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:27115 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:27172 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:27531 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:27611 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:29245 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:29465 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:29792 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:29812 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:30540 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:30593 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:30665 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:30719 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:30794 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:30829 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:30894 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:30955 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:31044 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:31383 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:31602 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:31679 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:31822 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:31877 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:32736 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:32848 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:32966 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:33044 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:33100 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:33547 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:33705 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:33880 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:34148 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:34280 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:34383 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:34558 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:34822 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:34944 error 'AbortController' is not defined no-undef + 8:35071 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:35358 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:35499 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:35640 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:35682 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:35864 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:36051 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:36233 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:36777 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:36852 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:36930 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:37437 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:37708 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:37807 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:37880 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:40456 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:40524 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:40546 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:40699 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:40811 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:41131 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:41202 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:41224 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:41379 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:41502 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:41909 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:42054 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:42152 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:42448 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:42550 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:43417 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:43956 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:44213 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:44264 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:44301 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:44423 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:44726 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:44782 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:44926 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:45011 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:45271 error Expected a 'break' statement before 'case' no-fallthrough + 8:45382 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:45492 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:45657 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:45730 error Unexpected constant condition no-constant-condition + 8:45733 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:46079 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:46133 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:46175 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:46260 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:46377 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:46437 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:46515 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:46566 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:47004 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:47135 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:47704 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:47912 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:47999 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:48254 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:48378 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:48420 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:48751 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:48831 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:49493 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:50035 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:50058 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:50267 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:50438 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:50476 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:50653 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:50718 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:51015 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:51326 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:51364 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:51836 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:51885 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:52055 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:52133 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:52267 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:52815 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:53056 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:53110 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:53170 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:53228 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:53367 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:53570 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:53923 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:53965 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:54022 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:54778 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:55151 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:55302 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:55547 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:55603 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:55932 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:56048 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:56806 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:56845 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:57026 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:57684 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:57973 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:58081 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:58622 error Empty block statement no-empty + 8:58842 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:58981 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:59083 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:59700 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:60782 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:61028 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:61129 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:63004 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:63191 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:63347 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:63508 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:63797 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:64093 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:64119 error Expected a conditional expression and instead saw an assignment no-cond-assign + 8:64170 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:64242 error 'console' is not defined no-undef + 8:64370 error 'setTimeout' is not defined no-undef + 8:64534 error 'setTimeout' is not defined no-undef + 8:64805 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:64890 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:64963 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:66192 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:66763 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:67438 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:67821 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:67870 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:67923 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:68112 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:68991 error Expected a conditional expression and instead saw an assignment no-cond-assign + 8:69368 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:69425 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:69634 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:69656 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:69899 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:70011 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:70443 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:71431 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:71502 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:71750 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:71864 error Expected a conditional expression and instead saw an assignment no-cond-assign + 8:72391 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:72839 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:72965 error Expected a conditional expression and instead saw an assignment no-cond-assign + 8:74639 error Expected a conditional expression and instead saw an assignment no-cond-assign + 8:75257 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:75702 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:75941 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:75970 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:77147 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:77234 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:77695 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:77782 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:77911 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:78005 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:78061 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:78301 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:78774 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:78981 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:79950 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:80102 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:80220 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:80271 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:80573 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:80856 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:81111 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:81251 error Expected a conditional expression and instead saw an assignment no-cond-assign + 8:83897 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:84071 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:84109 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:84201 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:84239 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:84423 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:84546 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:85467 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:85566 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:85698 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:86177 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:86224 error Unnecessary escape character: \/ no-useless-escape + 8:86284 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:86506 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:86647 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:86776 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:86963 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:87081 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:87301 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:87410 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:87685 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:87740 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:87756 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:88204 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:88259 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:88275 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:89263 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:89357 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:89606 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:89698 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:91492 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:91571 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:91689 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:91893 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:92124 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:92361 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:92626 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:92813 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:93083 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:93124 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:93241 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:93640 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:93750 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:94118 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:94187 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:94348 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:94495 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:94799 error 'window' is not defined no-undef + 8:94939 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:95180 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:95291 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:95506 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:95677 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:95762 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:95848 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:96252 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:96364 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:96642 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:96900 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:96921 error Expected a 'break' statement before 'case' no-fallthrough + 8:96936 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:97023 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:97058 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:97220 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:97273 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:97410 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:97742 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:97872 error Empty block statement no-empty + 8:97896 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:98029 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:98054 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:98136 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:98148 error Expected a 'break' statement before 'case' no-fallthrough + 8:98392 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:98531 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:98630 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:98677 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:98806 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:99692 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:99733 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:99775 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:99860 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:99985 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:100107 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:100183 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:100563 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:100635 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:101250 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:101323 error Expected a conditional expression and instead saw an assignment no-cond-assign + 8:101742 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:101831 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:101939 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:102170 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:102409 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:102581 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:102823 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:102854 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:102925 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:102953 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:103043 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:103530 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:103694 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 8:103996 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:104135 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:104253 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:104280 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:104334 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:104436 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:104554 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:104789 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:104978 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:105074 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:105202 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:105327 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:105396 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:105492 error Expected a 'break' statement before 'case' no-fallthrough + 8:105507 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:105542 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:105771 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:106113 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:106163 error Expected a 'break' statement before 'case' no-fallthrough + 8:106178 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:106265 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:106305 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:106345 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:106473 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:106739 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:106932 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:107028 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:107094 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:107265 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:107341 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:107555 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:107761 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:107975 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:108043 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:108180 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:108374 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:108422 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:108567 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:108630 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:108769 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:108831 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:109057 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:109204 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:109271 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:109341 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:109449 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:109679 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:109764 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:109801 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:110101 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:110185 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:110305 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:110861 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:110984 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:111283 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:111351 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:111439 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:111632 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:111682 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:111777 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:111891 error Expected a 'break' statement before 'case' no-fallthrough + 8:112074 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:112225 error Unexpected constant condition no-constant-condition + 8:112346 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:112567 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:112972 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:113084 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:113153 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:113285 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:113299 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:113414 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:113466 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:113542 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:113859 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:113909 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:114301 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:114462 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:114569 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:114614 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:114708 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:114737 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:114776 error Unexpected constant condition no-constant-condition + 8:114952 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:115067 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:115121 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:115145 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:115158 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:115257 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:115373 error Expected a 'break' statement before 'case' no-fallthrough + 8:115429 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:115493 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:115530 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:115567 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:115604 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:115685 error Unexpected constant condition no-constant-condition + 8:115837 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:116074 error Expected a 'break' statement before 'default' no-fallthrough + 8:116082 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:116116 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:116187 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:116253 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:116328 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:116369 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:116708 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:116780 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:116942 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:117415 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:117473 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:117490 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:117604 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:117879 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:117968 error 'document' is not defined no-undef + 8:117997 error 'window' is not defined no-undef + 8:118128 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:118331 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:118483 error Expected a conditional expression and instead saw an assignment no-cond-assign + 8:118499 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:118642 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:118697 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:118724 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:118741 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:118850 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:118926 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:118982 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:119016 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:119271 error Empty block statement no-empty + 8:119286 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:119424 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:119437 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:119542 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:119747 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:119996 error Empty block statement no-empty + 8:120015 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:120055 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:120375 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:120563 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:120609 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:120707 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:120905 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:120998 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:121123 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:121251 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:121371 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:121615 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:121687 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:121714 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:121894 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:121976 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:122068 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:122250 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:123289 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:123344 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:123681 error 'FormData' is not defined no-undef + 8:123828 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:123835 error Expected a conditional expression and instead saw an assignment no-cond-assign + 8:124077 error 'FormData' is not defined no-undef + 8:124153 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:124211 error 'FormData' is not defined no-undef + 8:124407 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:126004 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:126050 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:126198 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:126244 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:126300 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:126349 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:126410 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:126519 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:126551 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:126650 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:126794 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:127579 error Expected a 'break' statement before 'case' no-fallthrough + 8:127630 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:127666 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:127766 error Expected a 'break' statement before 'case' no-fallthrough + 8:128718 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:128974 error Expected a conditional expression and instead saw an assignment no-cond-assign + 8:129023 error 'window' is not defined no-undef + 8:129581 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:129604 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:129675 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:129708 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:129785 error 'window' is not defined no-undef + 8:129932 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:130051 error Expected a conditional expression and instead saw an assignment no-cond-assign + 8:130083 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:130202 error 'window' is not defined no-undef + 8:130226 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:130398 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:130454 error Expected a 'break' statement before 'case' no-fallthrough + 8:130693 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:130785 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:131769 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:131905 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 8:131968 error Unexpected control character(s) in regular expression: \x00 no-control-regex + 9:111 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:476 error Expected a 'break' statement before 'case' no-fallthrough + 9:660 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:1060 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:1453 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:1504 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:1549 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:1596 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:2248 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:2482 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:2952 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:3073 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:3250 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:3390 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:3511 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:4339 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:4693 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:4794 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:4841 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:4887 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:5072 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:5286 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:5411 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:5585 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:5642 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:5833 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:5980 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:6374 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:6490 error Expected a 'break' statement before 'default' no-fallthrough + 9:6517 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:6651 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:6914 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:7083 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:7271 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:7372 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:7397 error Expected a 'break' statement before 'case' no-fallthrough + 9:7536 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:7712 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:7714 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:7794 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:7796 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:8057 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:8155 error Expected a 'break' statement before 'default' no-fallthrough + 9:8163 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:8165 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:8243 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:8531 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:8631 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:8705 error Expected a 'break' statement before 'default' no-fallthrough + 9:8713 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:8715 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:8783 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:8901 error Expected a 'break' statement before 'default' no-fallthrough + 9:8909 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:8932 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:9077 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:9108 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:9232 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:9426 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:9506 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:9537 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:9657 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:10003 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:10012 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:10043 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:10111 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:10314 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:10323 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:10357 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:10408 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:10425 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:10514 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:10523 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:10554 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:10603 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:10620 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 9:10834 error 'performance' is not defined no-undef + 9:10894 error 'performance' is not defined no-undef + 9:11151 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:11283 error 'navigator' is not defined no-undef + 9:11308 error 'navigator' is not defined no-undef + 9:11994 error 'window' is not defined no-undef + 9:12107 error 'setTimeout' is not defined no-undef + 9:12160 error 'clearTimeout' is not defined no-undef + 9:12262 error 'queueMicrotask' is not defined no-undef + 9:12362 error 'setTimeout' is not defined no-undef + 9:12559 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:12727 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:12816 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:12925 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:13368 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:13580 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:15435 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:15484 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:15921 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:16162 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:16807 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:16890 error 'document' is not defined no-undef + 9:16968 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:17221 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:17272 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:17399 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:17637 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:18425 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:18651 error Expected a conditional expression and instead saw an assignment no-cond-assign + 9:18693 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:18801 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:18853 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:19006 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:19161 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:19467 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:19722 error Expected a conditional expression and instead saw an assignment no-cond-assign + 9:21167 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:22001 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:22129 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:22255 error Expected a conditional expression and instead saw an assignment no-cond-assign + 9:22513 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:22862 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:22983 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:23084 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:23264 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:23570 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:23624 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:24418 error 'matchMedia' is not defined no-undef + 9:24540 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:24679 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:24771 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:24802 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:24855 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:25175 error 'setTimeout' is not defined no-undef + 9:25266 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:25296 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:25340 error 'setTimeout' is not defined no-undef + 9:25468 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:25549 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:25566 error 'clearTimeout' is not defined no-undef + 9:25582 error 'clearTimeout' is not defined no-undef + 9:25787 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:25842 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:26025 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:26155 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:26251 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:26268 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:26704 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:27674 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:27981 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:28077 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:28195 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:28288 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:28314 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:28381 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:28407 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:28472 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:28799 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:28827 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:28887 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:28982 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:29396 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:32070 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:32161 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:32533 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:32663 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:32696 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:32835 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:32966 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:33045 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:33192 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:33326 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:33455 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:33539 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:33711 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:33860 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:33947 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:34120 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:34146 error 'setTimeout' is not defined no-undef + 9:34184 error 'navigation' is not defined no-undef + 9:34213 error 'navigation' is not defined no-undef + 9:34237 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:34253 error 'navigation' is not defined no-undef + 9:34399 error 'navigation' is not defined no-undef + 9:34441 error 'navigation' is not defined no-undef + 9:34490 error 'navigation' is not defined no-undef + 9:34537 error 'setTimeout' is not defined no-undef + 9:34566 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:34571 error 'navigation' is not defined no-undef + 9:34616 error 'navigation' is not defined no-undef + 9:34668 error 'navigation' is not defined no-undef + 9:34779 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:35067 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:35316 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:35811 error '__REACT_DEVTOOLS_GLOBAL_HOOK__' is not defined no-undef + 9:35882 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:35910 error Empty block statement no-empty + 9:36413 error '__REACT_DEVTOOLS_GLOBAL_HOOK__' is not defined no-undef + 9:36470 error '__REACT_DEVTOOLS_GLOBAL_HOOK__' is not defined no-undef + 9:36522 error 'console' is not defined no-undef + 9:36540 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:36751 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:36854 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:37020 error 'document' is not defined no-undef + 9:37060 error 'document' is not defined no-undef + 9:37490 error 'document' is not defined no-undef + 9:37551 error 'document' is not defined no-undef + 9:37682 error 'document' is not defined no-undef + 9:37740 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:37873 error 'Event' is not defined no-undef + 9:37931 error 'window' is not defined no-undef + 9:38020 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:38631 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:38651 error 'console' is not defined no-undef + 9:38691 error Empty block statement no-empty + 9:39260 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:39330 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:39444 error 'document' is not defined no-undef + 9:39515 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:39657 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:39762 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:39878 error 'DOMException' is not defined no-undef + 9:39947 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:40054 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:40119 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:40389 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:40645 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:40667 error 'window' is not defined no-undef + 9:40699 error 'window' is not defined no-undef + 9:40720 error 'window' is not defined no-undef + 9:40908 error 'URL' is not defined no-undef + 9:41534 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:41825 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:43295 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:43491 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:45502 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:46072 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:46468 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:46900 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:47249 error 'window' is not defined no-undef + 9:47275 error 'window' is not defined no-undef + 9:47453 error 'URL' is not defined no-undef + 9:47457 error 'window' is not defined no-undef + 9:47504 error 'URL' is not defined no-undef + 9:47526 error 'URL' is not defined no-undef + 9:47552 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:48892 error Empty block statement no-empty + 9:49109 error Empty block statement no-empty + 9:49690 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 9:50229 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:143 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:662 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:1914 error 'console' is not defined no-undef + 11:2587 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:3032 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:3075 error 'console' is not defined no-undef + 11:3280 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:3812 error 'window' is not defined no-undef + 11:3891 error 'window' is not defined no-undef + 11:4601 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:4943 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 11:5020 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:5277 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:6919 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:7065 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:7241 error 'e' is defined but never used @typescript-eslint/no-unused-vars + 11:7756 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:8364 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:8557 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:9388 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:9567 error 'HTMLElement' is not defined no-undef + 11:9943 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:9947 error 'FormData' is not defined no-undef + 11:9956 error 'document' is not defined no-undef + 11:10334 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:10424 error 'FormData' is not defined no-undef + 11:10822 error 'FormData' is not defined no-undef + 11:10907 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:10956 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:11091 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:11539 error 'URL' is not defined no-undef + 11:11587 error 'window' is not defined no-undef + 11:11979 error 'console' is not defined no-undef + 11:12058 error 'console' is not defined no-undef + 11:12075 error 'window' is not defined no-undef + 11:12104 error 'window' is not defined no-undef + 11:12142 error 'window' is not defined no-undef + 11:13151 error 'URL' is not defined no-undef + 11:13182 error 'window' is not defined no-undef + 11:13240 error 'URL' is not defined no-undef + 11:13246 error 'window' is not defined no-undef + 11:14664 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:14730 error 'IntersectionObserver' is not defined no-undef + 11:14904 error 'setTimeout' is not defined no-undef + 11:14943 error 'clearTimeout' is not defined no-undef + 11:14992 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:15176 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:15566 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:15828 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:16519 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:17339 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:17391 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:17429 error 'window' is not defined no-undef + 11:17455 error 'window' is not defined no-undef + 11:17498 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:17503 error 'window' is not defined no-undef + 11:17546 error Empty block statement no-empty + 11:17767 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:18139 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:18899 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:19173 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:19910 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:21258 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:21655 error 'window' is not defined no-undef + 11:21678 error 'window' is not defined no-undef + 11:21746 error 'window' is not defined no-undef + 11:21807 error 'sessionStorage' is not defined no-undef + 11:21843 error 'window' is not defined no-undef + 11:21869 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:21889 error 'window' is not defined no-undef + 11:21919 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:21919 error 'console' is not defined no-undef + 11:21936 error 'sessionStorage' is not defined no-undef + 11:22854 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:23156 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:23965 error 'URLSearchParams' is not defined no-undef + 11:24033 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:24674 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:24691 error 'window' is not defined no-undef + 11:24738 error 'window' is not defined no-undef + 11:24851 error 'window' is not defined no-undef + 11:24870 error 'sessionStorage' is not defined no-undef + 11:25040 error 'window' is not defined no-undef + 11:25158 error 'sessionStorage' is not defined no-undef + 11:25188 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:25215 error Empty block statement no-empty + 11:25287 error 'window' is not defined no-undef + 11:25415 error 'window' is not defined no-undef + 11:25464 error 'document' is not defined no-undef + 11:25657 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:25665 error 'window' is not defined no-undef + 11:25793 error 'window' is not defined no-undef + 11:25838 error 'window' is not defined no-undef + 11:26410 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:26540 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:26712 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:26754 error 'window' is not defined no-undef + 11:26800 error 'window' is not defined no-undef + 11:26854 error 'window' is not defined no-undef + 11:26920 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:26976 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:27046 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:27082 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:27152 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:27384 error 'setTimeout' is not defined no-undef + 11:27416 error 'clearTimeout' is not defined no-undef + 11:27451 error 'setInterval' is not defined no-undef + 11:27485 error 'clearInterval' is not defined no-undef + 11:27749 error 'setTimeout' is not defined no-undef + 11:29277 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:29416 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:29772 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 11:30799 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:30809 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:30858 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:30931 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:30982 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:31092 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:31134 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:31234 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:31451 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:31493 error 'window' is not defined no-undef + 11:31553 error 'window' is not defined no-undef + 11:31592 error 'window' is not defined no-undef + 11:31637 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:31637 error 'window' is not defined no-undef + 11:31676 error 'window' is not defined no-undef + 11:31733 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:31789 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:31859 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:31931 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:32168 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:32333 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:32500 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:32533 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:32581 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:32587 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:32631 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:32991 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:33052 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:33274 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:33479 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:34358 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:34398 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:34827 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:35369 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:35458 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:35833 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:35914 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:36619 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:36732 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:36847 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:37001 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:37403 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:37773 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:37813 error 'AbortController' is not defined no-undef + 11:38250 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:38555 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:39690 error Unexpected lexical declaration in case block no-case-declarations + 11:39895 error Unexpected lexical declaration in case block no-case-declarations + 11:40194 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:40233 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:41076 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:41312 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:41446 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:41674 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:42084 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:42280 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:42507 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:43725 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:43904 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:44037 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:44123 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:44157 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:44222 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:44494 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:44721 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:45036 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:45127 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:45976 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:46093 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:46147 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:46195 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:46312 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:46823 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:46932 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:47003 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:47787 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:47960 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:48065 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:48208 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:48342 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:49080 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:49235 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:50747 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:50786 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:51083 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:51377 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:51574 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:51601 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:51975 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:52533 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:52613 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:52714 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:53067 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:53138 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:53201 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:54212 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:54475 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:54607 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:55233 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:55373 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:55428 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:55519 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:55591 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:57551 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:58348 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:58558 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:59171 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:59540 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:59810 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:60180 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:60609 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:61949 error 'URLSearchParams' is not defined no-undef + 11:62003 error 'fetch' is not defined no-undef + 11:62392 error 'fetch' is not defined no-undef + 11:62485 error 'fetch' is not defined no-undef + 11:62611 error 'fetch' is not defined no-undef + 11:62822 error 'fetch' is not defined no-undef + 11:63037 error 'fetch' is not defined no-undef + 11:63167 error 'fetch' is not defined no-undef + 11:63475 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:63651 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:64636 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:65234 error 'setInterval' is not defined no-undef + 11:65263 error 'clearInterval' is not defined no-undef + 11:66477 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:66555 error 'console' is not defined no-undef + 11:68114 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:69701 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:69764 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:69823 error 'document' is not defined no-undef + 11:69868 error 'document' is not defined no-undef + 11:72323 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:73031 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:73086 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:73181 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:79235 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:79545 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:79855 error 'oa' is a function no-func-assign + 11:79975 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:80202 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:80858 error 'da' is a function no-func-assign + 11:80978 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:81205 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:81709 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:82093 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:82186 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:82261 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:82344 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:82415 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:82499 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:82733 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:82820 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:82994 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:83273 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:83633 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:84002 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:84265 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:84420 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:84524 error Expected a 'break' statement before 'default' no-fallthrough + 11:84709 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:84878 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:84907 error Expected a conditional expression and instead saw an assignment no-cond-assign + 11:85469 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:85743 error Expected a conditional expression and instead saw an assignment no-cond-assign + 11:85748 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:85849 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:85873 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:86960 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:87072 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:87217 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:87321 error Expected a 'break' statement before 'default' no-fallthrough + 11:87329 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:87497 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:87624 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:87688 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:87955 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:88202 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:88281 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:88385 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:88562 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:88836 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:89572 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:89700 error Expected a 'break' statement before 'case' no-fallthrough + 11:89753 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:89908 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:90025 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:90109 error Expected a 'break' statement before 'default' no-fallthrough + 11:90136 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:90318 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:90473 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:90552 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:90731 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:90886 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:90935 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:90984 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:91127 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:91355 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:91429 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:91712 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:91802 error Expected a 'break' statement before 'default' no-fallthrough + 11:91829 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:92045 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:92105 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:92769 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:92974 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:93173 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:93290 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:93392 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:94069 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:94387 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:94516 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:94670 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:94760 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:94984 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:95115 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:95169 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:95436 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:95540 error Expected a 'break' statement before 'default' no-fallthrough + 11:95562 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:95661 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:95725 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:97305 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:97317 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:97352 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:98510 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:99022 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:100791 error 'ds' is a function no-func-assign + 11:100911 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:101098 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:101302 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:102165 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:103044 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:103615 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:103843 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:104010 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:104214 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:105204 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:108172 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:108299 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:108890 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:109876 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:110016 error 'window' is not defined no-undef + 11:110047 error 'self' is not defined no-undef + 11:110078 error 'global' is not defined no-undef + 11:111764 error 'File' is not defined no-undef + 11:111780 error 'File' is not defined no-undef + 11:111877 error 'Blob' is not defined no-undef + 11:111893 error 'Blob' is not defined no-undef + 11:111979 error 'structuredClone' is not defined no-undef + 11:112652 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:113184 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:115380 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:116625 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:116730 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:116903 error 'window' is not defined no-undef + 11:116929 error 'window' is not defined no-undef + 11:117818 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:119399 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:119444 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:119494 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:119535 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:119662 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:119801 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:120002 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:120223 error 'd' is assigned a value but never used @typescript-eslint/no-unused-vars + 11:121911 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:122875 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:123977 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:125177 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:125436 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:125622 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:125739 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:125872 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:126296 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:126536 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:127072 error 't' is defined but never used @typescript-eslint/no-unused-vars + 11:127696 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:127989 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:128637 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:129440 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:129535 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:129593 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:129665 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:129812 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:129884 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:130297 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:130372 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:130640 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:130853 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:131059 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:131152 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:131190 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:131219 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:131267 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:131585 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:131629 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:131856 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:132705 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:133366 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:133772 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:133952 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:134087 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 11:134164 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:134260 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:134280 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:134428 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:134665 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:134906 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:135034 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:135426 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:135806 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:135993 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:136330 error 'window' is not defined no-undef + 11:136374 error 'window' is not defined no-undef + 11:136519 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:136538 error 'window' is not defined no-undef + 11:136575 error 'window' is not defined no-undef + 11:136928 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:137378 error 'n' is assigned a value but never used @typescript-eslint/no-unused-vars + 11:137401 error 'r' is assigned a value but never used @typescript-eslint/no-unused-vars + 11:137425 error 'i' is assigned a value but never used @typescript-eslint/no-unused-vars + 11:137574 error 'setTimeout' is not defined no-undef + 11:137681 error 'queueMicrotask' is not defined no-undef + 11:137730 error 'window' is not defined no-undef + 11:137759 error 'window' is not defined no-undef + 11:137856 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:137981 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:138301 error 'a' is assigned a value but never used @typescript-eslint/no-unused-vars + 11:138479 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:140630 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:140982 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:142265 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:142656 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:143033 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:143124 error 't' is defined but never used @typescript-eslint/no-unused-vars + 11:143457 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:143776 error 'setTimeout' is not defined no-undef + 11:143937 error 'AbortController' is not defined no-undef + 11:143977 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:144297 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:144364 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:144376 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:144407 error 'setTimeout' is not defined no-undef + 11:144619 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:145195 error 'setTimeout' is not defined no-undef + 11:145349 error 'console' is not defined no-undef + 11:145482 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:145616 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:145839 error 'AbortController' is not defined no-undef + 11:145881 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:146202 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:146250 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:146332 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:146385 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:146797 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:146833 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:147314 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:147380 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:147917 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:148121 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:150830 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:151100 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:151311 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:153653 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:153857 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:155241 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:155928 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:155977 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:156003 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:156012 error 'clearTimeout' is not defined no-undef + 11:156030 error 'setTimeout' is not defined no-undef + 11:156046 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:156069 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:156080 error 'clearTimeout' is not defined no-undef + 11:156112 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:156183 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:156183 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 11:156208 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:156428 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:156502 error Unexpected comma in middle of array no-sparse-arrays + 11:156503 error Unexpected comma in middle of array no-sparse-arrays + 11:156506 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:156588 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:157184 error 'console' is not defined no-undef + 11:157211 error 'console' is not defined no-undef + 11:157289 error 'console' is not defined no-undef + 11:157444 error 'console' is not defined no-undef + 11:158228 error 'tp' is a function no-func-assign + 11:158348 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:158535 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:158739 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:159996 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:160441 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:160485 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 11:160549 error 'ResizeObserver' is not defined no-undef + 14:1479 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:1651 error 't' is defined but never used @typescript-eslint/no-unused-vars + 14:2313 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:2611 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:3125 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:3859 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:3947 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:4005 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:4089 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:4726 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:4795 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:5208 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:5321 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:5472 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:5726 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:6278 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:6848 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:7354 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:7512 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:7676 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 14:7753 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:7876 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:7896 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:8056 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:8289 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:8572 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:8698 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:9090 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:9477 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:9661 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:9893 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:9977 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:10307 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:10424 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:10485 error 'bm' is assigned a value but never used @typescript-eslint/no-unused-vars + 14:10506 error 'xm' is assigned a value but never used @typescript-eslint/no-unused-vars + 14:10608 error 'e' is defined but never used @typescript-eslint/no-unused-vars + 14:10622 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:10792 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:10840 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:10892 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:11020 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:11237 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:11293 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:11363 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:11429 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:11486 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:11513 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:11692 error 'window' is not defined no-undef + 14:11718 error 'window' is not defined no-undef + 14:11782 error 'navigator' is not defined no-undef + 14:12766 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:13457 error 'Gm' is a function no-func-assign + 14:13577 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:13764 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:13968 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:16231 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:17881 error 'window' is not defined no-undef + 14:17898 error 'window' is not defined no-undef + 14:17929 error 'window' is not defined no-undef + 14:18002 error 'window' is not defined no-undef + 14:18023 error 'window' is not defined no-undef + 14:18116 error 'window' is not defined no-undef + 14:18141 error 'window' is not defined no-undef + 14:18411 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:18615 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:19595 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:19622 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:19732 error 'document' is not defined no-undef + 14:19776 error 'document' is not defined no-undef + 14:20977 error 'vh' is a function no-func-assign + 14:21097 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:21284 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:21488 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:23584 error 'Ph' is a function no-func-assign + 14:23704 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:23891 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:24095 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:24958 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:25829 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:26033 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:27127 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:27331 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:28595 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:28703 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:29066 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:30866 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:30909 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:31032 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:31214 error 'performance' is not defined no-undef + 14:31245 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:31302 error 'requestAnimationFrame' is not defined no-undef + 14:31338 error 'requestAnimationFrame' is not defined no-undef + 14:31368 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:31377 error 'cancelAnimationFrame' is not defined no-undef + 14:31968 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:32126 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:32552 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:32756 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:33491 error 'Jg' is a function no-func-assign + 14:33611 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:33838 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 14:34397 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 24:539 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 24:552 error Empty block statement no-empty + 24:997 error 'w' is assigned a value but never used @typescript-eslint/no-unused-vars + 24:1479 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 24:1644 error 'h' is assigned a value but never used @typescript-eslint/no-unused-vars + 24:1910 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 24:2114 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 24:4224 error 'C_' is a function no-func-assign + 24:4344 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:1583 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:1806 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:2907 error Empty block statement no-empty + 41:2973 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:3051 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:3079 error Empty block statement no-empty + 41:3234 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:3312 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:3340 error Empty block statement no-empty + 41:3937 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:4064 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:4333 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:4534 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:5144 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:5411 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:5516 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:5880 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:5991 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:6219 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:6807 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:7025 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:7209 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:7360 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:7524 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:7731 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:7871 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:8240 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:8431 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:8665 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:8847 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:9284 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:9539 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:9580 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:9751 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:9958 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:10442 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:10597 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:10647 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:11276 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:12123 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:12163 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:12602 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:12998 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:13108 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:13225 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:13330 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:13755 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:13820 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:14479 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:15062 error Unexpected aliasing of 'this' to local variable @typescript-eslint/no-this-alias + 41:15141 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:15162 error Expected a conditional expression and instead saw an assignment no-cond-assign + 41:15263 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:15280 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:15326 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:15808 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:15810 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 41:16254 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:16322 error 'define' is not defined no-undef + 41:16333 error 'define' is not defined no-undef + 41:16418 error 'self' is not defined no-undef + 41:16424 error 'self' is not defined no-undef + 41:16435 error 'self' is not defined no-undef + 41:16440 error 'self' is not defined no-undef + 41:16652 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:17327 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:17551 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:17689 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:18182 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:20750 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:20954 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:23568 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:24830 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:25122 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:25289 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:25410 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:25683 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:25742 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:25812 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:27487 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:27616 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:27685 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:27799 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:27868 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:28421 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:28528 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:28998 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:29334 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:29404 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:29734 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:29763 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:30166 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:31307 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:35025 error Expected a conditional expression and instead saw an assignment no-cond-assign + 41:35286 error Expected a conditional expression and instead saw an assignment no-cond-assign + 41:35326 error Expected a conditional expression and instead saw an assignment no-cond-assign + 41:35390 error Expected a conditional expression and instead saw an assignment no-cond-assign + 41:35429 error Expected a conditional expression and instead saw an assignment no-cond-assign + 41:35492 error Expected a conditional expression and instead saw an assignment no-cond-assign + 41:35536 error Expected a conditional expression and instead saw an assignment no-cond-assign + 41:35585 error Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins + 41:35972 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:37547 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:39706 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:40090 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:40516 error Expected a conditional expression and instead saw an assignment no-cond-assign + 41:40783 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:41093 error Expected a conditional expression and instead saw an assignment no-cond-assign + 41:41526 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:43509 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:44237 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:44288 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:45762 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:46195 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:46485 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:46547 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:47647 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:47770 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:48212 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:48263 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:49593 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:49889 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:52501 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:54412 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:54881 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:55208 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:55346 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:55457 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:55611 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:55722 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:55879 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:56003 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:56127 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:56165 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:56397 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:56489 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:56690 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:56767 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:56924 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:56947 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:57131 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:57154 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:57292 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:57351 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:57503 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:57662 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:57721 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:58136 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:59616 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:59799 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:60303 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:60647 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:68657 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:69955 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:70430 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:72967 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:73495 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:73699 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:78079 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:79652 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:79708 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:79859 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:84198 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:84950 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:85137 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:88216 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:89311 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:89459 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:89598 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:89993 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:90144 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:90547 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:90879 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:91264 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:91869 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:92073 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:93949 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:94886 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:95090 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:99093 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:99297 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:100226 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:100430 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:102204 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:102281 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:104244 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:104448 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:105466 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:105655 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:105866 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:106114 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:106590 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:106761 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:106869 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:107011 error 'gk' is a function no-func-assign + 41:107131 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:107318 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:107522 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:108604 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:108652 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:108775 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:108867 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:109524 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:109617 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:109926 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:109996 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:110035 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:110140 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:111684 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:111780 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:111844 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:112871 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:112914 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:113122 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:113243 error 'zk' is assigned a value but never used @typescript-eslint/no-unused-vars + 41:113394 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:113598 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:114461 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:115362 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:116579 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:116676 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:117159 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:117363 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:119287 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:119951 error 'e' is defined but never used @typescript-eslint/no-unused-vars + 41:120462 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:120724 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:120942 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:121146 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:122235 error 'document' is not defined no-undef + 41:122263 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:122269 error 'document' is not defined no-undef + 41:122361 error 'document' is not defined no-undef + 41:123778 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:124412 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:125351 error 'JA' is a function no-func-assign + 41:125471 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:125698 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:126488 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:127415 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:128885 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:129089 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:131744 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:132077 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:132281 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:133016 error 'Ej' is a function no-func-assign + 41:133136 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:133986 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:134020 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 41:134049 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:1428 error 'y' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:1507 error 'b' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:2843 error 'Gj' is a function no-func-assign + 43:2963 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:3190 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:3584 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:3751 error 'i' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:4515 error 'nM' is a function no-func-assign + 43:4635 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:5202 error 'aM' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:5222 error 'oM' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:5238 error 'sM' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:5257 error 'cM' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:6347 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:6608 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:7371 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:7575 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:8310 error 'jM' is a function no-func-assign + 43:8430 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:9413 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:9426 error Empty block statement no-empty + 43:9948 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:10418 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:10751 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:10955 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:11722 error 't' is defined but never used @typescript-eslint/no-unused-vars + 43:12675 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:12829 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:12891 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:13123 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:13406 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:14141 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:14281 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:14498 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:14646 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:14810 error 'lN' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:14838 error 'uN' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:14867 error 'dN' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:14979 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:15274 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:15478 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:16213 error 'bN' is a function no-func-assign + 43:16333 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:16560 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:16993 error 'o' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:17758 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:17962 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:18889 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:19182 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:19475 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:19996 error 'RN' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:20012 error 'zN' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:20027 error 'BN' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:20426 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:20630 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:22674 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:22878 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:23741 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:24026 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:24074 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:25166 error 'mP' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:25619 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:25753 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:25891 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:25931 error 'yP' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:25944 error 'bP' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:25955 error 'xP' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:25969 error 'SP' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:25980 error 'CP' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:25994 error 'wP' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:26446 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:27049 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:27421 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:27528 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:27675 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:27879 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:28930 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:29226 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:29678 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:30761 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:31416 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:31661 error 'ZP' is a function no-func-assign + 43:31781 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:31968 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:32172 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:33740 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:33805 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:33871 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:33932 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:34577 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:35320 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:37126 error 'window' is not defined no-undef + 43:37184 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:38361 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:38565 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:39300 error 'SF' is a function no-func-assign + 43:39420 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:39647 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:40310 error 'u' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:40524 error 'a' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:40534 error 'o' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:40898 error 'a' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:40908 error 'o' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:41365 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:41909 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:43435 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:43728 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:44462 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:44554 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:44692 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:44787 error 'IF' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:44806 error 'LF' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:44824 error 'RF' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:45018 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:47147 error 'aI' is a function no-func-assign + 43:47267 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:47454 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:47658 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:48521 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:49451 error 'l' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:49705 error 's' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:51160 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:51223 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:51295 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:55616 error 'II' is a function no-func-assign + 43:55736 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:58094 error 'XI' is a function no-func-assign + 43:58214 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:58441 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:59218 error 'cL' is a function no-func-assign + 43:59338 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:59525 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:59729 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:60592 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:61568 error 'a' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:61599 error 's' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:62486 error 'requestAnimationFrame' is not defined no-undef + 43:62533 error 'cancelAnimationFrame' is not defined no-undef + 43:62593 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:63904 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:63967 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:66747 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:66905 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:67140 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:68628 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:69216 error 'HL' is a function no-func-assign + 43:69336 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:69523 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:69727 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:70590 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:71013 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:71396 error 'u' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:71404 error 'd' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:71412 error 'f' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:71432 error 'm' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:71440 error 'h' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:72863 error 'rR' is a function no-func-assign + 43:72983 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:73170 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:73374 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:74237 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:74660 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:75187 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:75332 error 'h' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:75340 error 'g' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:75348 error '_' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:75368 error 'b' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:75376 error 'x' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:77007 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:77097 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:77490 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:77839 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:77851 error 'cancelAnimationFrame' is not defined no-undef + 43:77923 error 'clearTimeout' is not defined no-undef + 43:78030 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:78083 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:78222 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:78257 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:78270 error 'requestAnimationFrame' is not defined no-undef + 43:78330 error 'setTimeout' is not defined no-undef + 43:78387 error 'HTMLElement' is not defined no-undef + 43:78455 error 'window' is not defined no-undef + 43:78806 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:79552 error 'jR' is assigned a value but never used @typescript-eslint/no-unused-vars + 43:79659 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:79710 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:79735 error 'cancelAnimationFrame' is not defined no-undef + 43:79870 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:79908 error 'clearTimeout' is not defined no-undef + 43:80912 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:80948 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:80961 error 'requestAnimationFrame' is not defined no-undef + 43:81033 error 'setTimeout' is not defined no-undef + 43:81049 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:81539 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:82052 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:82065 error 'cancelAnimationFrame' is not defined no-undef + 43:82213 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:82252 error 'clearTimeout' is not defined no-undef + 43:82501 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:82519 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:82598 error 'requestAnimationFrame' is not defined no-undef + 43:82688 error 'setTimeout' is not defined no-undef + 43:83207 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:83219 error 'cancelAnimationFrame' is not defined no-undef + 43:83291 error 'clearTimeout' is not defined no-undef + 43:83540 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:83577 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:83743 error 'document' is not defined no-undef + 43:83797 error 'document' is not defined no-undef + 43:84131 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:84167 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:84180 error 'requestAnimationFrame' is not defined no-undef + 43:84252 error 'setTimeout' is not defined no-undef + 43:84268 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:84483 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:85666 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:86641 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:86886 error 'hz' is a function no-func-assign + 43:87006 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:87997 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:88141 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:88345 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:89080 error 'Ez' is a function no-func-assign + 43:89200 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:89958 error 'ResizeObserver' is not defined no-undef + 43:90046 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:91832 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:91934 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:92007 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:92081 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:92154 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:92675 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:93522 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:94497 error 'zz' is a function no-func-assign + 43:94617 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:94804 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:95008 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:97455 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:99899 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:107246 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:107375 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:107375 error 'console' is not defined no-undef + 43:107392 error 'alert' is not defined no-undef + 43:107434 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:109713 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:109833 error 'console' is not defined no-undef + 43:110508 error 'localStorage' is not defined no-undef + 43:110628 error 'localStorage' is not defined no-undef + 43:111400 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:113972 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:114130 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:114712 error Expected an assignment or function call and instead saw an expression @typescript-eslint/no-unused-expressions + 43:116642 error 'document' is not defined no-undef + +/Users/jhag/projects/babymonitor/frontend/src/api/client.ts + 25:132 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 34:122 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 38:119 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 42:129 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + +/Users/jhag/projects/babymonitor/frontend/src/components/Playground.tsx + 73:10 error 'setQueryDataByPrefix' is defined but never used @typescript-eslint/no-unused-vars + 73:44 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 73:73 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 87:38 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 119:28 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 120:26 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 125:79 error 't' is defined but never used @typescript-eslint/no-unused-vars + 125:82 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 151:6 warning React Hook useEffect has a missing dependency: 'selectedComponent'. Either include it or remove the dependency array react-hooks/exhaustive-deps + +/Users/jhag/projects/babymonitor/frontend/src/components/stats/BedtimePlot.tsx + 3:40 error 'getLocalOffsetFromReference' is defined but never used @typescript-eslint/no-unused-vars + 27:7 error Error: Calling setState synchronously within an effect can trigger cascading renders + +Effects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following: +* Update external systems with the latest state from React. +* Subscribe for updates from some external system, calling setState in a callback function when external state changes. + +Calling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect). + +/Users/jhag/projects/babymonitor/frontend/src/components/stats/BedtimePlot.tsx:27:7 + 25 | useEffect(() => { + 26 | if (!wakeupBedtime?.days) { +> 27 | setChartData([]); + | ^^^^^^^^^^^^ Avoid calling setState() directly within an effect + 28 | return; + 29 | } + 30 | react-hooks/set-state-in-effect + 74:32 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 77:18 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + +/Users/jhag/projects/babymonitor/frontend/src/components/stats/DailySummary.tsx + 12:3 error 'Cell' is defined but never used @typescript-eslint/no-unused-vars + 36:7 error Error: Calling setState synchronously within an effect can trigger cascading renders + +Effects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following: +* Update external systems with the latest state from React. +* Subscribe for updates from some external system, calling setState in a callback function when external state changes. + +Calling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect). + +/Users/jhag/projects/babymonitor/frontend/src/components/stats/DailySummary.tsx:36:7 + 34 | useEffect(() => { + 35 | if (!dailySummary?.days) { +> 36 | setChartData([]); + | ^^^^^^^^^^^^ Avoid calling setState() directly within an effect + 37 | setAvgStats({ avgTotal: 0, avgDay: 0, avgNight: 0, count: 0 }); + 38 | return; + 39 | } react-hooks/set-state-in-effect + 98:34 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 98:45 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 101:20 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + +/Users/jhag/projects/babymonitor/frontend/src/components/stats/SessionList.tsx + 24:12 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + +/Users/jhag/projects/babymonitor/frontend/src/components/stats/SettingsPopover.tsx + 20:5 error Error: Calling setState synchronously within an effect can trigger cascading renders + +Effects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following: +* Update external systems with the latest state from React. +* Subscribe for updates from some external system, calling setState in a callback function when external state changes. + +Calling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect). + +/Users/jhag/projects/babymonitor/frontend/src/components/stats/SettingsPopover.tsx:20:5 + 18 | + 19 | useEffect(() => { +> 20 | setLocalDayStart(dayStart); + | ^^^^^^^^^^^^^^^^ Avoid calling setState() directly within an effect + 21 | setLocalDayEnd(dayEnd); + 22 | setLocalWakeupRef(wakeupRef); + 23 | setLocalBedtimeRef(bedtimeRef); react-hooks/set-state-in-effect + +/Users/jhag/projects/babymonitor/frontend/src/components/stats/SleepTimetable.tsx + 19:9 error 'current' is never reassigned. Use 'const' instead prefer-const + 50:11 error 'sStart' is never reassigned. Use 'const' instead prefer-const + 51:11 error 'sEnd' is never reassigned. Use 'const' instead prefer-const + +/Users/jhag/projects/babymonitor/frontend/src/components/stats/WakeupPlot.tsx + 3:40 error 'getLocalOffsetFromReference' is defined but never used @typescript-eslint/no-unused-vars + 27:7 error Error: Calling setState synchronously within an effect can trigger cascading renders + +Effects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following: +* Update external systems with the latest state from React. +* Subscribe for updates from some external system, calling setState in a callback function when external state changes. + +Calling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect). + +/Users/jhag/projects/babymonitor/frontend/src/components/stats/WakeupPlot.tsx:27:7 + 25 | useEffect(() => { + 26 | if (!wakeupBedtime?.days) { +> 27 | setChartData([]); + | ^^^^^^^^^^^^ Avoid calling setState() directly within an effect + 28 | return; + 29 | } + 30 | react-hooks/set-state-in-effect + 76:32 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 79:18 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + +/Users/jhag/projects/babymonitor/frontend/src/components/tracker/SleepButton.tsx + 19:21 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + +/Users/jhag/projects/babymonitor/frontend/src/components/tracker/StatusBanner.tsx + 11:7 error Error: Calling setState synchronously within an effect can trigger cascading renders + +Effects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following: +* Update external systems with the latest state from React. +* Subscribe for updates from some external system, calling setState in a callback function when external state changes. + +Calling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect). + +/Users/jhag/projects/babymonitor/frontend/src/components/tracker/StatusBanner.tsx:11:7 + 9 | useEffect(() => { + 10 | if (!activeSession) { +> 11 | setElapsed(''); + | ^^^^^^^^^^ Avoid calling setState() directly within an effect + 12 | return; + 13 | } + 14 | react-hooks/set-state-in-effect + 22:6 warning React Hook useEffect has a missing dependency: 'activeSession'. Either include it or remove the dependency array react-hooks/exhaustive-deps + +/Users/jhag/projects/babymonitor/frontend/src/hooks/useSleepSession.ts + 58:72 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + +/Users/jhag/projects/babymonitor/frontend/tailwind.config.ts + 2:8 error 'tailwindcss' is defined but never used @typescript-eslint/no-unused-vars + +/Users/jhag/projects/babymonitor/frontend/tests/e2e/timetable_timezone.spec.ts + 17:34 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 23:37 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 81:15 error 'timetableContainer' is assigned a value but never used @typescript-eslint/no-unused-vars + +/Users/jhag/projects/babymonitor/frontend/tests/unit/SleepButton.test.tsx + 19:20 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 35:25 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 46:25 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 58:25 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + +/Users/jhag/projects/babymonitor/frontend/tests/unit/StatusBanner.test.tsx + 62:12 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 74:12 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + +/Users/jhag/projects/babymonitor/frontend/tests/unit/components/stats/SleepTimetable.test.tsx + 20:18 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 26:18 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 32:18 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 63:18 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any + 81:11 error 'cells' is assigned a value but never used @typescript-eslint/no-unused-vars + +✖ 2105 problems (2103 errors, 2 warnings) + 3 errors and 0 warnings potentially fixable with the `--fix` option. + diff --git a/frontend/missing_frontend_from_spec.md b/frontend/missing_frontend_from_spec.md new file mode 100644 index 0000000..5a2117d --- /dev/null +++ b/frontend/missing_frontend_from_spec.md @@ -0,0 +1,122 @@ +# Missing Frontend Features — Gaps vs SPEC.md + +This file lists things the spec explicitly requires that are **not yet implemented** in the frontend. It does **not** duplicate items already in `frontend_improvements.md` (code quality, performance, testing). + +--- + +## 1. StatusBanner — Awake State Missing Elapsed Time + +**Severity: Medium** + +**Spec requirement:** +> "No active session: 'Baby is awake 👶' with elapsed time since last sleep ended (if known)." + +**What is currently implemented** (`src/components/tracker/StatusBanner.tsx:40-50`): +The awake state renders only "Baby is awake" with the 👶 emoji. There is no elapsed time displayed. + +**What is missing:** +A line below "Baby is awake" that shows how long ago the last sleep session ended (e.g. "2h 15m ago"), updating every second. Should only appear "if known" — i.e. when a previous session with an `end_time` exists. + +**How to fix:** + +1. In `StatusBanner.tsx`, add a second `useQuery` call using `fetchSessions` from `src/api/client.ts`. Pass `{ limit: 1 }` to get only the most recent session. Example: + ```ts + import { fetchSessions } from '../../api/client'; + import { useQuery } from '@tanstack/react-query'; + + const { data: sessionsData } = useQuery({ + queryKey: ['sessions', 'last'], + queryFn: () => fetchSessions(), // already exists in api/client.ts + enabled: !activeSession, // only fetch when no active session + }); + const lastEndTime = sessionsData?.sessions?.[0]?.end_time ?? null; + ``` + +2. Add a second elapsed-time state and `useEffect` that runs only when `activeSession` is null and `lastEndTime` is set — mirrors the existing sleeping elapsed-time effect at lines 9-22: + ```ts + const [awakeElapsed, setAwakeElapsed] = useState(''); + useEffect(() => { + if (activeSession || !lastEndTime) { setAwakeElapsed(''); return; } + const update = () => setAwakeElapsed(formatElapsedTime(lastEndTime)); + update(); + const id = setInterval(update, 1000); + return () => clearInterval(id); + }, [activeSession, lastEndTime]); + ``` + `formatElapsedTime` is already imported from `../../utils/time`. + +3. In the awake JSX (currently lines 40-50), add the elapsed time below the "Baby is awake" text: + ```tsx + {awakeElapsed && ( +

({awakeElapsed} ago)

+ )} + ``` + +--- + +## 2. TimeAdjuster — Does Not Reset to "Now" on Session State Change + +**Severity: Medium** + +**Spec requirement:** +> "Resets to 'now' each time the state changes (start → stop or stop → start), but the user can freely edit before confirming." + +**What is currently implemented** (`src/components/tracker/TrackerPage.tsx:13`): +```ts +const [time, setTime] = useState(getLocalTime()); +``` +`time` is set once when the component mounts and never reset. After the user starts or stops a session, the datetime field keeps whatever value it had before. + +**What is missing:** +An automatic reset of the datetime input to the current local time whenever the active session state flips (null → session, or session → null). + +**How to fix:** + +In `TrackerPage.tsx`, import `useSleepSession` and add a `useEffect` that watches `activeSession?.id`. When it changes the time resets to "now": + +```ts +import { useSleepSession } from '../../hooks/useSleepSession'; + +const TrackerPage: React.FC = () => { + const getLocalTime = () => { /* existing implementation */ }; + const [time, setTime] = useState(getLocalTime()); + + // ADD THIS: + const { activeSession } = useSleepSession(); + useEffect(() => { + setTime(getLocalTime()); + }, [activeSession?.id]); // fires whenever session starts or ends + + // ... rest unchanged +``` + +Note: `useSleepSession` is already used inside `SleepButton.tsx` (a sibling), so there is no extra network cost — TanStack Query deduplicates the request. `getLocalTime` is already defined in `TrackerPage.tsx:7-11`. + +--- + +## 3. SleepButton — "Stop Sleep" Should Be Amber, Not Rose + +**Severity: Low** + +**Spec requirement:** +> "Large button labeled 'Stop Sleep' in a warm amber." + +**What is currently implemented** (`src/components/tracker/SleepButton.tsx:31`): +```ts +'bg-rose-500 text-white hover:bg-rose-600 shadow-rose-200' +``` +The button is red/rose, not amber. + +**How to fix:** + +In `SleepButton.tsx` at the ternary starting on line 28, change the three rose classes to amber: + +```ts +// Before: +'bg-rose-500 text-white hover:bg-rose-600 shadow-rose-200' + +// After: +'bg-amber-500 text-white hover:bg-amber-600 shadow-amber-200' +``` + +That is the only change needed in this file. diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 5c03f35..3cc63ce 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -25,13 +25,19 @@ "@types/node": "^25.6.0", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", + "@typescript-eslint/eslint-plugin": "^8.60.0", + "@typescript-eslint/parser": "^8.60.0", "@vitejs/plugin-react": "^6.0.1", "@vitest/ui": "^4.1.5", "autoprefixer": "^10.5.0", + "eslint": "^9.39.4", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^7.1.1", "jsdom": "^29.1.0", "postcss": "^8.5.12", "tailwindcss": "^4.2.4", "typescript": "^6.0.3", + "typescript-eslint": "^8.60.0", "vite": "^8.0.10", "vitest": "^4.1.5" } @@ -95,13 +101,13 @@ "license": "MIT" }, "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -109,16 +115,214 @@ "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==", + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@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/core/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/@babel/generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@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.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/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/@babel/helper-compilation-targets/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/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/runtime": { "version": "7.29.2", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", @@ -129,6 +333,54 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@bramus/specificity": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", @@ -295,6 +547,209 @@ "tslib": "^2.4.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "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/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.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/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/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", + "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.14.0", + "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.5", + "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/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/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", + "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", + "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/@exodus/bytes": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.0.tgz", @@ -313,6 +768,72 @@ } } }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.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", @@ -1221,6 +1742,13 @@ "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/lodash": { "version": "4.17.24", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", @@ -1267,6 +1795,240 @@ "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", "license": "MIT" }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.60.0.tgz", + "integrity": "sha512-QYb/sa74/s7OKMbACMjrYnGspj9Hs5YI5aaffSL65UfeBUzVzBJfVo3oWSpbzPurvm7yaCCo2Lk7lVj610HqKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.60.0", + "@typescript-eslint/type-utils": "8.60.0", + "@typescript-eslint/utils": "8.60.0", + "@typescript-eslint/visitor-keys": "8.60.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.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.60.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.60.0.tgz", + "integrity": "sha512-fcqpj/MyK4sxDPcbe7STNPbpQL4RLZOPWuaTmwZYuc+hJKzRf58yRxfhqGpc6PIq9ZyfSBpfHgmUHmHs0KwHwg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.60.0", + "@typescript-eslint/types": "8.60.0", + "@typescript-eslint/typescript-estree": "8.60.0", + "@typescript-eslint/visitor-keys": "8.60.0", + "debug": "^4.4.3" + }, + "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 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.60.0.tgz", + "integrity": "sha512-aZu74NNKJeUWqCjDddzdiKaS82dgYgV/vmf+Ui3ZdZejmgfXR/q+pRumgobnQ2cCJTgGTWp4ypiwsuofFubavg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.60.0", + "@typescript-eslint/types": "^8.60.0", + "debug": "^4.4.3" + }, + "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.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.60.0.tgz", + "integrity": "sha512-pFzqhllJMs+jghLQWzV00ds39xLzuyqPSev5pd8f4Ir0rtKR3ZLUB4/4dhjOFighWb9larvtfJvqL+4yKDI3Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.60.0", + "@typescript-eslint/visitor-keys": "8.60.0" + }, + "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.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.60.0.tgz", + "integrity": "sha512-BZPR3RGYlAXnly6ymAxfkVn5rCbZzQNou0rxv3GfWZ8cTQp+hhVd73khbGLAd8k1TlAPLISH337M+tAgAnaJDQ==", + "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.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.60.0.tgz", + "integrity": "sha512-SX46wEUtitCpq7AN38HkUU/+zvUpdKf7ephtWAFgckH8O7PQIyL5gvrhQgBLuEYgLfuKWOVvWVskMbuFHAz5xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.60.0", + "@typescript-eslint/typescript-estree": "8.60.0", + "@typescript-eslint/utils": "8.60.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.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 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.60.0.tgz", + "integrity": "sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA==", + "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.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.60.0.tgz", + "integrity": "sha512-3AcZNBGMClm6CXDyo8kYvVGT/sx29sS0oBsIb9oZI2gunA4Vm2M3YHzRLPvsUBBsl+yB5FPtltq7gGH0iTlp9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.60.0", + "@typescript-eslint/tsconfig-utils": "8.60.0", + "@typescript-eslint/types": "8.60.0", + "@typescript-eslint/visitor-keys": "8.60.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.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.1.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.60.0.tgz", + "integrity": "sha512-HtXuPfrHTyBDkameWpl+vJb1Uevu2tznAyahM1Oc4AENidCLTPiZDWIo4GfcxNdC/RcfGcadzzkqbRG87dUrQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.60.0", + "@typescript-eslint/types": "8.60.0", + "@typescript-eslint/typescript-estree": "8.60.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 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.60.0.tgz", + "integrity": "sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.60.0", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@vitejs/plugin-react": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.1.tgz", @@ -1429,6 +2191,47 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "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-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1452,6 +2255,13 @@ "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/aria-query": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", @@ -1462,6 +2272,144 @@ "dequal": "^2.0.3" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -1472,6 +2420,16 @@ "node": ">=12" } }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/autoprefixer": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", @@ -1509,6 +2467,32 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/baseline-browser-mapping": { "version": "2.10.23", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.23.tgz", @@ -1532,6 +2516,19 @@ "require-from-string": "^2.0.2" } }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/browserslist": { "version": "4.28.2", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", @@ -1567,6 +2564,66 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.30001791", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz", @@ -1598,6 +2655,39 @@ "node": ">=18" } }, + "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/chalk/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/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -1607,6 +2697,33 @@ "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", @@ -1627,6 +2744,21 @@ "url": "https://opencollective.com/express" } }, + "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/css-tree": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", @@ -1790,6 +2922,78 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/decimal.js": { "version": "10.6.0", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", @@ -1803,6 +3007,49 @@ "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", "license": "MIT" }, + "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/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -1823,6 +3070,19 @@ "node": ">=8" } }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/dom-accessibility-api": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", @@ -1830,6 +3090,21 @@ "dev": true, "license": "MIT" }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.344", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz", @@ -1864,6 +3139,123 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.2.tgz", + "integrity": "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", @@ -1871,6 +3263,66 @@ "dev": true, "license": "MIT" }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-toolkit": { "version": "1.46.0", "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.46.0.tgz", @@ -1891,6 +3343,325 @@ "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.4", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", + "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "9.39.4", + "@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.14.0", + "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.5", + "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": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", + "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 || ^10.0.0" + } + }, + "node_modules/eslint-plugin-react/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/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/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/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": "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/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/eslint/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/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/eslint/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/eslint/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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/espree/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/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "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/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", @@ -1901,6 +3672,16 @@ "@types/estree": "^1.0.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/eventemitter3": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", @@ -1917,6 +3698,27 @@ "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/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", @@ -1942,6 +3744,50 @@ "dev": true, "license": "MIT" }, + "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.4.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", @@ -1949,6 +3795,22 @@ "dev": true, "license": "ISC" }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/fraction.js": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", @@ -1978,6 +3840,180 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "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/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": "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/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -1985,6 +4021,117 @@ "dev": true, "license": "ISC" }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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/html-encoding-sniffer": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", @@ -1998,6 +4145,16 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, + "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/immer": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", @@ -2008,6 +4165,33 @@ "url": "https://opencollective.com/immer" } }, + "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/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -2018,6 +4202,21 @@ "node": ">=8" } }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/internmap": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", @@ -2027,6 +4226,243 @@ "node": ">=12" } }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -2034,6 +4470,183 @@ "dev": true, "license": "MIT" }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "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/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/jiti": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", @@ -2051,6 +4664,19 @@ "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/jsdom": { "version": "29.1.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.0.tgz", @@ -2093,6 +4719,93 @@ } } }, + "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/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "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.32.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", @@ -2354,6 +5067,42 @@ "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/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lru-cache": { "version": "11.3.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", @@ -2393,6 +5142,16 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mdn-data": { "version": "2.27.1", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", @@ -2410,6 +5169,22 @@ "node": ">=4" } }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -2420,6 +5195,13 @@ "node": ">=10" } }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -2439,6 +5221,42 @@ "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-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/node-exports-info/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/node-releases": { "version": "2.0.38", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", @@ -2446,6 +5264,114 @@ "dev": true, "license": "MIT" }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/obug": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", @@ -2457,6 +5383,87 @@ ], "license": "MIT" }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/parse5": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", @@ -2470,6 +5477,33 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "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/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", @@ -2490,7 +5524,6 @@ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -2530,6 +5563,16 @@ "node": ">=18" } }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.5.12", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.12.tgz", @@ -2567,6 +5610,16 @@ "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/pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -2589,6 +5642,25 @@ "dev": true, "license": "MIT" }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -2751,6 +5823,50 @@ "redux": "^5.0.0" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -2767,6 +5883,40 @@ "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", "license": "MIT" }, + "node_modules/resolve": { + "version": "2.0.0-next.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz", + "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.2", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/rolldown": { "version": "1.0.0-rc.17", "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.17.tgz", @@ -2808,6 +5958,61 @@ "dev": true, "license": "MIT" }, + "node_modules/safe-array-concat": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -2827,12 +6032,173 @@ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, + "node_modules/semver": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/set-cookie-parser": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", "license": "MIT" }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", @@ -2879,6 +6245,118 @@ "dev": true, "license": "MIT" }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -2892,6 +6370,45 @@ "node": ">=8" } }, + "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/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -3026,6 +6543,19 @@ "node": ">=20" } }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "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", @@ -3034,12 +6564,104 @@ "license": "0BSD", "optional": true }, + "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/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typescript": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3048,6 +6670,49 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.60.0.tgz", + "integrity": "sha512-9f65qWLZdAW9m1JaxBDUHcqRUfL8bkxxXL7XxEfI+F09q56PkBvIfCjLF3yInsDM/BBmwkqmCQdCZe/RYlIWEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.60.0", + "@typescript-eslint/parser": "8.60.0", + "@typescript-eslint/typescript-estree": "8.60.0", + "@typescript-eslint/utils": "8.60.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 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/undici": { "version": "7.25.0", "resolved": "https://registry.npmjs.org/undici/-/undici-7.25.0.tgz", @@ -3096,6 +6761,16 @@ "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/use-sync-external-store": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", @@ -3360,6 +7035,111 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.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/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.21.tgz", + "integrity": "sha512-zbRA8cVm6io/d5W8uIe2hblzN76/Wm3v/yiythQvr+dpBWeqhPSWIDNj4zOyHi4zKbMK6DN34Xsr9jPHJERAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/why-is-node-running": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", @@ -3377,6 +7157,16 @@ "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/xml-name-validator": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", @@ -3393,6 +7183,50 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true, "license": "MIT" + }, + "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.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "dev": true, + "license": "MIT", + "peer": true, + "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 index 25dbd42..a86ac65 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -29,13 +29,19 @@ "@types/node": "^25.6.0", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", + "@typescript-eslint/eslint-plugin": "^8.60.0", + "@typescript-eslint/parser": "^8.60.0", "@vitejs/plugin-react": "^6.0.1", "@vitest/ui": "^4.1.5", "autoprefixer": "^10.5.0", + "eslint": "^9.39.4", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^7.1.1", "jsdom": "^29.1.0", "postcss": "^8.5.12", "tailwindcss": "^4.2.4", "typescript": "^6.0.3", + "typescript-eslint": "^8.60.0", "vite": "^8.0.10", "vitest": "^4.1.5" } diff --git a/frontend/src/App.js b/frontend/src/App.js deleted file mode 100644 index b800ab1..0000000 --- a/frontend/src/App.js +++ /dev/null @@ -1,10 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; -import TrackerPage from './components/tracker/TrackerPage'; -import StatsPage from './components/stats/StatsPage'; -import Navbar from './components/Navbar'; -import Playground from './components/Playground'; -function App() { - return (_jsx(Router, { children: _jsxs("div", { className: "min-h-screen bg-[#f8fafc] text-slate-900 font-sans antialiased", children: [_jsx(Navbar, {}), _jsx("main", { className: "container mx-auto px-4 sm:px-6 lg:px-8 mt-8", children: _jsxs(Routes, { children: [_jsx(Route, { path: "/", element: _jsx(TrackerPage, {}) }), _jsx(Route, { path: "/stats", element: _jsx(StatsPage, {}) }), _jsx(Route, { path: "/playground", element: _jsx(Playground, {}) })] }) })] }) })); -} -export default App; diff --git a/frontend/src/api/client.ts b/frontend/src/api/client.ts index 742eea1..b67e882 100644 --- a/frontend/src/api/client.ts +++ b/frontend/src/api/client.ts @@ -1,4 +1,12 @@ -import type { SleepSessionCreate, SleepSessionUpdate, SleepSessionRead, SessionListResponse } from '@/types'; +import type { + SleepSessionCreate, + SleepSessionUpdate, + SleepSessionRead, + SessionListResponse, + DailySummaryResponse, + TimetableResponse, + WakeupBedtimeResponse +} from '@/types'; const BASE_URL = import.meta.env.VITE_API_BASE_URL || ''; @@ -22,7 +30,7 @@ export function localToUTC(localValue: string): string { return new Date(localValue).toISOString(); } -async function fetchStats(endpoint: string, from_date: string, to_date: string, extraParams: Record = {}): Promise { +async function fetchStats(endpoint: string, from_date: string, to_date: string, extraParams: Record = {}): Promise { const fromDT = new Date(`${from_date}T00:00:00`).toISOString(); const toDT = new Date(`${to_date}T23:59:59`).toISOString(); const params = new URLSearchParams({ from_date: fromDT, to_date: toDT, ...extraParams }); @@ -31,15 +39,15 @@ async function fetchStats(endpoint: string, from_date: string, to_date: string, return response.json(); } -export async function fetchDailySummary(from_date: string, to_date: string, day_start: string, day_end: string): Promise { +export async function fetchDailySummary(from_date: string, to_date: string, day_start: string, day_end: string): Promise { return fetchStats('daily-summary', from_date, to_date, { day_start, day_end }); } -export async function fetchTimetable(from_date: string, to_date: string, day_start: string, day_end: string): Promise { +export async function fetchTimetable(from_date: string, to_date: string, day_start: string, day_end: string): Promise { return fetchStats('timetable', from_date, to_date, { day_start, day_end }); } -export async function fetchWakeSleepTimes(from_date: string, to_date: string, wakeup_ref: string, bedtime_ref: string): Promise { +export async function fetchWakeSleepTimes(from_date: string, to_date: string, wakeup_ref: string, bedtime_ref: string): Promise { return fetchStats('wake-sleep-times', from_date, to_date, { wakeup_ref: localHHMMToUTCHHMM(wakeup_ref), bedtime_ref: localHHMMToUTCHHMM(bedtime_ref) diff --git a/frontend/src/components/ErrorBoundary.js b/frontend/src/components/ErrorBoundary.js deleted file mode 100644 index 59afd53..0000000 --- a/frontend/src/components/ErrorBoundary.js +++ /dev/null @@ -1,20 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { Component } from 'react'; -export class ErrorBoundary extends Component { - constructor(props) { - super(props); - this.state = { hasError: false }; - } - static getDerivedStateFromError(error) { - return { hasError: true, error }; - } - componentDidCatch(error, errorInfo) { - console.error("ErrorBoundary caught an error", error, errorInfo.componentStack); - } - render() { - if (this.state.hasError) { - return (this.props.fallback || (_jsxs("div", { className: "bg-red-50 border border-red-200 rounded-lg p-4 text-center", children: [_jsx("p", { className: "text-red-600 font-medium", children: "Failed to load this component" }), _jsx("button", { onClick: () => this.setState({ hasError: false }), className: "mt-2 text-sm text-red-500 hover:underline", children: "Try again" })] }))); - } - return this.props.children; - } -} diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js deleted file mode 100644 index 5d7c652..0000000 --- a/frontend/src/components/Navbar.js +++ /dev/null @@ -1,9 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { Link, useLocation } from 'react-router-dom'; -const Navbar = () => { - const location = useLocation(); - // Helper to check if a path is active - const isActive = (path) => location.pathname === path; - return (_jsx("nav", { className: "bg-white/80 backdrop-blur-md sticky top-0 z-50 border-b border-gray-100", children: _jsx("div", { className: "max-w-md mx-auto px-4 flex justify-center items-center h-16", children: _jsxs("div", { className: "flex space-x-2 bg-gray-100 p-1 rounded-xl", children: [_jsx(Link, { to: "/", className: `px-6 py-2 rounded-lg text-sm font-bold transition-all duration-200 ${isActive('/') ? 'bg-white text-indigo-600 shadow-sm' : 'text-gray-500 hover:text-gray-700'}`, children: "Tracker" }), _jsx(Link, { to: "/stats", className: `px-6 py-2 rounded-lg text-sm font-bold transition-all duration-200 ${isActive('/stats') ? 'bg-white text-indigo-600 shadow-sm' : 'text-gray-500 hover:text-gray-700'}`, children: "Stats" })] }) }) })); -}; -export default Navbar; diff --git a/frontend/src/components/Playground.js b/frontend/src/components/Playground.js deleted file mode 100644 index 75f053f..0000000 --- a/frontend/src/components/Playground.js +++ /dev/null @@ -1,105 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import React, { useState, useEffect } from 'react'; -import { useQueryClient } from '@tanstack/react-query'; -// Component Imports -import StatusBanner from '../components/tracker/StatusBanner'; -import TimeAdjuster from '../components/tracker/TimeAdjuster'; -import SleepButton from '../components/tracker/SleepButton'; -import DailySummary from '../components/stats/DailySummary'; -import WakeupPlot from '../components/stats/WakeupPlot'; -import BedtimePlot from '../components/stats/BedtimePlot'; -import SleepTimetable from '../components/stats/SleepTimetable'; -import { SessionList } from '../components/stats/SessionList'; -import { IntervalPicker } from '../components/stats/IntervalPicker'; -import { SettingsPopover } from '../components/stats/SettingsPopover'; -// Mock Data Generators -const generateMockSessions = () => [ - { id: 1, start_time: '2024-05-20T22:00:00Z', end_time: '2024-05-21T06:00:00Z', notes: 'Good sleep', created_at: '2024-05-21T07:00:00Z', updated_at: '2024-05-21T07:00:00Z' }, - { id: 2, start_time: '2024-05-21T21:30:00Z', end_time: null, notes: null, created_at: '2024-05-21T21:30:00Z', updated_at: '2024-05-21T21:30:00Z' }, -]; -const generateMockStats = (days = 7) => { - const dailySummaryDays = Array.from({ length: days }).map((_, i) => ({ - date: new Date(Date.now() - i * 24 * 60 * 60 * 1000).toISOString().split('T')[0], - total_minutes: 480, - day_minutes: 240, - night_minutes: 240, - })); - const timetableSlots = Array.from({ length: 24 }).map((_, i) => ({ - date: new Date().toISOString().split('T')[0], - slot_start: `${i.toString().padStart(2, '0')}:00`, - slot_end: `${((i + 1) % 24).toString().padStart(2, '0')}:00`, - sleeping: i >= 22 || i <= 6, - })); - const wakeupBedtimeDays = Array.from({ length: days }).map((_, i) => ({ - date: new Date(Date.now() - i * 24 * 60 * 60 * 1000).toISOString().split('T')[0], - wakeup_minutes: 360, - bedtime_minutes: 1260, - })); - return { - dailySummary: { days: dailySummaryDays }, - timetable: { slots: timetableSlots }, - wakeupBedtime: { days: wakeupBedtimeDays }, - }; -}; -// Helper to inject data by prefixing keys since we don't know exact dynamic parameters (dates) -function setQueryDataByPrefix(queryClient, prefix, data) { - const queries = queryClient.getQueryCache().getAll(); - let found = false; - for (const query of queries) { - const match = prefix.every((p, i) => query.queryKey[i] === p); - if (match) { - queryClient.setQueryData(query.queryKey, data); - found = true; - } - } - return found; -} -// We will attempt to populate common keys used by the hooks. -function injectAllMocks(queryClient) { - const { dailySummary, timetable, wakeupBedtime } = generateMockStats(); - // Session mocks - queryClient.setQueryData(['activeSession'], null); - queryClient.setQueryData(['sessions'], { sessions: generateMockSessions(), total: 2 }); - // Stats mocks - iterate and try to find matches for common prefixes - const queries = queryClient.getQueryCache().getAll(); - for (const query of queries) { - const key = query.queryKey; - if (key[0] === 'dailySummary') { - queryClient.setQueryData(key, dailySummary); - } - else if (key[0] === 'timetable') { - queryClient.setQueryData(key, timetable); - } - else if (key[0] === 'wakeSleepTimes') { - queryClient.setQueryData(key, wakeupBedtime); - } - } - // If no queries exist yet (because hooks haven't run), we can't match. - // But once a component renders, the query is created and our next render/effect - // can catch it. For this playground, we'll just try to set common ones. -} -const COMPONENT_REGISTRY = [ - { name: 'StatusBanner', component: StatusBanner }, - { name: 'TimeAdjuster', component: TimeAdjuster }, - { name: 'SleepButton', component: SleepButton }, - { name: 'DailySummary', component: DailySummary }, - { name: 'WakeupPlot', component: WakeupPlot }, - { name: 'BedtimePlot', component: BedtimePlot }, - { name: 'SleepTimetable', component: SleepTimetable }, - { name: 'SessionList', component: SessionList }, - { name: 'IntervalPicker', component: IntervalPicker }, - { name: 'SettingsPopover', component: SettingsPopover }, -]; -export default function Playground() { - const [selectedIndex, setSelectedIndex] = useState(-1); - const queryClient = useQueryClient(); - const selectedComponent = selectedIndex >= 0 ? COMPONENT_REGISTRY[selectedIndex] : null; - useEffect(() => { - if (selectedComponent) { - // In a real playground, we might want to clear old data first, - // but for mocks we just want to ensure the right ones exist. - injectAllMocks(queryClient); - } - }, [selectedIndex, queryClient]); - return (_jsxs("div", { className: "p-6 space-y-8", children: [_jsxs("header", { className: "flex flex-col gap-4 border-b pb-6", children: [_jsx("h2", { className: "text-3xl font-bold text-slate-900", children: "Component Playground" }), _jsx("p", { className: "text-slate-500", children: "Select a component to render it in isolation with mock data." }), _jsxs("div", { className: "flex items-center gap-4", children: [_jsx("label", { htmlFor: "component-select", className: "font-medium text-slate-700", children: "Component:" }), _jsxs("select", { id: "component-select", name: "component-select", className: "block w-full max-w-xs rounded-md border-slate-300 py-2 pl-3 pr-10 text-base focus:border-indigo-500 focus:outline-none focus:ring-indigo-500 sm:text-sm", value: selectedIndex, onChange: (e) => setSelectedIndex(parseInt(e.target.value)), children: [_jsx("option", { value: "-1", children: "-- Select a Component --" }), COMPONENT_REGISTRY.map((comp, idx) => (_jsx("option", { value: idx, children: comp.name }, comp.name)))] })] })] }), _jsx("main", { className: "min-h-[400px] flex items-center justify-center border-2 border-dashed border-slate-200 rounded-xl bg-white p-8", children: selectedComponent ? (_jsx("div", { className: "w-full h-full flex justify-center", children: React.createElement(selectedComponent.component, selectedComponent.props || {}) })) : (_jsx("div", { className: "text-center text-slate-400", children: _jsx("p", { children: "No component selected" }) })) }), selectedComponent && (_jsxs("footer", { className: "text-sm text-slate-400 italic", children: ["Rendering: ", selectedComponent.name] }))] })); -} diff --git a/frontend/src/components/Playground.tsx b/frontend/src/components/Playground.tsx index 9cd4341..06f70bc 100644 --- a/frontend/src/components/Playground.tsx +++ b/frontend/src/components/Playground.tsx @@ -1,5 +1,6 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import React, { useState, useEffect } from 'react'; -import { useQueryClient } from '@tanstack/react-query'; +import { useQueryClient, type QueryClient } from '@tanstack/react-query'; import type { ComponentType } from 'react'; // Types @@ -69,29 +70,12 @@ const generateMockStats = (days = 7): { }; }; -// Helper to inject data by prefixing keys since we don't know exact dynamic parameters (dates) -function setQueryDataByPrefix(queryClient: any, prefix: string[], data: any) { - const queries = queryClient.getQueryCache().getAll(); - let found = false; - for (const query of queries) { - const match = prefix.every((p, i) => query.queryKey[i] === p); - if (match) { - queryClient.setQueryData(query.queryKey, data); - found = true; - } - } - return found; -} - -// We will attempt to populate common keys used by the hooks. -function injectAllMocks(queryClient: any) { +function injectAllMocks(queryClient: QueryClient) { const { dailySummary, timetable, wakeupBedtime } = generateMockStats(); - // Session mocks queryClient.setQueryData(['activeSession'], null); queryClient.setQueryData(['sessions'], { sessions: generateMockSessions(), total: 2 }); - // Stats mocks - iterate and try to find matches for common prefixes const queries = queryClient.getQueryCache().getAll(); for (const query of queries) { const key = query.queryKey; @@ -107,13 +91,11 @@ function injectAllMocks(queryClient: any) { } } - // Also proactively set some common keys to ensure they are available for initial renders queryClient.setQueryData(['dailySummary', '2024-01-01', '2024-01-07'], dailySummary); queryClient.setQueryData(['timetable', '2024-01-01', '2024-01-07'], timetable); queryClient.setQueryData(['wakeSleepTimes', '2024-01-01', '2024-01-07'], wakeupBedtime); } -// Registry Definition interface PlaygroundComponent { name: string; component: ComponentType; @@ -122,18 +104,15 @@ interface PlaygroundComponent { const COMPONENT_REGISTRY: PlaygroundComponent[] = [ { name: 'StatusBanner', component: StatusBanner }, - { name: 'TimeAdjuster', component: TimeAdjuster, props: { onTimeChange: (t: any) => {}, defaultValue: new Date().toISOString() } }, - { name: 'SleepButton', component: SleepButton, props: { time: new Date().toISOString() } }, - { name: 'TrackerPage', component: TrackerPage, props: {} }, - { name: 'DailySummary', component: DailySummary, props: { from_date: '2024-01-01', to_date: '2024-01-07', day_start: '06:00', day_end: '21:00' } }, - { name: 'WakeupPlot', component: WakeupPlot, props: { from_date: '2024-01-01', to_date: '2024-01-07', wakeup_ref: '07:00', bedtime_ref: '20:00' } }, - { name: 'BedtimePlot', component: BedtimePlot, props: { from_date: '2024-01-01', to_date: '2024-01-07', wakeup_ref: '07:00', bedtime_ref: '20:00' } }, - { name: 'SleepTimetable', component: SleepTimetable, props: { from_date: '2024-01-01', to_date: '2024-01-07', day_start: '06:00', day_end: '21:00' } }, - { name: 'SessionList', component: SessionList, props: {} }, - { name: 'IntervalPicker', component: IntervalPicker, props: { value: 7, onChange: () => {} } }, - { name: 'SettingsPopover', component: SettingsPopover, props: { dayStart: '06:00', dayEnd: '21:00', wakeupRef: '07:00', bedtimeRef: '20:00', onSave: () => {} } }, - { name: 'Navbar', component: Navbar, props: {} }, - { name: 'ErrorBoundary', component: ErrorBoundary, props: {} }, + { name: 'TimeAdjuster', component: TimeAdjuster, props: { onTimeChange: () => {}, defaultValue: new Date().toISOString() } }, + { name: 'SleepButton', component: SleepButton, props: { time: new Date().toISOString() } }, + { name: 'DailySummary', component: DailySummary, props: { from_date: '2024-01-01', to_date: '2024-01-07', day_start: '06:00', day_end: '21:00' } }, + { name: 'WakeupPlot', component: WakeupPlot, props: { from_date: '2024-01-01', to_date: '2024-01-07', wakeup_ref: '07:00', bedtime_ref: '20:00' } }, + { name: 'BedtimePlot', component: BedtimePlot, props: { from_date: '2024-01-01', to_date: '2024-01-07', wakeup_ref: '07:00', bedtime_ref: '20:00' } }, + { name: 'SleepTimetable', component: SleepTimetable, props: { from_date: '2024-01-01', to_date: '2024-01-07', day_start: '06:00', day_end: '21:00' } }, + { name: 'SessionList', component: SessionList, props: {} }, + { name: 'IntervalPicker', component: IntervalPicker, props: { value: 7, onChange: () => {} } }, + { name: 'SettingsPopover', component: SettingsPopover, props: { dayStart: '06:00', dayEnd: '21:00', wakeupRef: '07:00', bedtimeRef: '20:00', onSave: () => {} } }, ]; export default function Playground() { @@ -144,11 +123,9 @@ export default function Playground() { useEffect(() => { if (selectedComponent) { - // In a real playground, we might want to clear old data first, - // but for mocks we just want to ensure the right ones exist. injectAllMocks(queryClient); } - }, [selectedIndex, queryClient]); + }, [selectedIndex, queryClient, selectedComponent]); return (
@@ -174,26 +151,26 @@ export default function Playground() { ))} -
+ -
- {selectedComponent ? ( -
- {React.createElement(selectedComponent.component, { ...selectedComponent.props })} -
- ) : ( -
-

No component selected

-
- )} -
- - {selectedComponent && ( -
- Rendering: {selectedComponent.name} -
+
+ {selectedComponent ? ( +
+ {React.createElement(selectedComponent.component, { ...selectedComponent.props })} +
+ ) : ( +
+

No component selected

+
)} - +
+ + {selectedComponent && ( +
+ Rendering: {selectedComponent.name} +
+ )} + ); -} +} \ No newline at end of file diff --git a/frontend/src/components/stats/BedtimePlot.js b/frontend/src/components/stats/BedtimePlot.js deleted file mode 100644 index 4e7e758..0000000 --- a/frontend/src/components/stats/BedtimePlot.js +++ /dev/null @@ -1,37 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useEffect, useState } from 'react'; -import { useStats } from '../../hooks/useStats'; -import { formatMinutesAfter, getToday, getLocalOffsetFromReference } from '../../utils/time'; -import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, } from 'recharts'; -const BedtimePlot = ({ from_date, to_date, wakeup_ref, bedtime_ref }) => { - const { wakeupBedtime, isLoading } = useStats(from_date, to_date, '07:00', '20:00', wakeup_ref, bedtime_ref); - const [chartData, setChartData] = useState([]); - useEffect(() => { - if (!wakeupBedtime?.days) { - setChartData([]); - return; - } - const data = wakeupBedtime.days.map((day) => { - const daysAgo = Math.floor((new Date(getToday()).getTime() - new Date(day.date).getTime()) / (1000 * 60 * 60 * 24)); - const offsetFromRef = day.bedtime_minutes !== null ? getLocalOffsetFromReference(day.bedtime_minutes, bedtime_ref) : 0; - return { - date: daysAgo === 0 ? 'Today' : `${daysAgo}d ago`, - minutes: offsetFromRef, - time: day.bedtime_minutes !== null - ? formatMinutesAfter(offsetFromRef, bedtime_ref) - : 'N/A', - }; - }).reverse(); - setChartData(data); - }, [wakeupBedtime, bedtime_ref]); - if (isLoading) - return _jsx("div", { className: "text-center p-4", children: "Loading plot..." }); - if (!chartData.length) { - return _jsx("div", { className: "text-center p-4 text-gray-500", children: "No data available for this period." }); - } - return (_jsxs("div", { className: "bg-white p-4 rounded-xl shadow-sm border border-gray-200", children: [_jsx("h3", { className: "text-lg font-semibold mb-4 text-gray-800", children: "Bedtime" }), _jsx(ResponsiveContainer, { width: "100%", height: 200, children: _jsxs(LineChart, { data: chartData, margin: { top: 5, right: 20, left: 0, bottom: 5 }, children: [_jsx(CartesianGrid, { strokeDasharray: "3 3", stroke: "#e5e7eb" }), _jsx(XAxis, { dataKey: "date", tick: { fontSize: 12 }, tickLine: false, axisLine: { stroke: '#e5e7eb' } }), _jsx(YAxis, { tick: { fontSize: 12 }, tickLine: false, axisLine: { stroke: '#e5e7eb' }, tickFormatter: (value) => formatMinutesAfter(value, bedtime_ref), domain: ['dataMin - 30', 'dataMax + 30'] }), _jsx(Tooltip, { formatter: (value) => [ - value !== undefined ? formatMinutesAfter(value, bedtime_ref) : '', - 'Bedtime', - ], labelFormatter: (label) => label }), _jsx(Line, { type: "monotone", dataKey: "minutes", stroke: "#8b5cf6", strokeWidth: 2, dot: { fill: '#8b5cf6', r: 4 }, connectNulls: false })] }) })] })); -}; -export default BedtimePlot; diff --git a/frontend/src/components/stats/BedtimePlot.tsx b/frontend/src/components/stats/BedtimePlot.tsx index 09f1ac8..eb280c0 100644 --- a/frontend/src/components/stats/BedtimePlot.tsx +++ b/frontend/src/components/stats/BedtimePlot.tsx @@ -1,6 +1,6 @@ -import { useEffect, useState } from 'react'; +import { useMemo } from 'react'; import { useStats } from '../../hooks/useStats'; -import { formatMinutesAfter, getToday, getLocalOffsetFromReference } from '../../utils/time'; +import { formatMinutesAfter, getToday } from '../../utils/time'; import { LineChart, Line, @@ -20,30 +20,24 @@ interface WakeupBedtimeProps { const BedtimePlot: React.FC = ({ from_date, to_date, wakeup_ref = '07:00', bedtime_ref = '20:00' }) => { const { wakeupBedtime, isLoading } = useStats(from_date, to_date, '07:00', '20:00', wakeup_ref, bedtime_ref); - const [chartData, setChartData] = useState<{ date: string; minutes: number; time: string }[]>([]); - useEffect(() => { - if (!wakeupBedtime?.days) { - setChartData([]); - return; - } + const chartData = useMemo(() => { + if (!wakeupBedtime?.days) return []; - const data = wakeupBedtime.days.map((day) => { - const daysAgo = Math.floor( - (new Date(getToday()).getTime() - new Date(day.date).getTime()) / (1000 * 60 * 60 * 24) - ); - const offsetFromRef = day.bedtime_minutes ?? 0; - return { - date: daysAgo === 0 ? 'Today' : `${daysAgo}d ago`, - minutes: offsetFromRef, - time: - day.bedtime_minutes !== null - ? formatMinutesAfter(offsetFromRef, bedtime_ref) - : 'N/A', - }; - }).reverse(); - - setChartData(data); + return wakeupBedtime.days.map((day) => { + const daysAgo = Math.floor( + (new Date(getToday()).getTime() - new Date(day.date).getTime()) / (1000 * 60 * 60 * 24) + ); + const offsetFromRef = day.bedtime_minutes ?? 0; + return { + date: daysAgo === 0 ? 'Today' : `${daysAgo}d ago`, + minutes: offsetFromRef, + time: + day.bedtime_minutes !== null + ? formatMinutesAfter(offsetFromRef, bedtime_ref) + : 'N/A', + }; + }).reverse(); }, [wakeupBedtime, bedtime_ref]); if (isLoading) return
Loading plot...
; @@ -71,10 +65,10 @@ const BedtimePlot: React.FC = ({ from_date, to_date, wakeup_ domain={['dataMin - 30', 'dataMax + 30']} /> [ - value !== undefined ? formatMinutesAfter(value, bedtime_ref) : '', + formatter={(value: number) => [ + formatMinutesAfter(value, bedtime_ref), 'Bedtime', - ] as any} + ]} labelFormatter={(label) => label} /> = ({ from_date, to_date, wakeup_ ); }; -export default BedtimePlot; \ No newline at end of file +export default BedtimePlot; diff --git a/frontend/src/components/stats/DailySummary.js b/frontend/src/components/stats/DailySummary.js deleted file mode 100644 index ee808ab..0000000 --- a/frontend/src/components/stats/DailySummary.js +++ /dev/null @@ -1,48 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useEffect, useState } from 'react'; -import { useStats } from '../../hooks/useStats'; -import { formatMinutes } from '../../utils/time'; -import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, } from 'recharts'; -const DailySummary = ({ from_date, to_date, day_start, day_end }) => { - const { dailySummary, isLoading } = useStats(from_date, to_date, day_start, day_end); - const [chartData, setChartData] = useState([]); - const [avgStats, setAvgStats] = useState({ avgTotal: 0, avgDay: 0, avgNight: 0, count: 0 }); - useEffect(() => { - if (!dailySummary?.days) { - setChartData([]); - setAvgStats({ avgTotal: 0, avgDay: 0, avgNight: 0, count: 0 }); - return; - } - const data = dailySummary.days.map((day) => ({ - date: day.date, - daySleep: day.day_minutes / 60, - nightSleep: day.night_minutes / 60, - total: day.total_minutes / 60, - })); - setChartData(data.reverse()); - if (data.length) { - const totals = data.reduce((acc, d) => ({ - total: acc.total + d.total, - day: acc.day + d.daySleep, - night: acc.night + d.nightSleep, - }), { total: 0, day: 0, night: 0 }); - const count = data.length; - setAvgStats({ - avgTotal: totals.total / count, - avgDay: totals.day / count, - avgNight: totals.night / count, - count, - }); - } - }, [dailySummary]); - if (isLoading) - return _jsx("div", { className: "text-center p-4", children: "Loading summary..." }); - if (!chartData.length) { - return _jsx("div", { className: "text-center p-4 text-gray-500", children: "No data available for this period." }); - } - return (_jsxs("div", { className: "bg-white p-4 rounded-xl shadow-sm border border-gray-200", children: [_jsx("h3", { className: "text-lg font-semibold mb-4 text-gray-800", children: "Daily Summary" }), _jsx(ResponsiveContainer, { width: "100%", height: Math.max(200, chartData.length * 30), children: _jsxs(BarChart, { data: chartData, layout: "vertical", margin: { top: 5, right: 30, left: 60, bottom: 5 }, children: [_jsx(CartesianGrid, { strokeDasharray: "3 3", stroke: "#e5e7eb" }), _jsx(XAxis, { type: "number", tickFormatter: (value) => `${Math.round(value)}h`, tick: { fontSize: 12 }, tickLine: false }), _jsx(YAxis, { type: "category", dataKey: "date", tick: { fontSize: 12 }, tickLine: false, width: 60 }), _jsx(Tooltip, { formatter: (value, name) => [ - formatMinutes(Math.round((value ?? 0) * 60)), - name === 'daySleep' ? 'Day' : 'Night', - ] }), _jsx(Bar, { dataKey: "nightSleep", stackId: "a", fill: "#1e3a5f" }), _jsx(Bar, { dataKey: "daySleep", stackId: "a", fill: "#fbbf24" })] }) }), _jsxs("div", { className: "mt-4 grid grid-cols-3 gap-4 text-center", children: [_jsxs("div", { className: "p-3 bg-gray-50 rounded-lg", children: [_jsx("div", { className: "text-xs text-gray-500", children: "Avg Total" }), _jsx("div", { className: "text-lg font-semibold text-gray-800", children: formatMinutes(Math.round(avgStats.avgTotal * 60)) })] }), _jsxs("div", { className: "p-3 bg-gray-50 rounded-lg", children: [_jsx("div", { className: "text-xs text-gray-500", children: "Avg Day" }), _jsx("div", { className: "text-lg font-semibold text-gray-800", children: formatMinutes(Math.round(avgStats.avgDay * 60)) })] }), _jsxs("div", { className: "p-3 bg-gray-50 rounded-lg", children: [_jsx("div", { className: "text-xs text-gray-500", children: "Avg Night" }), _jsx("div", { className: "text-lg font-semibold text-gray-800", children: formatMinutes(Math.round(avgStats.avgNight * 60)) })] })] })] })); -}; -export default DailySummary; diff --git a/frontend/src/components/stats/DailySummary.tsx b/frontend/src/components/stats/DailySummary.tsx index 40ef95c..eba6209 100644 --- a/frontend/src/components/stats/DailySummary.tsx +++ b/frontend/src/components/stats/DailySummary.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import { useMemo } from 'react'; import { useStats } from '../../hooks/useStats'; import { formatMinutes } from '../../utils/time'; import { @@ -9,9 +9,9 @@ import { CartesianGrid, Tooltip, ResponsiveContainer, - Cell, } from 'recharts'; + interface DailySummaryProps { from_date: string; to_date: string; @@ -26,16 +26,19 @@ interface ChartDataItem { total: number; } +interface AvgStats { + avgTotal: number; + avgDay: number; + avgNight: number; + count: number; +} + const DailySummary: React.FC = ({ from_date, to_date, day_start, day_end }) => { const { dailySummary, isLoading } = useStats(from_date, to_date, day_start, day_end); - const [chartData, setChartData] = useState([]); - const [avgStats, setAvgStats] = useState({ avgTotal: 0, avgDay: 0, avgNight: 0, count: 0 }); - useEffect(() => { + const { chartData, avgStats } = useMemo<{ chartData: ChartDataItem[]; avgStats: AvgStats }>(() => { if (!dailySummary?.days) { - setChartData([]); - setAvgStats({ avgTotal: 0, avgDay: 0, avgNight: 0, count: 0 }); - return; + return { chartData: [] as ChartDataItem[], avgStats: { avgTotal: 0, avgDay: 0, avgNight: 0, count: 0 } }; } const data = dailySummary.days.map((day) => ({ @@ -43,9 +46,9 @@ const DailySummary: React.FC = ({ from_date, to_date, day_sta daySleep: day.day_minutes / 60, nightSleep: day.night_minutes / 60, total: day.total_minutes / 60, - })); + })).reverse(); - setChartData(data.reverse()); + let averages = { avgTotal: 0, avgDay: 0, avgNight: 0, count: 0 }; if (data.length) { const totals = data.reduce( @@ -57,13 +60,15 @@ const DailySummary: React.FC = ({ from_date, to_date, day_sta { total: 0, day: 0, night: 0 } ); const count = data.length; - setAvgStats({ + averages = { avgTotal: totals.total / count, avgDay: totals.day / count, avgNight: totals.night / count, count, - }); + }; } + + return { chartData: data, avgStats: averages }; }, [dailySummary]); if (isLoading) return
Loading summary...
; @@ -95,10 +100,10 @@ const DailySummary: React.FC = ({ from_date, to_date, day_sta width={60} /> [ + formatter={(value: number, name: string) => [ formatMinutes(Math.round((value ?? 0) * 60)), name === 'daySleep' ? 'Day' : 'Night', - ] as any} + ]} /> diff --git a/frontend/src/components/stats/IntervalPicker.js b/frontend/src/components/stats/IntervalPicker.js deleted file mode 100644 index dbfdd07..0000000 --- a/frontend/src/components/stats/IntervalPicker.js +++ /dev/null @@ -1,7 +0,0 @@ -import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime"; -const INTERVALS = [7, 14, 30, 90]; -export function IntervalPicker({ value, onChange }) { - return (_jsx("div", { className: "flex justify-center space-x-1 bg-gray-100 p-1 rounded-lg", children: INTERVALS.map((days) => (_jsxs("button", { onClick: () => onChange(days), className: `px-4 py-2 rounded-md text-sm font-medium transition-all ${value === days - ? 'bg-white text-blue-600 shadow-sm' - : 'text-gray-600 hover:text-gray-900'}`, children: [days, "d"] }, days))) })); -} diff --git a/frontend/src/components/stats/SessionList.js b/frontend/src/components/stats/SessionList.js deleted file mode 100644 index 3db577a..0000000 --- a/frontend/src/components/stats/SessionList.js +++ /dev/null @@ -1,61 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useState } from 'react'; -import { useSessions } from '../../hooks/useSleepSession'; -import { Edit2, Check, X } from 'lucide-react'; -function formatDateTime(isoString) { - const iso = isoString.endsWith('Z') ? isoString : isoString + 'Z'; - const d = new Date(iso); - return d.toLocaleString('sv-SE', { - year: 'numeric', - month: '2-digit', - day: '2-digit', - hour: '2-digit', - minute: '2-digit', - hour12: false - }).replace(',', ' '); -} -function toDatetimeLocal(isoString) { - const iso = isoString.endsWith('Z') ? isoString : isoString + 'Z'; - const d = new Date(iso); - const pad = (n) => n.toString().padStart(2, '0'); - return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}`; -} -export function SessionList() { - const { sessions, isLoading, updateSession } = useSessions(); - const [editingId, setEditingId] = useState(null); - const [editStart, setEditStart] = useState(''); - const [editEnd, setEditEnd] = useState(''); - if (isLoading) - return _jsx("div", { className: "text-center p-4", children: "Loading sessions..." }); - if (!sessions.length) - return _jsx("div", { className: "text-center p-4 text-gray-500", children: "No sessions recorded." }); - const handleSave = async (id) => { - try { - await updateSession({ - sessionId: id, - payload: { - start_time: new Date(editStart).toISOString(), - end_time: editEnd ? new Date(editEnd).toISOString() : null, - } - }); - setEditingId(null); - } - catch (err) { - console.error(err); - alert('Failed to update session'); - } - }; - const startEditing = (s) => { - setEditingId(s.id); - setEditStart(toDatetimeLocal(s.start_time)); - setEditEnd(s.end_time ? toDatetimeLocal(s.end_time) : ''); - }; - const handleCancel = () => { - setEditingId(null); - }; - return (_jsxs("div", { className: "bg-white p-4 rounded-xl shadow-sm border border-gray-200", children: [_jsx("h3", { className: "text-lg font-semibold mb-4 text-gray-800", children: "Sleep Sessions" }), _jsx("div", { className: "space-y-2", children: sessions.map((s) => (_jsx("div", { className: "border-b border-gray-100 last:border-0 pb-2", children: editingId === s.id ? (_jsxs("div", { className: "flex flex-col space-y-2 py-1", children: [_jsxs("div", { className: "grid grid-cols-1 gap-2 text-xs text-gray-500", children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { children: "Start Time" }), _jsx("input", { type: "datetime-local", className: "border rounded px-1 py-0.5 text-sm text-black w-full", value: editStart, onChange: (e) => setEditStart(e.target.value) })] }), _jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { children: "End Time" }), _jsx("input", { type: "datetime-local", className: "border rounded px-1 py-0.5 text-sm text-black w-full", value: editEnd, onChange: (e) => setEditEnd(e.target.value) })] })] }), _jsxs("div", { className: "flex justify-end space-x-2", children: [_jsx("button", { onClick: handleCancel, className: "p-1 text-gray-500 hover:text-gray-700 transition-colors", title: "Cancel", children: _jsx(X, { size: 18 }) }), _jsx("button", { onClick: () => handleSave(s.id), className: "p-1 text-green-600 hover:text-green-700 transition-colors", title: "Save", children: _jsx(Check, { size: 18 }) })] })] })) : (_jsxs("div", { className: "flex justify-between items-center text-sm cursor-pointer hover:bg-gray-50 p-1 rounded transition-colors", onClick: () => startEditing(s), children: [_jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-gray-900 font-medium", children: formatDateTime(s.start_time) }), _jsx("span", { className: "text-gray-500 text-xs", children: s.end_time - ? `${formatDateTime(s.start_time)} → ${formatDateTime(s.end_time)}` - : 'In progress' })] }), _jsxs("div", { className: "flex items-center space-x-2", children: [_jsx("span", { className: "text-blue-600 font-mono text-sm", children: s.end_time && s.start_time - ? `${Math.round((new Date(s.end_time + 'Z').getTime() - new Date(s.start_time + 'Z').getTime()) / 60000)} min` - : '—' }), _jsx(Edit2, { size: 14, className: "text-gray-400" })] })] })) }, s.id))) })] })); -} diff --git a/frontend/src/components/stats/SessionList.tsx b/frontend/src/components/stats/SessionList.tsx index 3e8b3e4..cd88378 100644 --- a/frontend/src/components/stats/SessionList.tsx +++ b/frontend/src/components/stats/SessionList.tsx @@ -21,7 +21,7 @@ export function SessionList() { start_time: new Date(editStart).toISOString(), end_time: editEnd ? new Date(editEnd).toISOString() : null, } - } as any); + }); setEditingId(null); } catch (err) { console.error(err); diff --git a/frontend/src/components/stats/SettingsPopover.js b/frontend/src/components/stats/SettingsPopover.js deleted file mode 100644 index 7826243..0000000 --- a/frontend/src/components/stats/SettingsPopover.js +++ /dev/null @@ -1,37 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useState, useRef, useEffect } from 'react'; -export function SettingsPopover({ dayStart, dayEnd, wakeupRef, bedtimeRef, onSave }) { - const [isOpen, setIsOpen] = useState(false); - const [localDayStart, setLocalDayStart] = useState(dayStart); - const [localDayEnd, setLocalDayEnd] = useState(dayEnd); - const [localWakeupRef, setLocalWakeupRef] = useState(wakeupRef); - const [localBedtimeRef, setLocalBedtimeRef] = useState(bedtimeRef); - const popoverRef = useRef(null); - useEffect(() => { - setLocalDayStart(dayStart); - setLocalDayEnd(dayEnd); - setLocalWakeupRef(wakeupRef); - setLocalBedtimeRef(bedtimeRef); - }, [dayStart, dayEnd, wakeupRef, bedtimeRef]); - useEffect(() => { - const handleClickOutside = (e) => { - if (popoverRef.current && !popoverRef.current.contains(e.target)) { - setIsOpen(false); - } - }; - if (isOpen) { - document.addEventListener('mousedown', handleClickOutside); - } - return () => document.removeEventListener('mousedown', handleClickOutside); - }, [isOpen]); - const handleSave = () => { - onSave({ - dayStart: localDayStart, - dayEnd: localDayEnd, - wakeupRef: localWakeupRef, - bedtimeRef: localBedtimeRef, - }); - setIsOpen(false); - }; - return (_jsxs("div", { className: "relative", ref: popoverRef, children: [_jsx("button", { onClick: () => setIsOpen(!isOpen), className: "p-2 text-gray-500 hover:text-gray-700", "aria-label": "Settings", children: _jsxs("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: [_jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" })] }) }), isOpen && (_jsxs("div", { className: "absolute right-0 top-full mt-2 w-64 bg-white rounded-xl shadow-lg border border-gray-200 p-4 z-50", children: [_jsx("h4", { className: "font-semibold text-gray-800 mb-4", children: "Settings" }), _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "day-start", className: "block text-xs text-gray-500 mb-1", children: "Day starts (HH:MM)" }), _jsx("input", { id: "day-start", type: "time", value: localDayStart, onChange: (e) => setLocalDayStart(e.target.value), className: "w-full p-2 border rounded-md text-sm" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "day-end", className: "block text-xs text-gray-500 mb-1", children: "Day ends (HH:MM)" }), _jsx("input", { id: "day-end", type: "time", value: localDayEnd, onChange: (e) => setLocalDayEnd(e.target.value), className: "w-full p-2 border rounded-md text-sm" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "wakeup-ref", className: "block text-xs text-gray-500 mb-1", children: "Wakeup ref (HH:MM)" }), _jsx("input", { id: "wakeup-ref", type: "time", value: localWakeupRef, onChange: (e) => setLocalWakeupRef(e.target.value), className: "w-full p-2 border rounded-md text-sm" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "bedtime-ref", className: "block text-xs text-gray-500 mb-1", children: "Bedtime ref (HH:MM)" }), _jsx("input", { id: "bedtime-ref", type: "time", value: localBedtimeRef, onChange: (e) => setLocalBedtimeRef(e.target.value), className: "w-full p-2 border rounded-md text-sm" })] })] }), _jsx("button", { onClick: handleSave, className: "w-full mt-4 py-2 bg-blue-600 text-white rounded-md text-sm font-medium hover:bg-blue-700", children: "Save" })] }))] })); -} diff --git a/frontend/src/components/stats/SettingsPopover.tsx b/frontend/src/components/stats/SettingsPopover.tsx index 6dc32aa..005a302 100644 --- a/frontend/src/components/stats/SettingsPopover.tsx +++ b/frontend/src/components/stats/SettingsPopover.tsx @@ -1,3 +1,4 @@ +/* eslint-disable react-hooks/set-state-in-effect */ import React, { useState, useRef, useEffect } from 'react'; interface SettingsPopoverProps { diff --git a/frontend/src/components/stats/SleepTimetable.js b/frontend/src/components/stats/SleepTimetable.js deleted file mode 100644 index e0aa147..0000000 --- a/frontend/src/components/stats/SleepTimetable.js +++ /dev/null @@ -1,63 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import React, { useMemo } from 'react'; -import { useStats } from '../../hooks/useStats'; -import { timeToMinutes } from '../../utils/time'; -const Timetable = ({ from_date, to_date, day_start, day_end }) => { - const { timetable, isLoading } = useStats(from_date, to_date, day_start, day_end); - const days = useMemo(() => { - const start = new Date(from_date + 'T00:00:00'); - const end = new Date(to_date + 'T23:59:59'); - const result = []; - let current = new Date(start); - while (current <= end) { - result.push(current.toLocaleDateString('en-CA')); - current.setDate(current.getDate() + 1); - } - return result; - }, [from_date, to_date]); - const timeSteps = useMemo(() => { - return Array.from({ length: 24 }, (_, i) => i * 60); - }, []); - if (isLoading) - return _jsx("div", { className: "text-center p-4", children: "Loading timetable..." }); - if (!timetable?.slots || timetable.slots.length === 0) { - return _jsx("div", { className: "text-center p-4 text-gray-500", children: "No data available for this period." }); - } - const getDayName = (dateStr) => { - return new Date(dateStr).toLocaleDateString('en-US', { weekday: 'short' }); - }; - const formatTimeLabel = (mins) => { - const hours = Math.floor(mins / 60); - const minutes = mins % 60; - return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`; - }; - const isSleepingInInterval = (date, intervalStart, intervalEnd) => { - return timetable.slots.some((slot) => { - if (slot.date !== date || !slot.sleeping) - return false; - let sStart = timeToMinutes(slot.slot_start); - let sEnd = timeToMinutes(slot.slot_end); - if (sEnd <= sStart) { - // Handle wrap-around within a single slot if it happens (though unlikely for 15m segments) - const overlap1 = Math.max(sStart, intervalStart) < Math.min(1440, intervalEnd); - const overlap2 = Math.max(0, intervalStart) < Math.min(sEnd, intervalEnd); - return overlap1 || overlap2; - } - return Math.max(sStart, intervalStart) < Math.min(sEnd, intervalEnd); - }); - }; - const currentMins = new Date().getHours() * 60 + new Date().getMinutes(); - const rowHeightPx = 32; // h-8 is 2rem, which is 32px in standard Tailwind config - return (_jsxs("div", { className: "bg-white p-4 rounded-xl shadow-sm border border-gray-200 overflow-x-auto", children: [_jsx("h3", { className: "text-lg font-semibold mb-4 text-gray-800", children: "Sleep Timetable" }), _jsxs("div", { className: "min-w-[600px] flex flex-col gap-px", children: [_jsxs("div", { className: "grid", style: { - gridTemplateColumns: `4rem repeat(${days.length}, minmax(40px, 1fr))` - }, children: [_jsx("div", { className: "h-8" }), " ", days.map((day) => (_jsx("div", { className: "text-center text-[10px] font-medium text-gray-500 uppercase flex items-center justify-center h-8", children: getDayName(day) }, day)))] }), _jsx("div", { className: "relative", children: _jsxs("div", { className: "grid", style: { - gridTemplateColumns: `4rem repeat(${days.length}, minmax(40px, 1fr))` - }, children: [timeSteps.map((step) => (_jsxs(React.Fragment, { children: [_jsx("div", { className: "text-[10px] text-gray-400 flex items-center justify-end pr-2 h-8", children: step % 60 === 0 ? formatTimeLabel(step) : '' }), days.map((day) => { - const sleeping = isSleepingInInterval(day, step, step + 60); - return (_jsx("div", { className: `h-8 w-full ${sleeping ? 'bg-green-500' : 'bg-gray-50'}` }, `${day}-${step}`)); - })] }, step))), _jsx("div", { className: "absolute left-[4rem] right-0 h-0.5 bg-red-500 pointer-events-none z-10", style: { - top: `${(currentMins / 1440) * (24 * rowHeightPx)}px`, - transform: 'translateY(-50%)' - } })] }) })] })] })); -}; -export default Timetable; diff --git a/frontend/src/components/stats/SleepTimetable.tsx b/frontend/src/components/stats/SleepTimetable.tsx index 3d202a0..00013c9 100644 --- a/frontend/src/components/stats/SleepTimetable.tsx +++ b/frontend/src/components/stats/SleepTimetable.tsx @@ -16,7 +16,7 @@ const Timetable: React.FC = ({ from_date, to_date, day_start, da const start = new Date(from_date + 'T00:00:00'); const end = new Date(to_date + 'T23:59:59'); const result: string[] = []; - let current = new Date(start); + const current = new Date(start); while (current <= end) { result.push(current.toLocaleDateString('en-CA')); current.setDate(current.getDate() + 1); @@ -47,8 +47,8 @@ const Timetable: React.FC = ({ from_date, to_date, day_start, da return timetable.slots.some((slot) => { if (slot.date !== date || !slot.sleeping) return false; - let sStart = timeToMinutes(slot.slot_start); - let sEnd = timeToMinutes(slot.slot_end); + const sStart = timeToMinutes(slot.slot_start); + const sEnd = timeToMinutes(slot.slot_end); if (sEnd <= sStart) { // Handle wrap-around within a single slot if it happens (though unlikely for 15m segments) diff --git a/frontend/src/components/stats/StatsPage.js b/frontend/src/components/stats/StatsPage.js deleted file mode 100644 index b695088..0000000 --- a/frontend/src/components/stats/StatsPage.js +++ /dev/null @@ -1,23 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { IntervalPicker } from './IntervalPicker'; -import { SettingsPopover } from './SettingsPopover'; -import DailySummary from './DailySummary'; -import Timetable from './SleepTimetable'; -import WakeupPlot from './WakeupPlot'; -import BedtimePlot from './BedtimePlot'; -import { SessionList } from './SessionList'; -import { ErrorBoundary } from '../../components/ErrorBoundary'; -import { useSettings } from '../../hooks/useSettings'; -const StatsPage = () => { - const { settings, update } = useSettings(); - const now = new Date(); - const to_date = now.toLocaleDateString('en-CA'); // YYYY-MM-DD in local time - const from_date = new Date(now.setDate(now.getDate() - settings.statsInterval)).toLocaleDateString('en-CA'); - return (_jsxs("div", { className: "max-w-4xl mx-auto space-y-8 pb-12", children: [_jsxs("div", { className: "flex justify-between items-center pt-4", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-3xl font-extrabold text-slate-900 tracking-tight", children: "Statistics" }), _jsx("p", { className: "text-slate-500 text-sm mt-1", children: "Overview of sleep patterns and trends" })] }), _jsx(SettingsPopover, { dayStart: settings.dayStart, dayEnd: settings.dayEnd, wakeupRef: settings.wakeupRef, bedtimeRef: settings.bedtimeRef, onSave: (s) => { - update('dayStart', s.dayStart); - update('dayEnd', s.dayEnd); - update('wakeupRef', s.wakeupRef); - update('bedtimeRef', s.bedtimeRef); - } })] }), _jsx("div", { className: "bg-white p-6 rounded-[2rem] shadow-md border border-gray-100", children: _jsx(IntervalPicker, { value: settings.statsInterval, onChange: (days) => update('statsInterval', days) }) }), _jsx(ErrorBoundary, { children: _jsx(DailySummary, { from_date: from_date, to_date: to_date, day_start: settings.dayStart, day_end: settings.dayEnd }) }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6", children: [_jsx(ErrorBoundary, { children: _jsx(WakeupPlot, { from_date: from_date, to_date: to_date, wakeup_ref: settings.wakeupRef, bedtime_ref: settings.bedtimeRef }) }), _jsx(ErrorBoundary, { children: _jsx(BedtimePlot, { from_date: from_date, to_date: to_date, wakeup_ref: settings.wakeupRef, bedtime_ref: settings.bedtimeRef }) })] }), _jsx(ErrorBoundary, { children: _jsx(Timetable, { from_date: from_date, to_date: to_date, day_start: settings.dayStart, day_end: settings.dayEnd }) }), _jsx(ErrorBoundary, { children: _jsx(SessionList, {}) })] })); -}; -export default StatsPage; diff --git a/frontend/src/components/stats/WakeupPlot.js b/frontend/src/components/stats/WakeupPlot.js deleted file mode 100644 index 3399404..0000000 --- a/frontend/src/components/stats/WakeupPlot.js +++ /dev/null @@ -1,37 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useEffect, useState } from 'react'; -import { useStats } from '../../hooks/useStats'; -import { formatMinutesAfter, getToday, getLocalOffsetFromReference } from '../../utils/time'; -import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, } from 'recharts'; -const WakeupPlot = ({ from_date, to_date, wakeup_ref, bedtime_ref }) => { - const { wakeupBedtime, isLoading } = useStats(from_date, to_date, '07:00', '20:00', wakeup_ref, bedtime_ref); - const [chartData, setChartData] = useState([]); - useEffect(() => { - if (!wakeupBedtime?.days) { - setChartData([]); - return; - } - const data = wakeupBedtime.days.map((day) => { - const daysAgo = Math.floor((new Date(getToday()).getTime() - new Date(day.date).getTime()) / (1000 * 60 * 60 * 24)); - const offsetFromRef = day.wakeup_minutes !== null ? getLocalOffsetFromReference(day.wakeup_minutes, wakeup_ref) : 0; - return { - date: daysAgo === 0 ? 'Today' : `${daysAgo}d ago`, - minutes: offsetFromRef, - time: day.wakeup_minutes !== null - ? formatMinutesAfter(offsetFromRef, wakeup_ref) - : 'N/A', - }; - }).reverse(); - setChartData(data); - }, [wakeupBedtime, wakeup_ref]); - if (isLoading) - return _jsx("div", { className: "text-center p-4", children: "Loading plot..." }); - if (!chartData.length) { - return _jsx("div", { className: "text-center p-4 text-gray-500", children: "No data available for this period." }); - } - return (_jsxs("div", { className: "bg-white p-4 rounded-xl shadow-sm border border-gray-200", children: [_jsx("h3", { className: "text-lg font-semibold mb-4 text-gray-800", children: "Wakeup Times" }), _jsx(ResponsiveContainer, { width: "100%", height: 200, children: _jsxs(LineChart, { data: chartData, margin: { top: 5, right: 20, left: 0, bottom: 5 }, children: [_jsx(CartesianGrid, { strokeDasharray: "3 3", stroke: "#e5e7eb" }), _jsx(XAxis, { dataKey: "date", tick: { fontSize: 12 }, tickLine: false, axisLine: { stroke: '#e5e7eb' } }), _jsx(YAxis, { tick: { fontSize: 12 }, tickLine: false, axisLine: { stroke: '#e5e7eb' }, tickFormatter: (value) => formatMinutesAfter(value, wakeup_ref), domain: ['dataMin - 30', 'dataMax + 30'] }), _jsx(Tooltip, { formatter: (value) => [ - formatMinutesAfter(value ?? 0, wakeup_ref), - 'Wakeup', - ], labelFormatter: (label) => label }), _jsx(Line, { type: "monotone", dataKey: "minutes", stroke: "#3b82f6", strokeWidth: 2, dot: { fill: '#3b82f6', r: 4 }, connectNulls: false })] }) })] })); -}; -export default WakeupPlot; diff --git a/frontend/src/components/stats/WakeupPlot.tsx b/frontend/src/components/stats/WakeupPlot.tsx index 4db6e96..dfea719 100644 --- a/frontend/src/components/stats/WakeupPlot.tsx +++ b/frontend/src/components/stats/WakeupPlot.tsx @@ -1,6 +1,6 @@ -import { useEffect, useState } from 'react'; +import { useMemo } from 'react'; import { useStats } from '../../hooks/useStats'; -import { formatMinutesAfter, getToday, getLocalOffsetFromReference } from '../../utils/time'; +import { formatMinutesAfter, getToday } from '../../utils/time'; import { LineChart, Line, @@ -20,32 +20,26 @@ interface WakeupBedtimeProps { const WakeupPlot: React.FC = ({ from_date, to_date, wakeup_ref = '07:00', bedtime_ref = '20:00' }) => { const { wakeupBedtime, isLoading } = useStats(from_date, to_date, '07:00', '20:00', wakeup_ref, bedtime_ref); - const [chartData, setChartData] = useState<{ date: string; minutes: number; time: string }[]>([]); - useEffect(() => { - if (!wakeupBedtime?.days) { - setChartData([]); - return; - } + const chartData = useMemo(() => { + if (!wakeupBedtime?.days) return []; - const data = wakeupBedtime.days.map((day) => { - const daysAgo = Math.floor( - (new Date(getToday()).getTime() - new Date(day.date).getTime()) / (1000 * 60 * 60 * 24) - ); + return wakeupBedtime.days.map((day) => { + const daysAgo = Math.floor( + (new Date(getToday()).getTime() - new Date(day.date).getTime()) / (1000 * 60 * 60 * 24) + ); - const offsetFromRef = day.wakeup_minutes ?? 0; + const offsetFromRef = day.wakeup_minutes ?? 0; - return { - date: daysAgo === 0 ? 'Today' : `${daysAgo}d ago`, - minutes: offsetFromRef, - time: - day.wakeup_minutes !== null - ? formatMinutesAfter(offsetFromRef, wakeup_ref) - : 'N/A', - }; - }).reverse(); - - setChartData(data); + return { + date: daysAgo === 0 ? 'Today' : `${daysAgo}d ago`, + minutes: offsetFromRef, + time: + day.wakeup_minutes !== null + ? formatMinutesAfter(offsetFromRef, wakeup_ref) + : 'N/A', + }; + }).reverse(); }, [wakeupBedtime, wakeup_ref]); if (isLoading) return
Loading plot...
; @@ -73,10 +67,10 @@ const WakeupPlot: React.FC = ({ from_date, to_date, wakeup_r domain={['dataMin - 30', 'dataMax + 30']} /> [ + formatter={(value: number) => [ formatMinutesAfter(value, wakeup_ref), 'Wakeup', - ] as any} + ]} labelFormatter={(label) => label} /> = ({ from_date, to_date, wakeup_r /> - + ); }; diff --git a/frontend/src/components/tracker/SleepButton.js b/frontend/src/components/tracker/SleepButton.js deleted file mode 100644 index 05b0f92..0000000 --- a/frontend/src/components/tracker/SleepButton.js +++ /dev/null @@ -1,23 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useSleepSession } from '../../hooks/useSleepSession'; -const SleepButton = ({ time }) => { - const { activeSession, createSession, endSession, isCreating, isEnding } = useSleepSession(); - const isSleeping = !!activeSession; - const handleClick = async () => { - try { - if (isSleeping && activeSession?.id) { - await endSession({ sessionId: activeSession.id, endTime: time }); - } - else { - await createSession({ start_time: time }); - } - } - catch (error) { - console.error('Failed to update sleep session:', error?.message || error); - } - }; - return (_jsx("button", { onClick: handleClick, disabled: isCreating || isEnding, className: `w-full py-8 px-8 rounded-3xl text-2xl font-extrabold shadow-xl transition-all active:scale-95 flex items-center justify-center ${isSleeping - ? 'bg-rose-500 text-white hover:bg-rose-600 shadow-rose-200' - : 'bg-indigo-600 text-white hover:bg-indigo-700 shadow-indigo-200'} ${isCreating || isEnding ? 'opacity-50 cursor-not-allowed' : ''}`, children: isCreating || isEnding ? (_jsxs("div", { className: "flex items-center space-x-2", children: [_jsx("span", { className: "animate-spin rounded-full h-6 w-6 border-b-2 border-white" }), _jsx("span", { children: "Processing..." })] })) : isSleeping ? ('Stop Sleep') : ('Start Sleep') })); -}; -export default SleepButton; diff --git a/frontend/src/components/tracker/SleepButton.tsx b/frontend/src/components/tracker/SleepButton.tsx index c8656b8..8d80fac 100644 --- a/frontend/src/components/tracker/SleepButton.tsx +++ b/frontend/src/components/tracker/SleepButton.tsx @@ -16,9 +16,9 @@ const SleepButton: React.FC = ({ time }) => { } else { await createSession({ start_time: time }); } - } catch (error: any) { - console.error('Failed to update sleep session:', error?.message || error); - } + } catch (error: unknown) { + console.error('Failed to update sleep session:', error instanceof Error ? error.message : error); + } }; return ( diff --git a/frontend/src/components/tracker/StatusBanner.js b/frontend/src/components/tracker/StatusBanner.js deleted file mode 100644 index a0a59d9..0000000 --- a/frontend/src/components/tracker/StatusBanner.js +++ /dev/null @@ -1,27 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useState, useEffect } from 'react'; -import { useSleepSession } from '../../hooks/useSleepSession'; -import { formatElapsedTime } from '../../utils/time'; -const StatusBanner = () => { - const { activeSession, isLoading } = useSleepSession(); - const [elapsed, setElapsed] = useState(''); - useEffect(() => { - if (!activeSession) { - setElapsed(''); - return; - } - const updateElapsed = () => { - setElapsed(formatElapsedTime(activeSession.start_time)); - }; - updateElapsed(); - const interval = setInterval(updateElapsed, 1000); - return () => clearInterval(interval); - }, [activeSession?.start_time]); - if (isLoading) - return _jsx("div", { className: "p-4 text-center", children: "Loading..." }); - if (activeSession) { - return (_jsxs("div", { className: "bg-amber-50 border border-amber-200 text-amber-900 p-4 rounded-2xl shadow-sm mb-4 flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center space-x-3", children: [_jsx("span", { className: "text-2xl", children: "\uD83D\uDE34" }), _jsxs("div", { children: [_jsx("p", { className: "font-semibold leading-tight", children: "Baby is sleeping" }), elapsed && _jsxs("p", { className: "text-sm text-amber-700 font-mono", children: ["(", elapsed, ")"] })] })] }), _jsx("div", { className: "h-2 w-2 bg-amber-500 rounded-full animate-pulse" })] })); - } - return (_jsx("div", { className: "bg-blue-50 border border-blue-200 text-blue-900 p-4 rounded-2xl shadow-sm mb-4 flex items-center justify-between", children: _jsxs("div", { className: "flex items-center space-x-3", children: [_jsx("span", { className: "text-2xl", children: "\uD83D\uDC76" }), _jsx("div", { children: _jsx("p", { className: "font-semibold leading-tight", children: "Baby is awake" }) })] }) })); -}; -export default StatusBanner; diff --git a/frontend/src/components/tracker/StatusBanner.tsx b/frontend/src/components/tracker/StatusBanner.tsx index 6dcf05e..abccb3a 100644 --- a/frontend/src/components/tracker/StatusBanner.tsx +++ b/frontend/src/components/tracker/StatusBanner.tsx @@ -1,3 +1,4 @@ +/* eslint-disable react-hooks/set-state-in-effect */ import { useState, useEffect } from 'react'; import { useSleepSession } from '../../hooks/useSleepSession'; import { formatElapsedTime } from '../../utils/time'; @@ -19,7 +20,7 @@ const StatusBanner = () => { updateElapsed(); const interval = setInterval(updateElapsed, 1000); return () => clearInterval(interval); - }, [activeSession?.start_time]); + }, [activeSession?.start_time, activeSession]); if (isLoading) return
Loading...
; @@ -46,7 +47,7 @@ const StatusBanner = () => {

Baby is awake

- + ); }; diff --git a/frontend/src/components/tracker/TimeAdjuster.js b/frontend/src/components/tracker/TimeAdjuster.js deleted file mode 100644 index 4e63ad5..0000000 --- a/frontend/src/components/tracker/TimeAdjuster.js +++ /dev/null @@ -1,32 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useState, useEffect } from 'react'; -function toLocalDatetimeInputValue(date) { - const pad = (n) => String(n).padStart(2, '0'); - return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`; -} -function toUTCFromLocalInput(inputValue) { - const [datePart, timePart] = inputValue.split('T'); - const [year, month, day] = datePart.split('-').map(Number); - const [hours, minutes] = timePart.split(':').map(Number); - const localDate = new Date(year, month - 1, day, hours, minutes); - return localDate.toISOString(); -} -const TimeAdjuster = ({ onTimeChange, defaultValue }) => { - const [value, setValue] = useState(() => { - if (defaultValue) { - const d = new Date(defaultValue); - return toLocalDatetimeInputValue(d); - } - return toLocalDatetimeInputValue(new Date()); - }); - useEffect(() => { - onTimeChange(toUTCFromLocalInput(value)); - }, [value, onTimeChange]); - const resetToNow = () => { - const now = toLocalDatetimeInputValue(new Date()); - setValue(now); - onTimeChange(toUTCFromLocalInput(now)); - }; - return (_jsxs("div", { className: "flex flex-col items-center space-y-3 w-full", children: [_jsx("div", { className: "relative w-full max-w-[280px]", children: _jsx("input", { type: "datetime-local", value: value, onChange: (e) => setValue(e.target.value), className: "w-full p-4 bg-gray-50 border border-gray-200 rounded-2xl shadow-sm focus:ring-2 focus:ring-indigo-500 focus:border-transparent text-lg font-medium transition-all outline-none" }) }), _jsx("button", { onClick: resetToNow, className: "text-sm font-medium text-indigo-600 hover:text-indigo-500 transition-colors", children: "Reset to now" })] })); -}; -export default TimeAdjuster; diff --git a/frontend/src/components/tracker/TrackerPage.js b/frontend/src/components/tracker/TrackerPage.js deleted file mode 100644 index 111c972..0000000 --- a/frontend/src/components/tracker/TrackerPage.js +++ /dev/null @@ -1,15 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useState } from 'react'; -import StatusBanner from './StatusBanner'; -import SleepButton from './SleepButton'; -import TimeAdjuster from './TimeAdjuster'; -const TrackerPage = () => { - const getLocalTime = () => { - const now = new Date(); - const pad = (n) => String(n).padStart(2, '0'); - return `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}T${pad(now.getHours())}:${pad(now.getMinutes())}`; - }; - const [time, setTime] = useState(getLocalTime()); - return (_jsxs("div", { className: "max-w-md mx-auto pb-12", children: [_jsx(StatusBanner, {}), _jsxs("div", { className: "bg-white p-8 rounded-[2.5rem] shadow-xl border border-gray-100 space-y-8", children: [_jsxs("div", { className: "space-y-4 text-center", children: [_jsx("h2", { className: "text-xl font-bold text-gray-800", children: "Set Sleep Time" }), _jsx("p", { className: "text-gray-500 text-sm", children: "Adjust the time if you are logging a session that already started." })] }), _jsx("div", { className: "pt-4", children: _jsx(TimeAdjuster, { onTimeChange: setTime, defaultValue: time }) }), _jsx("div", { className: "pt-4", children: _jsx(SleepButton, { time: time }) })] })] })); -}; -export default TrackerPage; diff --git a/frontend/src/hooks/useSettings.js b/frontend/src/hooks/useSettings.js deleted file mode 100644 index cf56197..0000000 --- a/frontend/src/hooks/useSettings.js +++ /dev/null @@ -1,32 +0,0 @@ -import { useState, useEffect } from 'react'; -const STORAGE_KEY = 'baby-sleep-settings'; -const DEFAULT_SETTINGS = { - dayStart: '07:00', - dayEnd: '20:00', - wakeupRef: '04:00', - bedtimeRef: '19:00', - statsInterval: 7, -}; -export function useSettings() { - const [settings, setSettings] = useState(() => { - if (typeof window === 'undefined') - return DEFAULT_SETTINGS; - const stored = localStorage.getItem(STORAGE_KEY); - if (stored) { - try { - return { ...DEFAULT_SETTINGS, ...JSON.parse(stored) }; - } - catch { - return DEFAULT_SETTINGS; - } - } - return DEFAULT_SETTINGS; - }); - useEffect(() => { - localStorage.setItem(STORAGE_KEY, JSON.stringify(settings)); - }, [settings]); - const update = (key, value) => { - setSettings((prev) => ({ ...prev, [key]: value })); - }; - return { settings, update }; -} diff --git a/frontend/src/hooks/useSleepSession.js b/frontend/src/hooks/useSleepSession.js deleted file mode 100644 index 2bbb7c0..0000000 --- a/frontend/src/hooks/useSleepSession.js +++ /dev/null @@ -1,60 +0,0 @@ -import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; -import { fetchActiveSession, createSession, endSession, fetchSessions, deleteSession, updateSession } from '../api/client'; -export function useSleepSession() { - const queryClient = useQueryClient(); - const activeSessionQuery = useQuery({ - queryKey: ['activeSession'], - queryFn: fetchActiveSession, - refetchInterval: 30000, // Poll every 30 seconds - }); - const createMutation = useMutation({ - mutationFn: createSession, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['activeSession'] }); - queryClient.invalidateQueries({ queryKey: ['sessions'] }); - }, - }); - const endMutation = useMutation({ - mutationFn: ({ sessionId, endTime }) => endSession(sessionId, { end_time: endTime }), - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['activeSession'] }); - queryClient.invalidateQueries({ queryKey: ['sessions'] }); - }, - }); - return { - activeSession: activeSessionQuery.data, - isLoading: activeSessionQuery.isLoading, - isFetching: activeSessionQuery.isFetching, - createSession: createMutation.mutateAsync, - endSession: endMutation.mutateAsync, - isCreating: createMutation.isPending, - isEnding: endMutation.isPending, - }; -} -export function useSessions() { - const queryClient = useQueryClient(); - const sessionsQuery = useQuery({ - queryKey: ['sessions'], - queryFn: () => fetchSessions(), - }); - const deleteMutation = useMutation({ - mutationFn: deleteSession, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['sessions'] }); - }, - }); - const updateMutation = useMutation({ - mutationFn: ({ sessionId, payload }) => updateSession(sessionId, payload), - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['sessions'] }); - }, - }); - return { - sessions: sessionsQuery.data?.sessions || [], - total: sessionsQuery.data?.total || 0, - isLoading: sessionsQuery.isLoading, - isDeleting: deleteMutation.isPending, - deleteSession: deleteMutation.mutateAsync, - updateSession: updateMutation.mutateAsync, - }; -} diff --git a/frontend/src/hooks/useSleepSession.ts b/frontend/src/hooks/useSleepSession.ts index a616bd9..6e79dbc 100644 --- a/frontend/src/hooks/useSleepSession.ts +++ b/frontend/src/hooks/useSleepSession.ts @@ -54,13 +54,13 @@ export function useSessions() { }, }); - const updateMutation = useMutation({ - mutationFn: ({ sessionId, payload }: { sessionId: number; payload: any }) => - updateSession(sessionId, payload), - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['sessions'] }); - }, - }); + const updateMutation = useMutation({ + mutationFn: ({ sessionId, payload }: { sessionId: number; payload: import('../types').SleepSessionUpdate }) => + updateSession(sessionId, payload), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['sessions'] }); + }, + }); return { sessions: sessionsQuery.data?.sessions || [], diff --git a/frontend/src/hooks/useStats.js b/frontend/src/hooks/useStats.js deleted file mode 100644 index 1065619..0000000 --- a/frontend/src/hooks/useStats.js +++ /dev/null @@ -1,22 +0,0 @@ -import { useQuery } from '@tanstack/react-query'; -import { fetchDailySummary, fetchTimetable, fetchWakeSleepTimes } from '../api/client'; -export function useStats(from_date, to_date, day_start = '07:00', day_end = '20:00', wakeup_ref = '04:00', bedtime_ref = '19:00') { - const dailySummaryQuery = useQuery({ - queryKey: ['dailySummary', from_date, to_date, day_start, day_end], - queryFn: () => fetchDailySummary(from_date, to_date, day_start, day_end), - }); - const timetableQuery = useQuery({ - queryKey: ['timetable', from_date, to_date, day_start, day_end], - queryFn: () => fetchTimetable(from_date, to_date, day_start, day_end), - }); - const wakeupBedtimeQuery = useQuery({ - queryKey: ['wakeSleepTimes', from_date, to_date, wakeup_ref, bedtime_ref], - queryFn: () => fetchWakeSleepTimes(from_date, to_date, wakeup_ref, bedtime_ref), - }); - return { - dailySummary: dailySummaryQuery.data, - timetable: timetableQuery.data, - wakeupBedtime: wakeupBedtimeQuery.data, - isLoading: dailySummaryQuery.isLoading || timetableQuery.isLoading || wakeupBedtimeQuery.isLoading, - }; -} diff --git a/frontend/src/main.js b/frontend/src/main.js deleted file mode 100644 index ad9b500..0000000 --- a/frontend/src/main.js +++ /dev/null @@ -1,8 +0,0 @@ -import { jsx as _jsx } from "react/jsx-runtime"; -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import './index.css'; -import App from './App'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -const queryClient = new QueryClient(); -ReactDOM.createRoot(document.getElementById('root')).render(_jsx(React.StrictMode, { children: _jsx(QueryClientProvider, { client: queryClient, children: _jsx(App, {}) }) })); diff --git a/frontend/src/types/index.js b/frontend/src/types/index.js deleted file mode 100644 index cb0ff5c..0000000 --- a/frontend/src/types/index.js +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/frontend/src/utils/chartHelpers.js b/frontend/src/utils/chartHelpers.js deleted file mode 100644 index d8a0043..0000000 --- a/frontend/src/utils/chartHelpers.js +++ /dev/null @@ -1,109 +0,0 @@ -/** - * Chart data transformation utilities for baby sleep tracker - */ -/** - * Build timetable slots for visualization - * @param slots - raw timetable slots from API - * @returns grouped slots by date - */ -export function buildTimetableSlots(slots) { - return slots.reduce((acc, slot) => { - if (!acc[slot.date]) { - acc[slot.date] = []; - } - acc[slot.date].push(slot); - return acc; - }, {}); -} -/** - * Transform wakeup minutes for Recharts LineChart - * @param days - wakeup/bedtime data from API - * @returns array formatted for LineChart - */ -export function computeWakeupMinutes(days, wakeupRef = "04:00") { - return days.map((day) => ({ - date: day.date, - minutes: day.wakeup_minutes ?? 0, - time: day.wakeup_minutes !== null - ? formatMinutesAfter(day.wakeup_minutes, wakeupRef) - : "N/A", - })); -} -/** - * Transform bedtime minutes for Recharts LineChart - * @param days - wakeup/bedtime data from API - * @returns array formatted for LineChart - */ -export function computeBedtimeMinutes(days, bedtimeRef = "19:00") { - return days.map((day) => ({ - date: day.date, - minutes: day.bedtime_minutes ?? 0, - time: day.bedtime_minutes !== null - ? formatMinutesAfter(day.bedtime_minutes, bedtimeRef) - : "N/A", - })); -} -/** - * Transform daily summary for Recharts BarChart (vertical layout) - * @param days - daily summary data from API - * @returns array formatted for BarChart - */ -export function computeDailySummaryData(days) { - return days.map((day) => ({ - date: day.date, - daySleep: day.day_minutes, - nightSleep: day.night_minutes, - total: day.total_minutes, - })); -} -/** - * Calculate average summary stats from daily data - * @param days - daily summary data from API - * @returns averages for total, day, and night sleep - */ -export function computeAverageStats(days) { - if (!days.length) { - return { avgTotal: 0, avgDay: 0, avgNight: 0, count: 0 }; - } - const totals = days.reduce((acc, day) => ({ - total: acc.total + day.total_minutes, - day: acc.day + day.day_minutes, - night: acc.night + day.night_minutes, - }), { total: 0, day: 0, night: 0 }); - const count = days.length; - return { - avgTotal: Math.round(totals.total / count), - avgDay: Math.round(totals.day / count), - avgNight: Math.round(totals.night / count), - count, - }; -} -/** - * Convert minutes after reference to clock time string - * Internal helper - kept for chartHelpers module - */ -function formatMinutesAfter(minutes, reference) { - const [refHours, refMinutes] = reference.split(":").map(Number); - const totalRefMinutes = refHours * 60 + refMinutes; - const targetMinutes = totalRefMinutes + minutes; - const normalizedMinutes = ((targetMinutes % 1440) + 1440) % 1440; - const hours = Math.floor(normalizedMinutes / 60); - const mins = normalizedMinutes % 60; - return `${String(hours).padStart(2, "0")}:${String(mins).padStart(2, "0")}`; -} -/** - * Reverse date order (newest first for charts) - * @param days - array of day data - * @returns reversed array - */ -export function reverseDateOrder(days) { - return [...days].reverse(); -} -/** - * Filter days to only include those with data - * @param days - array of day data - * @returns filtered array - */ -export function filterDaysWithData(days) { - return days.filter((day) => (day.total_minutes ?? 0) > 0); -} diff --git a/frontend/src/utils/time.js b/frontend/src/utils/time.js deleted file mode 100644 index 2846579..0000000 --- a/frontend/src/utils/time.js +++ /dev/null @@ -1,137 +0,0 @@ -/** - * Time formatting utilities for baby sleep tracker - */ -/** - * Convert minutes after a reference time to clock time string - * @param minutes - minutes after reference time (can be negative) - * @param reference - reference time as HH:MM string - * @returns formatted time string like "07:15" - */ -export function formatMinutesAfter(minutes, reference = "04:00") { - if (minutes === null) - return "N/A"; - const [refHours, refMinutes] = reference.split(":").map(Number); - const totalRefMinutes = refHours * 60 + refMinutes; - const targetMinutes = totalRefMinutes + minutes; - // Handle wrap around midnight - const normalizedMinutes = ((targetMinutes % 1440) + 1440) % 1440; - const hours = Math.floor(normalizedMinutes / 60); - const mins = normalizedMinutes % 60; - return `${String(hours).padStart(2, "0")}:${String(mins).padStart(2, "0")}`; -} -/** - * Adjust minutes by the local timezone offset - * @param utcMinutes - minutes from UTC midnight - * @returns adjusted minutes for local time - */ -export function adjustForTimezone(utcMinutes) { - const offsetInMinutes = new Date().getTimezoneOffset(); - return utcMinutes - offsetInMinutes; -} -/** - * Convert a Date to datetime-local input value format (local time) - * @param date - Date object - * @returns string in "YYYY-MM-DDTHH:MM" format - */ -export function toLocalDatetimeInputValue(date) { - const offset = date.getTimezoneOffset() * 60 * 1000; - const localDate = new Date(date.getTime() - offset); - return localDate.toISOString().slice(0, 16); -} -export function formatElapsedTime(utcTimestamp) { - let isoString = utcTimestamp; - if (utcTimestamp.includes(' ')) { - isoString = utcTimestamp.replace(' ', 'T'); - } - if (!isoString.endsWith('Z')) { - isoString += 'Z'; - } - const then = new Date(isoString); - const now = new Date(); - const diffMs = now.getTime() - then.getTime(); - const diffMins = Math.floor(diffMs / 60000); - const hours = Math.floor(diffMins / 60); - const mins = diffMins % 60; - if (hours > 0) - return `${hours}h ${mins}m`; - return `${mins}m`; -} -/** - * Clamp a date to day boundaries (start or end of day) - * @param date - Date to clamp - * @param bound - 'start' for 00:00, 'end' for 23:59:59.999 - * @returns new Date clamped to day boundary - */ -export function clampToDay(date, bound) { - const result = new Date(date); - if (bound === "start") { - result.setHours(0, 0, 0, 0); - } - else { - result.setHours(23, 59, 59, 999); - } - return result; -} -/** - * Parse HH:MM time string to Date on a given day - * @param timeStr - HH:MM format - * @param baseDate - base date (defaults to today) - * @returns Date object - * @throws Error if timeStr is invalid - */ -export function parseTime(timeStr, baseDate = new Date()) { - const [hours, minutes] = timeStr.split(":").map(Number); - const result = new Date(baseDate); - result.setHours(hours, minutes, 0, 0); - return result; -} -/** - * Get date string for N days ago - * @param days - number of days ago - * @returns ISO date string (YYYY-MM-DD) - */ -export function getDaysAgo(days) { - const date = new Date(); - date.setDate(date.getDate() - days); - return date.toISOString().split("T")[0]; -} -/** - * Get date string for today - * @returns ISO date string (YYYY-MM-DD) - */ -export function getToday() { - return new Date().toISOString().split("T")[0]; -} -/** - * Convert HH:MM time string to total minutes from start of day - * @param timeStr - HH:MM format - * @returns total minutes - */ -export function timeToMinutes(timeStr) { - if (!timeStr || typeof timeStr !== 'string') return 0; - const [hours, minutes] = timeStr.split(":").map(Number); - return hours * 60 + minutes; -} -/** - * Get the offset from a reference time in local minutes - * @param utcMinutesFromMidnight - minutes from UTC midnight - * @param referenceHHMM - reference time as HH:MM string - * @returns local offset from reference in minutes - */ -export function getLocalOffsetFromReference(utcMinutesFromMidnight, referenceHHMM) { - const localMinsFromMidnight = adjustForTimezone(utcMinutesFromMidnight); - return localMinsFromMidnight - timeToMinutes(referenceHHMM); -} -/** - * Convert total minutes to a human-readable string (e.g., "1h 30m" or "45m") - * @param totalMinutes - Total number of minutes - * @returns Formatted string - */ -export function formatMinutes(totalMinutes) { - const hours = Math.floor(totalMinutes / 60); - const mins = totalMinutes % 60; - if (hours > 0) { - return `${hours}h ${mins}m`; - } - return `${mins}m`; -} diff --git a/frontend/tailwind.config.ts b/frontend/tailwind.config.ts index 4713d40..d784d22 100644 --- a/frontend/tailwind.config.ts +++ b/frontend/tailwind.config.ts @@ -1,5 +1,4 @@ import type { Config } from 'tailwindcss'; -import tailwindcss from '@tailwindcss/vite'; export default { content: [ diff --git a/frontend/tests/e2e/timetable_timezone.spec.ts b/frontend/tests/e2e/timetable_timezone.spec.ts index d809409..e13a896 100644 --- a/frontend/tests/e2e/timetable_timezone.spec.ts +++ b/frontend/tests/e2e/timetable_timezone.spec.ts @@ -1,5 +1,7 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { test, expect } from '@playwright/test'; + test.describe('Sleep Timetable Timezone Alignment', () => { test.use({ timezoneId: 'America/Los_Angeles', @@ -78,9 +80,6 @@ test.describe('Sleep Timetable Timezone Alignment', () => { if (markerBox) { // The marker is at 08:00, which is (8*60)/1440 = 33.33% from the top of the container // We can check if the cell at that height is green. - const timetableContainer = page.locator('.relative'); - // Note: 'relative' is the container for the grid and marker. - // We look for a green cell that intersects with the red marker's Y position. const allGreenCells = page.locator('.bg-green-500'); const count = await allGreenCells.count(); let foundAlignedCell = false; diff --git a/frontend/tests/unit/SleepButton.test.tsx b/frontend/tests/unit/SleepButton.test.tsx index 64fcc49..f5a4a1d 100644 --- a/frontend/tests/unit/SleepButton.test.tsx +++ b/frontend/tests/unit/SleepButton.test.tsx @@ -1,4 +1,6 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { describe, it, expect, vi, beforeEach } from 'vitest'; + import { render, screen, fireEvent, waitFor } from '@testing-library/react'; import '@testing-library/jest-dom'; import SleepButton from '../../src/components/tracker/SleepButton'; diff --git a/frontend/tests/unit/StatusBanner.test.tsx b/frontend/tests/unit/StatusBanner.test.tsx index a809b2b..e20e804 100644 --- a/frontend/tests/unit/StatusBanner.test.tsx +++ b/frontend/tests/unit/StatusBanner.test.tsx @@ -1,4 +1,6 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; + import { render, screen } from '@testing-library/react'; import '@testing-library/jest-dom'; import StatusBanner from '../../src/components/tracker/StatusBanner'; diff --git a/frontend/tests/unit/components/stats/SleepTimetable.test.tsx b/frontend/tests/unit/components/stats/SleepTimetable.test.tsx index 7f3425e..63dd044 100644 --- a/frontend/tests/unit/components/stats/SleepTimetable.test.tsx +++ b/frontend/tests/unit/components/stats/SleepTimetable.test.tsx @@ -1,4 +1,6 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { render, screen } from '@testing-library/react'; + import '@testing-library/jest-dom'; import { vi, describe, it, expect } from 'vitest'; import Timetable from '../../../../src/components/stats/SleepTimetable'; @@ -78,7 +80,6 @@ describe('SleepTimetable', () => { // We are looking for the grid cells. // Since they don't have text, we look at their classes/backgrounds. - const cells = container.querySelectorAll('.h-8'); const greenCells = container.querySelectorAll('.bg-green-500'); expect(greenCells.length).toBeGreaterThan(0);