diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..d0a65058 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,75 @@ +name: Release + +on: + push: + tags: + - "v*" + +jobs: + build: + strategy: + matrix: + os: [windows-latest, macos-latest, ubuntu-latest] + include: + - os: windows-latest + artifact_name: devtools-windows + - os: macos-latest + artifact_name: devtools-macos + - os: ubuntu-latest + artifact_name: devtools-linux + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + + - name: Install dependencies + run: npm ci + + - name: Build and package + run: npm run dist + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: devtools-${{ matrix.os }} + path: release/* + retention-days: 30 + + release: + needs: build + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/v') + + permissions: + contents: write + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: release-artifacts + + - name: Display structure of downloaded files + run: ls -R release-artifacts + + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + files: release-artifacts/**/* + draft: false + prerelease: false + generate_release_notes: false + fail_on_unmatched_files: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 52e80a16..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,7 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - diff --git a/README.md b/README.md index b3eb76af..e76b3dd0 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,6 @@ Offline-first developer utilities for macOS, Windows, and Linux. No cloud depend - **API Response Formatter** - Format REST/GraphQL responses with interactive tree view and real-time search - **Text Compare** - Diff viewer with line-by-line comparison - **Case Converter** - Transform between camelCase, snake_case, kebab-case, and more -- **SQL Formatter** - Format SQL queries with customizable indentation - **Markdown Editor** - Live preview with export support - **Code Playground** - Multi-language editor (JS, HTML, CSS, JSON, Markdown) @@ -27,19 +26,20 @@ Offline-first developer utilities for macOS, Windows, and Linux. No cloud depend ### Generators -- **UUID** - Generate v1/v4 UUIDs with batch support +- **UUID Generator** - Generate v1/v4/v6/v7 UUIDs and ULIDs with batch support - **Password Generator** - Generate secure passwords and passphrases with strength analysis -- **Hash** - MD5, SHA-1, SHA-256, SHA-512 -- **QR Code** - Generate QR codes with custom size and error correction +- **Hash Generator** - MD5, SHA-1, SHA-256, SHA-512 +- **QR Generator** - Generate QR codes with custom size and error correction - **Color Palette** - Create monochromatic, analogous, complementary schemes -- **Lorem Ipsum** - Generate placeholder text +- **Lorem Generator** - Generate placeholder text ### Developer Utilities - **JWT Decoder** - Decode and inspect JWT tokens -- **Regex Builder** - Interactive regex construction with live testing -- **Cron Parser** - Build cron expressions with plain English descriptions +- **Regex Generator** - Interactive regex construction with live testing +- **Cron Calculator** - Build cron expressions with plain English descriptions - **Timestamp Converter** - Unix timestamp conversion with multiple formats +- **Date Difference** - Calculate difference between two dates - **Image Converter** - Convert between PNG, JPEG, WebP, BMP ## Quick Start @@ -50,8 +50,8 @@ git clone https://github.com/me-shaon/devtools.git cd devtools npm install -# Run locally -npm start +# Run locally (development mode) +npm run dev # Build for distribution npm run dist @@ -59,62 +59,73 @@ npm run dist ## Requirements -- Node.js 14+ +- Node.js 18+ - npm or yarn ## Architecture ``` src/ -├── main.js # Electron main process -└── renderer/ - ├── index.html # Single-page application - ├── styles/ # CSS modules - └── js/ - ├── main.js # App router and state - └── tools/ # Tool implementations (23 modules) +├── components/ +│ └── tools/ # Tool implementations (24 React components) +├── app/ +│ └── DevToolsApp.tsx # Main app with sidebar navigation +└── main.tsx # React entry point + +src-electron/ +├── main.ts # Electron main process +└── preload.ts # Secure IPC bridge ``` -Each tool is a self-contained module with no external dependencies. All processing happens client-side. +### Tech Stack +- **Electron** 40+ for desktop runtime +- **React** 18+ with TypeScript +- **Vite** for fast builds and hot reload +- **Tailwind CSS** for styling +- **shadcn/ui** for UI components +- No analytics or telemetry ## Development -### Adding a Tool +### Running in Development -1. Create module in `src/renderer/js/tools/` -2. Add HTML section in `index.html` -3. Register in navigation sidebar -4. Add menu item in `src/main.js` +```bash +npm run dev # Starts Vite dev server + Electron +``` ### Build Scripts ```bash -npm start # Development server -npm run build # Build executable -npm run pack # Package without distributing -npm run dist # Create installer -npm test # Run test suite -npm run security-check # Run security checks +npm run dev # Development mode with hot reload +npm run build # Build React app + Electron +npm run dist # Create installers for all platforms +npm run dist:publish # Build and publish to GitHub releases ``` -## Security +## Releases + +Releases are built automatically via GitHub Actions when you push a version tag: -This project uses GitGuardian for secret detection and follows security best practices: +```bash +# Create and push a version tag +git tag v1.0.0 +git push origin v1.0.0 +``` -- 🔒 **Secret Scanning**: Automated detection of hardcoded secrets -- 🛡️ **Pre-commit Hooks**: Prevent secrets from being committed -- 📋 **Security Guidelines**: See [SECURITY.md](SECURITY.md) for details -- 🔧 **Local Testing**: Run `npm run security-check` before committing +The workflow will: +1. Build for Windows, macOS, and Linux +2. Create a GitHub release +3. Attach all installer files (DMG, NSIS, AppImage) -For security issues, please review our [Security Guidelines](SECURITY.md). +See [RELEASE.md](RELEASE.md) for detailed release instructions. -## Tech Stack +## Adding a Tool -- Electron 22+ for desktop runtime -- Vanilla JavaScript (ES6+) -- No framework dependencies -- No analytics or telemetry +1. Create component in `src/components/tools/YourTool.tsx` +2. Add tool definition to `ALL_TOOLS` array in `src/app/DevToolsApp.tsx` +3. Add render case in the `renderTool()` switch statement +4. That's it! The tool will appear in the sidebar automatically ## Contributing @@ -128,10 +139,9 @@ Pull requests welcome. For major changes, open an issue first to discuss the pro ```bash git clone https://github.com/me-shaon/devtools.git -cd devtools-desktop +cd devtools npm install -npm start # Run in development mode -npm test # Run test suite +npm run dev # Run in development mode ``` ## License diff --git a/assets/screenshot.png b/assets/screenshot.png index 6f990e65..fbc43034 100644 Binary files a/assets/screenshot.png and b/assets/screenshot.png differ diff --git a/components.json b/components.json new file mode 100644 index 00000000..62e10116 --- /dev/null +++ b/components.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/index.css", + "baseColor": "slate", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + } +} diff --git a/dist-electron/main.js b/dist-electron/main.js new file mode 100644 index 00000000..190cc8ed --- /dev/null +++ b/dist-electron/main.js @@ -0,0 +1,95 @@ +// src-electron/main.ts +import { app, BrowserWindow, dialog, shell } from "electron"; +import path from "path"; +import { fileURLToPath } from "url"; +import { dirname } from "path"; +import electronUpdater from "electron-updater"; +var { autoUpdater } = electronUpdater; +var __filename = fileURLToPath(import.meta.url); +var __dirname = dirname(__filename); +var win = null; +var isDev = !app.isPackaged; +function createWindow() { + win = new BrowserWindow({ + width: 1200, + height: 800, + backgroundColor: "#191919", + show: false, + webPreferences: { + preload: path.join(__dirname, "preload.js"), + contextIsolation: true, + nodeIntegration: false, + webSecurity: true + } + }); + win.once("ready-to-show", () => { + win?.show(); + }); + const url = isDev ? "http://localhost:8080" : `file://${path.join(__dirname, "../dist/index.html")}`; + win.loadURL(url); + if (isDev) { + win.webContents.openDevTools(); + } + win.webContents.setWindowOpenHandler(({ url: url2 }) => { + shell.openExternal(url2); + return { action: "deny" }; + }); + win.on("closed", () => { + win = null; + }); +} +function createTray() { + const trayIconPath = path.join(__dirname, "assets/tray.png"); +} +app.whenReady().then(() => { + createWindow(); + createTray(); + if (!isDev) { + autoUpdater.checkForUpdates(); + } +}); +app.on("window-all-closed", () => { + if (process.platform !== "darwin") { + app.quit(); + } +}); +app.on("activate", () => { + if (BrowserWindow.getAllWindows().length === 0) { + createWindow(); + } +}); +autoUpdater.autoDownload = false; +autoUpdater.setFeedURL({ + provider: "github", + owner: "me-shaon", + repo: "devtools" +}); +autoUpdater.on("update-available", () => { + dialog.showMessageBox({ + type: "info", + title: "Update available", + message: "A new version of DevTools is available. Update now?", + buttons: ["Update", "Later"] + }).then((result) => { + if (result.response === 0) { + autoUpdater.downloadUpdate(); + } + }); +}); +autoUpdater.on("update-not-available", () => { +}); +autoUpdater.on("update-downloaded", () => { + dialog.showMessageBox({ + type: "info", + title: "Update ready", + message: "Restart to install update?", + buttons: ["Restart", "Later"] + }).then((result) => { + if (result.response === 0) { + autoUpdater.quitAndInstall(); + } + }); +}); +autoUpdater.on("error", (error) => { + console.error("Auto-updater error:", error); +}); diff --git a/dist-electron/preload.js b/dist-electron/preload.js new file mode 100644 index 00000000..4700ede5 --- /dev/null +++ b/dist-electron/preload.js @@ -0,0 +1,25 @@ +// src-electron/preload.ts +import { contextBridge, ipcRenderer } from "electron"; +contextBridge.exposeInMainWorld("electronAPI", { + invoke: (channel, ...args) => { + const validChannels = ["app-version", "get-path"]; + if (validChannels.includes(channel)) { + return ipcRenderer.invoke(channel, ...args); + } + return Promise.reject(new Error(`Channel ${channel} is not allowed`)); + }, + on: (channel, callback) => { + const validChannels = ["update-available", "update-downloaded"]; + if (validChannels.includes(channel)) { + const subscription = (_event, ...args) => callback(...args); + ipcRenderer.on(channel, subscription); + return () => { + ipcRenderer.removeListener(channel, subscription); + }; + } + return () => { + }; + }, + platform: process.platform, + version: process.versions.electron +}); diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..40f72cc4 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,26 @@ +import js from "@eslint/js"; +import globals from "globals"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; +import tseslint from "typescript-eslint"; + +export default tseslint.config( + { ignores: ["dist"] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ["**/*.{ts,tsx}"], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + "react-hooks": reactHooks, + "react-refresh": reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + "react-refresh/only-export-components": ["warn", { allowConstantExport: true }], + "@typescript-eslint/no-unused-vars": "off", + }, + }, +); diff --git a/index.html b/index.html new file mode 100644 index 00000000..633a96ed --- /dev/null +++ b/index.html @@ -0,0 +1,25 @@ + + + + + + DevTools - Your Essential Dev Companion + + + + + + + + + + + + + + + +
+ + + diff --git a/package-lock.json b/package-lock.json index 2f4768c3..4605a34d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,40 +1,81 @@ { - "name": "dev-tools-desktop", + "name": "devtools", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "dev-tools-desktop", + "name": "devtools", "version": "1.0.0", "license": "MIT", "dependencies": { - "crypto-js": "^4.2.0", - "jsonwebtoken": "^9.0.2", - "marked": "^12.0.0", - "node-cron": "^3.0.3", - "qrcode": "^1.5.3", - "uuid": "^9.0.1" + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-select": "^2.2.5", + "@radix-ui/react-slider": "^1.3.5", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-switch": "^1.2.5", + "@radix-ui/react-tabs": "^1.1.12", + "@radix-ui/react-toast": "^1.2.14", + "@radix-ui/react-tooltip": "^1.2.7", + "@tanstack/react-query": "^5.83.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "concurrently": "^9.2.1", + "electron-updater": "^6.7.3", + "input-otp": "^1.4.2", + "lucide-react": "^0.462.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-resizable-panels": "^2.1.9", + "sonner": "^1.7.4", + "tailwind-merge": "^2.6.0", + "tailwindcss-animate": "^1.0.7", + "wait-on": "^9.0.3" }, "devDependencies": { - "electron": "^28.0.0", - "electron-builder": "^24.0.0", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "@eslint/js": "^9.32.0", + "@tailwindcss/typography": "^0.5.16", + "@testing-library/jest-dom": "^6.6.0", + "@testing-library/react": "^16.0.0", + "@types/node": "^22.19.7", + "@types/react": "^18.3.23", + "@types/react-dom": "^18.3.7", + "@vitejs/plugin-react-swc": "^3.11.0", + "autoprefixer": "^10.4.21", + "electron": "^40.0.0", + "electron-builder": "^26.4.0", + "esbuild": "^0.27.2", + "eslint": "^9.32.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^15.15.0", + "jsdom": "^20.0.3", + "postcss": "^8.5.6", + "sharp": "^0.34.5", + "tailwindcss": "^3.4.17", + "typescript": "^5.8.3", + "typescript-eslint": "^8.38.0", + "vite": "^5.4.19", + "vitest": "^3.2.4" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", + "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, + "license": "MIT" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@babel/code-frame": { @@ -43,6 +84,7 @@ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", @@ -52,1907 +94,1964 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", - "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/core": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", - "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", "dev": true, "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.6", - "@babel/parser": "^7.28.0", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.0", - "@babel/types": "^7.28.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, "engines": { "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/generator": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", - "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "node_modules/@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.0", - "@babel/types": "^7.28.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" }, "engines": { - "node": ">=6.9.0" + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "node_modules/@electron/asar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", + "integrity": "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" }, "engines": { - "node": ">=6.9.0" + "node": ">=10.12.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==", + "node_modules/@electron/asar/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/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/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, - "license": "MIT", + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=6.9.0" + "node": "*" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "node_modules/@electron/fuses": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.8.0.tgz", + "integrity": "sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "chalk": "^4.1.1", + "fs-extra": "^9.0.1", + "minimist": "^1.2.5" }, - "engines": { - "node": ">=6.9.0" + "bin": { + "electron-fuses": "dist/bin.js" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "node_modules/@electron/fuses/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "dev": true, - "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=10" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "node_modules/@electron/fuses/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.9.0" + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "node_modules/@electron/fuses/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">= 10.0.0" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "node_modules/@electron/get": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", "dev": true, "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, "engines": { - "node": ">=6.9.0" + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" } }, - "node_modules/@babel/helpers": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz", - "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==", + "node_modules/@electron/notarize": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", + "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2" + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">= 10.0.0" } }, - "node_modules/@babel/parser": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", - "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "node_modules/@electron/notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.0" - }, - "bin": { - "parser": "bin/babel-parser.js" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=10" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/@electron/notarize/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "universalify": "^2.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "node_modules/@electron/notarize/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "node_modules/@electron/osx-sign": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.3.tgz", + "integrity": "sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "compare-version": "^0.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "isbinaryfile": "^4.0.8", + "minimist": "^1.2.6", + "plist": "^3.0.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "node_modules/@electron/osx-sign/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, "engines": { - "node": ">=6.9.0" + "node": ">= 8.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "node_modules/@electron/osx-sign/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "universalify": "^2.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "node_modules/@electron/osx-sign/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "node_modules/@electron/rebuild": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-4.0.1.tgz", + "integrity": "sha512-iMGXb6Ib7H/Q3v+BKZJoETgF9g6KMNZVbsO4b7Dmpgb5qTFqyFTzqW9F3TOSHdybv2vKYKzSS9OiZL+dcJb+1Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@malept/cross-spawn-promise": "^2.0.0", + "chalk": "^4.0.0", + "debug": "^4.1.1", + "detect-libc": "^2.0.1", + "got": "^11.7.0", + "graceful-fs": "^4.2.11", + "node-abi": "^4.2.0", + "node-api-version": "^0.2.1", + "node-gyp": "^11.2.0", + "ora": "^5.1.0", + "read-binary-file-arch": "^1.0.6", + "semver": "^7.3.5", + "tar": "^6.0.5", + "yargs": "^17.0.1" }, - "engines": { - "node": ">=6.9.0" + "bin": { + "electron-rebuild": "lib/cli.js" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=22.12.0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "node_modules/@electron/rebuild/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=10" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "node_modules/@electron/universal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.3.tgz", + "integrity": "sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@electron/asar": "^3.3.1", + "@malept/cross-spawn-promise": "^2.0.0", + "debug": "^4.3.1", + "dir-compare": "^4.2.0", + "fs-extra": "^11.1.1", + "minimatch": "^9.0.3", + "plist": "^3.1.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=16.4" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "node_modules/@electron/universal/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "balanced-match": "^1.0.0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "node_modules/@electron/universal/node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=14.14" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "node_modules/@electron/universal/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "universalify": "^2.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "node_modules/@electron/universal/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "brace-expansion": "^2.0.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "node_modules/@electron/universal/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">= 10.0.0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "node_modules/@electron/windows-sign": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@electron/windows-sign/-/windows-sign-1.2.2.tgz", + "integrity": "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "optional": true, + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "cross-dirname": "^0.1.0", + "debug": "^4.3.4", + "fs-extra": "^11.1.1", + "minimist": "^1.2.8", + "postject": "^1.0.0-alpha.6" }, - "engines": { - "node": ">=6.9.0" + "bin": { + "electron-windows-sign": "bin/electron-windows-sign.js" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=14.14" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "node_modules/@electron/windows-sign/node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14.14" } }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "node_modules/@electron/windows-sign/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=6.9.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@babel/traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", - "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "node_modules/@electron/windows-sign/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.0", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.0", - "debug": "^4.3.1" - }, + "optional": true, + "peer": true, "engines": { - "node": ">=6.9.0" + "node": ">= 10.0.0" } }, - "node_modules/@babel/types": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", - "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" + "tslib": "^2.4.0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@develar/schema-utils": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", - "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", - "dependencies": { - "ajv": "^6.12.0", - "ajv-keywords": "^3.4.1" - }, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=18" } }, - "node_modules/@electron/asar": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", - "integrity": "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==", + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "commander": "^5.0.0", - "glob": "^7.1.6", - "minimatch": "^3.0.4" - }, - "bin": { - "asar": "bin/asar.js" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=10.12.0" + "node": ">=18" } }, - "node_modules/@electron/asar/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@electron/asar/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "*" + "node": ">=18" } }, - "node_modules/@electron/get": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", - "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^11.8.5", - "progress": "^2.0.3", - "semver": "^6.2.0", - "sumchecker": "^3.0.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "global-agent": "^3.0.0" + "node": ">=18" } }, - "node_modules/@electron/notarize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.2.1.tgz", - "integrity": "sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "fs-extra": "^9.0.1", - "promise-retry": "^2.0.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 10.0.0" + "node": ">=18" } }, - "node_modules/@electron/notarize/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/@electron/notarize/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@electron/notarize/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 10.0.0" + "node": ">=18" } }, - "node_modules/@electron/osx-sign": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.0.5.tgz", - "integrity": "sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "compare-version": "^0.1.2", - "debug": "^4.3.4", - "fs-extra": "^10.0.0", - "isbinaryfile": "^4.0.8", - "minimist": "^1.2.6", - "plist": "^3.0.5" - }, - "bin": { - "electron-osx-flat": "bin/electron-osx-flat.js", - "electron-osx-sign": "bin/electron-osx-sign.js" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12.0.0" + "node": ">=18" } }, - "node_modules/@electron/osx-sign/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@electron/osx-sign/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], "dev": true, "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@electron/osx-sign/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 10.0.0" + "node": ">=18" } }, - "node_modules/@electron/universal": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.5.1.tgz", - "integrity": "sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@electron/asar": "^3.2.1", - "@malept/cross-spawn-promise": "^1.1.0", - "debug": "^4.3.1", - "dir-compare": "^3.0.0", - "fs-extra": "^9.0.1", - "minimatch": "^3.0.4", - "plist": "^3.0.4" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8.6" + "node": ">=18" } }, - "node_modules/@electron/universal/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@electron/universal/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/@electron/universal/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@electron/universal/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": "*" + "node": ">=18" } }, - "node_modules/@electron/universal/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">= 10.0.0" + "node": ">=18" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=18" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=18" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=18" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "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": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "url": "https://opencollective.com/eslint" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "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": ">=8" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": "*" } }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "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": "MIT", + "license": "Apache-2.0", "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "@eslint/core": "^0.17.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "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": "MIT", + "license": "Apache-2.0", "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" + "@types/json-schema": "^7.0.15" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "dev": true, "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" } }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", "dev": true, "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://eslint.org/donate" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "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": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, + "license": "Apache-2.0", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "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": "MIT", + "license": "Apache-2.0", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@floating-ui/utils": "^0.2.10" } }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", "license": "MIT", "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" } }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", + "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "@floating-ui/dom": "^1.7.4" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "license": "MIT", + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@hapi/address": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", + "license": "BSD-3-Clause", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@hapi/hoek": "^11.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } + "node_modules/@hapi/formula": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", + "license": "BSD-3-Clause" }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", + "node_modules/@hapi/hoek": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/tlds": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.4.tgz", + "integrity": "sha512-Fq+20dxsxLaUn5jSSWrdtSRcIUba2JquuorF9UW1wIJS5cSUwxIsO2GIhaWynPRflvxSzFN+gxKte2HEW1OuoA==", + "license": "BSD-3-Clause", "engines": { - "node": ">=6.0.0" + "node": ">=14.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.30", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", - "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", - "dev": true, - "license": "MIT", + "node_modules/@hapi/topo": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", + "license": "BSD-3-Clause", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@hapi/hoek": "^11.0.2" } }, - "node_modules/@malept/cross-spawn-promise": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", - "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/malept" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" - } - ], "license": "Apache-2.0", - "dependencies": { - "cross-spawn": "^7.0.1" - }, "engines": { - "node": ">= 10" + "node": ">=18.18.0" } }, - "node_modules/@malept/flatpak-bundler": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", - "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "debug": "^4.1.1", - "fs-extra": "^9.0.0", - "lodash": "^4.17.15", - "tmp-promise": "^3.0.2" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">=18.18.0" } }, - "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "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": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=10" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "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": "MIT", - "dependencies": { - "universalify": "^2.0.0" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@malept/flatpak-bundler/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">=18" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=14" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" } }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/ms": "*" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@types/fs-extra": { - "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", - "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" } }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" } }, - "node_modules/@types/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" } }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" } }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } }, - "node_modules/@types/node": { - "version": "18.19.122", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.122.tgz", - "integrity": "sha512-yzegtT82dwTNEe/9y+CM8cgb42WrUfMMCg2QqSddzO1J6uPmBD7qKCZ7dOHZP2Yrpm/kb0eqdNMn2MUyEiqBmA==", + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" } }, - "node_modules/@types/plist": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", - "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@types/node": "*", - "xmlbuilder": ">=11.0.1" + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@types/responselike": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "MIT" + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } }, - "node_modules/@types/verror": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.11.tgz", - "integrity": "sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==", + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", "dev": true, "license": "MIT", - "optional": true + "engines": { + "node": "20 || >=22" + } }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", "dev": true, "license": "MIT", "dependencies": { - "@types/yargs-parser": "*" + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, - "license": "MIT", - "optional": true, + "license": "ISC", "dependencies": { - "@types/node": "*" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/7zip-bin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", - "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } + "license": "MIT" }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { - "acorn": "^8.11.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=0.4.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { - "debug": "4" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "node": ">=12" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "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==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/@malept/cross-spawn-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", "dev": true, - "license": "ISC", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "license": "Apache-2.0", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "cross-spawn": "^7.0.1" }, "engines": { - "node": ">= 8" + "node": ">= 12.13.0" } }, - "node_modules/app-builder-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", - "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", - "dev": true, - "license": "MIT" - }, - "node_modules/app-builder-lib": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.13.3.tgz", - "integrity": "sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==", + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", "dev": true, "license": "MIT", "dependencies": { - "@develar/schema-utils": "~2.6.5", - "@electron/notarize": "2.2.1", - "@electron/osx-sign": "1.0.5", - "@electron/universal": "1.5.1", - "@malept/flatpak-bundler": "^0.4.0", - "@types/fs-extra": "9.0.13", - "async-exit-hook": "^2.0.1", - "bluebird-lst": "^1.0.9", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", - "chromium-pickle-js": "^0.2.0", - "debug": "^4.3.4", - "ejs": "^3.1.8", - "electron-publish": "24.13.1", - "form-data": "^4.0.0", - "fs-extra": "^10.1.0", - "hosted-git-info": "^4.1.0", - "is-ci": "^3.0.0", - "isbinaryfile": "^5.0.0", - "js-yaml": "^4.1.0", - "lazy-val": "^1.0.5", - "minimatch": "^5.1.1", - "read-config-file": "6.3.2", - "sanitize-filename": "^1.6.3", - "semver": "^7.3.8", - "tar": "^6.1.12", - "temp-file": "^3.4.0" + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "dmg-builder": "24.13.3", - "electron-builder-squirrel-windows": "24.13.3" + "node": ">= 10.0.0" } }, - "node_modules/app-builder-lib/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "license": "MIT", "dependencies": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/app-builder-lib/node_modules/jsonfile": { + "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", @@ -1965,20 +2064,7 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/app-builder-lib/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/app-builder-lib/node_modules/universalify": { + "node_modules/@malept/flatpak-bundler/node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", @@ -1988,1224 +2074,4717 @@ "node": ">= 10.0.0" } }, - "node_modules/archiver": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", - "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", - "dev": true, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "license": "MIT", - "peer": true, "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.4", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">= 10" + "node": ">= 8" } }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "license": "MIT", - "peer": true, - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, "engines": { - "node": ">= 6" + "node": ">= 8" } }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "license": "MIT", - "peer": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/archiver-utils/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/@npmcli/agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", "dev": true, - "license": "MIT", - "peer": true, + "license": "ISC", "dependencies": { - "safe-buffer": "~5.1.0" + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "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/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "node_modules/@npmcli/agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, "license": "MIT", - "optional": true, "engines": { - "node": ">=0.8" + "node": ">= 14" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "license": "MIT", - "optional": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, - "node_modules/async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, "engines": { - "node": ">=0.12.0" + "node": ">= 14" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "node_modules/@npmcli/fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", "dev": true, "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "license": "MIT", "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "semver": "^7.3.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, + "license": "MIT", + "optional": true, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, + "node_modules/@radix-ui/number": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", + "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", "license": "MIT", "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", - "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" + "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { - "@babel/core": "^7.0.0 || ^8.0.0-0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true }, - { - "type": "consulting", - "url": "https://feross.org/support" + "@types/react-dom": { + "optional": true } - ], - "license": "MIT" + } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", - "peer": true, "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/bluebird-lst": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", - "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", - "dev": true, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", - "dependencies": { - "bluebird": "^3.5.5" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", - "optional": true + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } }, - "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", "license": "MIT", "dependencies": { - "fill-range": "^7.1.1" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/browserslist": { - "version": "4.25.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.2.tgz", - "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true } - ], + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001733", - "electron-to-chromium": "^1.5.199", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" }, - "bin": { - "browserslist": "cli.js" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", "dependencies": { - "node-int64": "^0.4.0" + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "node_modules/@radix-ui/react-label": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz", + "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true }, - { - "type": "consulting", - "url": "https://feross.org/support" + "@types/react-dom": { + "optional": true } - ], + } + }, + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", "license": "MIT", - "engines": { - "node": "*" + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/buffer-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", - "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", - "dev": true, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", "license": "MIT", - "engines": { - "node": ">=0.4" + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/builder-util": { - "version": "24.13.1", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.13.1.tgz", - "integrity": "sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==", - "dev": true, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", "license": "MIT", "dependencies": { - "@types/debug": "^4.1.6", - "7zip-bin": "~5.2.0", - "app-builder-bin": "4.0.0", - "bluebird-lst": "^1.0.9", - "builder-util-runtime": "9.2.4", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "debug": "^4.3.4", - "fs-extra": "^10.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-ci": "^3.0.0", - "js-yaml": "^4.1.0", - "source-map-support": "^0.5.19", - "stat-mode": "^1.0.0", - "temp-file": "^3.4.0" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/builder-util-runtime": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz", - "integrity": "sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==", - "dev": true, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" + "@radix-ui/react-slot": "1.2.3" }, - "engines": { - "node": ">=12.0.0" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/builder-util/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, + "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@radix-ui/react-compose-refs": "1.1.2" }, - "engines": { - "node": ">=12" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/builder-util/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", "license": "MIT", "dependencies": { - "universalify": "^2.0.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/builder-util/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, + "node_modules/@radix-ui/react-select": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", + "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, + "node_modules/@radix-ui/react-slider": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", + "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", "license": "MIT", - "engines": { - "node": ">=10.6.0" + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dev": true, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", "license": "MIT", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "@radix-ui/react-compose-refs": "1.1.2" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "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, + "node_modules/@radix-ui/react-switch": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "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, + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", + "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/@radix-ui/react-toast": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.15.tgz", + "integrity": "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001734", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001734.tgz", - "integrity": "sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "node_modules/@radix-ui/react-tooltip": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", + "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" + "@types/react-dom": { + "optional": true } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.3.tgz", + "integrity": "sha512-qyX8+93kK/7R5BEXPC2PjUt0+fS/VO2BVHjEHyIEWiYn88rcRBHmdLgoJjktBltgAf+NY7RfCGB1SoyKS/p9kg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.3.tgz", + "integrity": "sha512-6sHrL42bjt5dHQzJ12Q4vMKfN+kUnZ0atHHnv4V0Wd9JMTk7FDzSY35+7qbz3ypQYMBPANbpGK7JpnWNnhGt8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.3.tgz", + "integrity": "sha512-1ht2SpGIjEl2igJ9AbNpPIKzb1B5goXOcmtD0RFxnwNuMxqkR6AUaaErZz+4o+FKmzxcSNBOLrzsICZVNYa1Rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.3.tgz", + "integrity": "sha512-FYZ4iVunXxtT+CZqQoPVwPhH7549e/Gy7PIRRtq4t5f/vt54pX6eG9ebttRH6QSH7r/zxAFA4EZGlQ0h0FvXiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.3.tgz", + "integrity": "sha512-M/mwDCJ4wLsIgyxv2Lj7Len+UMHd4zAXu4GQ2UaCdksStglWhP61U3uowkaYBQBhVoNpwx5Hputo8eSqM7K82Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.3.tgz", + "integrity": "sha512-5jZT2c7jBCrMegKYTYTpni8mg8y3uY8gzeq2ndFOANwNuC/xJbVAoGKR9LhMDA0H3nIhvaqUoBEuJoICBudFrA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.3.tgz", + "integrity": "sha512-YeGUhkN1oA+iSPzzhEjVPS29YbViOr8s4lSsFaZKLHswgqP911xx25fPOyE9+khmN6W4VeM0aevbDp4kkEoHiA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.3.tgz", + "integrity": "sha512-eo0iOIOvcAlWB3Z3eh8pVM8hZ0oVkK3AjEM9nSrkSug2l15qHzF3TOwT0747omI6+CJJvl7drwZepT+re6Fy/w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.3.tgz", + "integrity": "sha512-DJay3ep76bKUDImmn//W5SvpjRN5LmK/ntWyeJs/dcnwiiHESd3N4uteK9FDLf0S0W8E6Y0sVRXpOCoQclQqNg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.3.tgz", + "integrity": "sha512-BKKWQkY2WgJ5MC/ayvIJTHjy0JUGb5efaHCUiG/39sSUvAYRBaO3+/EK0AZT1RF3pSj86O24GLLik9mAYu0IJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.3.tgz", + "integrity": "sha512-Q9nVlWtKAG7ISW80OiZGxTr6rYtyDSkauHUtvkQI6TNOJjFvpj4gcH+KaJihqYInnAzEEUetPQubRwHef4exVg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.3.tgz", + "integrity": "sha512-2H5LmhzrpC4fFRNwknzmmTvvyJPHwESoJgyReXeFoYYuIDfBhP29TEXOkCJE/KxHi27mj7wDUClNq78ue3QEBQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.3.tgz", + "integrity": "sha512-9S542V0ie9LCTznPYlvaeySwBeIEa7rDBgLHKZ5S9DBgcqdJYburabm8TqiqG6mrdTzfV5uttQRHcbKff9lWtA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.3.tgz", + "integrity": "sha512-ukxw+YH3XXpcezLgbJeasgxyTbdpnNAkrIlFGDl7t+pgCxZ89/6n1a+MxlY7CegU+nDgrgdqDelPRNQ/47zs0g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.3.tgz", + "integrity": "sha512-Iauw9UsTTvlF++FhghFJjqYxyXdggXsOqGpFBylaRopVpcbfyIIsNvkf9oGwfgIcf57z3m8+/oSYTo6HutBFNw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.3.tgz", + "integrity": "sha512-3OqKAHSEQXKdq9mQ4eajqUgNIK27VZPW3I26EP8miIzuKzCJ3aW3oEn2pzF+4/Hj/Moc0YDsOtBgT5bZ56/vcA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.3.tgz", + "integrity": "sha512-0CM8dSVzVIaqMcXIFej8zZrSFLnGrAE8qlNbbHfTw1EEPnFTg1U1ekI0JdzjPyzSfUsHWtodilQQG/RA55berA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.3.tgz", + "integrity": "sha512-+fgJE12FZMIgBaKIAGd45rxf+5ftcycANJRWk8Vz0NnMTM5rADPGuRFTYar+Mqs560xuART7XsX2lSACa1iOmQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.3.tgz", + "integrity": "sha512-tMD7NnbAolWPzQlJQJjVFh/fNH3K/KnA7K8gv2dJWCwwnaK6DFCYST1QXYWfu5V0cDwarWC8Sf/cfMHniNq21A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.3.tgz", + "integrity": "sha512-u5KsqxOxjEeIbn7bUK1MPM34jrnPwjeqgyin4/N6e/KzXKfpE9Mi0nCxcQjaM9lLmPcHmn/xx1yOjgTMtu1jWQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.3.tgz", + "integrity": "sha512-vo54aXwjpTtsAnb3ca7Yxs9t2INZg7QdXN/7yaoG7nPGbOBXYXQY41Km+S1Ov26vzOAzLcAjmMdjyEqS1JkVhw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.3.tgz", + "integrity": "sha512-HI+PIVZ+m+9AgpnY3pt6rinUdRYrGHvmVdsNQ4odNqQ/eRF78DVpMR7mOq7nW06QxpczibwBmeQzB68wJ+4W4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.3.tgz", + "integrity": "sha512-vRByotbdMo3Wdi+8oC2nVxtc3RkkFKrGaok+a62AT8lz/YBuQjaVYAS5Zcs3tPzW43Vsf9J0wehJbUY5xRSekA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.3.tgz", + "integrity": "sha512-POZHq7UeuzMJljC5NjKi8vKMFN6/5EOqcX1yGntNLp7rUTpBAXQ1hW8kWPFxYLv07QMcNM75xqVLGPWQq6TKFA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.3.tgz", + "integrity": "sha512-aPFONczE4fUFKNXszdvnd2GqKEYQdV5oEsIbKPujJmWlCI9zEsv1Otig8RKK+X9bed9gFUN6LAeN4ZcNuu4zjg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@swc/core": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.10.tgz", + "integrity": "sha512-udNofxftduMUEv7nqahl2nvodCiCDQ4Ge0ebzsEm6P8s0RC2tBM0Hqx0nNF5J/6t9uagFJyWIDjXy3IIWMHDJw==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.25" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.15.10", + "@swc/core-darwin-x64": "1.15.10", + "@swc/core-linux-arm-gnueabihf": "1.15.10", + "@swc/core-linux-arm64-gnu": "1.15.10", + "@swc/core-linux-arm64-musl": "1.15.10", + "@swc/core-linux-x64-gnu": "1.15.10", + "@swc/core-linux-x64-musl": "1.15.10", + "@swc/core-win32-arm64-msvc": "1.15.10", + "@swc/core-win32-ia32-msvc": "1.15.10", + "@swc/core-win32-x64-msvc": "1.15.10" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.10.tgz", + "integrity": "sha512-U72pGqmJYbjrLhMndIemZ7u9Q9owcJczGxwtfJlz/WwMaGYAV/g4nkGiUVk/+QSX8sFCAjanovcU1IUsP2YulA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.10.tgz", + "integrity": "sha512-NZpDXtwHH083L40xdyj1sY31MIwLgOxKfZEAGCI8xHXdHa+GWvEiVdGiu4qhkJctoHFzAEc7ZX3GN5phuJcPuQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.10.tgz", + "integrity": "sha512-ioieF5iuRziUF1HkH1gg1r93e055dAdeBAPGAk40VjqpL5/igPJ/WxFHGvc6WMLhUubSJI4S0AiZAAhEAp1jDg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.10.tgz", + "integrity": "sha512-tD6BClOrxSsNus9cJL7Gxdv7z7Y2hlyvZd9l0NQz+YXzmTWqnfzLpg16ovEI7gknH2AgDBB5ywOsqu8hUgSeEQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.10.tgz", + "integrity": "sha512-4uAHO3nbfbrTcmO/9YcVweTQdx5fN3l7ewwl5AEK4yoC4wXmoBTEPHAVdKNe4r9+xrTgd4BgyPsy0409OjjlMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.10.tgz", + "integrity": "sha512-W0h9ONNw1pVIA0cN7wtboOSTl4Jk3tHq+w2cMPQudu9/+3xoCxpFb9ZdehwCAk29IsvdWzGzY6P7dDVTyFwoqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.10.tgz", + "integrity": "sha512-XQNZlLZB62S8nAbw7pqoqwy91Ldy2RpaMRqdRN3T+tAg6Xg6FywXRKCsLh6IQOadr4p1+lGnqM/Wn35z5a/0Vw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.10.tgz", + "integrity": "sha512-qnAGrRv5Nj/DATxAmCnJQRXXQqnJwR0trxLndhoHoxGci9MuguNIjWahS0gw8YZFjgTinbTxOwzatkoySihnmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.10.tgz", + "integrity": "sha512-i4X/q8QSvzVlaRtv1xfnfl+hVKpCfiJ+9th484rh937fiEZKxZGf51C+uO0lfKDP1FfnT6C1yBYwHy7FLBVXFw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.10.tgz", + "integrity": "sha512-HvY8XUFuoTXn6lSccDLYFlXv1SU/PzYi4PyUqGT++WfTnbw/68N/7BdUZqglGRwiSqr0qhYt/EhmBpULj0J9rA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/types": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz", + "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz", + "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.90.19", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.19.tgz", + "integrity": "sha512-GLW5sjPVIvH491VV1ufddnfldyVB+teCnpPIvweEfkpRx7CfUmUGhoh9cdcUKBh/KwVxk22aNEDxeTsvmyB/WA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.90.19", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.19.tgz", + "integrity": "sha512-qTZRZ4QyTzQc+M0IzrbKHxSeISUmRB3RPGmao5bT+sI6ayxSRhn0FXEnT5Hg3as8SBFcRosrXXRFB+yAcxVxJQ==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.90.19" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", + "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/react": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.2.tgz", + "integrity": "sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "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/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.19.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.7.tgz", + "integrity": "sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/plist": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.27", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz", + "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/verror": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.11.tgz", + "integrity": "sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.1.tgz", + "integrity": "sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.53.1", + "@typescript-eslint/type-utils": "8.53.1", + "@typescript-eslint/utils": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.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.53.1", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.1.tgz", + "integrity": "sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.53.1", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1", + "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", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.1.tgz", + "integrity": "sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.53.1", + "@typescript-eslint/types": "^8.53.1", + "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.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.1.tgz", + "integrity": "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.1.tgz", + "integrity": "sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.1.tgz", + "integrity": "sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1", + "@typescript-eslint/utils": "8.53.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.1.tgz", + "integrity": "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==", + "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.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.1.tgz", + "integrity": "sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.53.1", + "@typescript-eslint/tsconfig-utils": "8.53.1", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.1.tgz", + "integrity": "sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.53.1", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.1.tgz", + "integrity": "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.1", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.11.0.tgz", + "integrity": "sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.27", + "@swc/core": "^1.12.11" + }, + "peerDependencies": { + "vite": "^4 || ^5 || ^6 || ^7" + } + }, + "node_modules/@vitest/expect": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/7zip-bin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", + "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "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/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-builder-bin": { + "version": "5.0.0-alpha.12", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-5.0.0-alpha.12.tgz", + "integrity": "sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/app-builder-lib": { + "version": "26.4.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.4.0.tgz", + "integrity": "sha512-Uas6hNe99KzP3xPWxh5LGlH8kWIVjZixzmMJHNB9+6hPyDpjc7NQMkVgi16rQDdpCFy22ZU5sp8ow7tvjeMgYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@develar/schema-utils": "~2.6.5", + "@electron/asar": "3.4.1", + "@electron/fuses": "^1.8.0", + "@electron/notarize": "2.5.0", + "@electron/osx-sign": "1.3.3", + "@electron/rebuild": "4.0.1", + "@electron/universal": "2.0.3", + "@malept/flatpak-bundler": "^0.4.0", + "@types/fs-extra": "9.0.13", + "async-exit-hook": "^2.0.1", + "builder-util": "26.3.4", + "builder-util-runtime": "9.5.1", + "chromium-pickle-js": "^0.2.0", + "ci-info": "4.3.1", + "debug": "^4.3.4", + "dotenv": "^16.4.5", + "dotenv-expand": "^11.0.6", + "ejs": "^3.1.8", + "electron-publish": "26.3.4", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "isbinaryfile": "^5.0.0", + "jiti": "^2.4.2", + "js-yaml": "^4.1.0", + "json5": "^2.2.3", + "lazy-val": "^1.0.5", + "minimatch": "^10.0.3", + "plist": "3.1.0", + "resedit": "^1.7.0", + "semver": "~7.7.3", + "tar": "^6.1.12", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0", + "which": "^5.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "dmg-builder": "26.4.0", + "electron-builder-squirrel-windows": "26.4.0" + } + }, + "node_modules/app-builder-lib/node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/app-builder-lib/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/app-builder-lib/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/app-builder-lib/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/app-builder-lib/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "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==", + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.23", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", + "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001760", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.17", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.17.tgz", + "integrity": "sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builder-util": { + "version": "26.3.4", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.3.4.tgz", + "integrity": "sha512-aRn88mYMktHxzdqDMF6Ayj0rKoX+ZogJ75Ck7RrIqbY/ad0HBvnS2xA4uHfzrGr5D2aLL3vU6OBEH4p0KMV2XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.6", + "7zip-bin": "~5.2.0", + "app-builder-bin": "5.0.0-alpha.12", + "builder-util-runtime": "9.5.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.6", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "js-yaml": "^4.1.0", + "sanitize-filename": "^1.6.3", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", + "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/builder-util/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/builder-util/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/builder-util/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/builder-util/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/builder-util/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cacache": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/tar": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.6.tgz", + "integrity": "sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cacache/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001765", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz", + "integrity": "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "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==", + "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/check-error": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "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==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/concurrently": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", + "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", + "license": "MIT", + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.3", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/cross-dirname": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cross-dirname/-/cross-dirname-0.1.0.tgz", + "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "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.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "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", + "optional": true, + "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", + "optional": true, + "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/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/dir-compare": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", + "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5", + "p-limit": "^3.1.0 " + } + }, + "node_modules/dir-compare/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dir-compare/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/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dmg-builder": { + "version": "26.4.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.4.0.tgz", + "integrity": "sha512-ce4Ogns4VMeisIuCSK0C62umG0lFy012jd8LMZ6w/veHUeX4fqfDrGe+HTWALAEwK6JwKP+dhPvizhArSOsFbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "26.4.0", + "builder-util": "26.3.4", + "fs-extra": "^10.1.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" + }, + "optionalDependencies": { + "dmg-license": "^1.0.11" + } + }, + "node_modules/dmg-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dmg-builder/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/dmg-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" ], - "license": "CC-BY-4.0" + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://dotenvx.com" } }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "license": "ISC", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/chromium-pickle-js": { + "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", - "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, "license": "MIT" }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/cjs-module-lexer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "node_modules/electron": { + "version": "40.0.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-40.0.0.tgz", + "integrity": "sha512-UyBy5yJ0/wm4gNugCtNPjvddjAknMTuXR2aCHioXicH7aKRKGDBPp4xqTEi/doVcB3R+MN3wfU9o8d/9pwgK2A==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "optional": true, "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "@electron/get": "^2.0.0", + "@types/node": "^24.9.0", + "extract-zip": "^2.0.1" }, - "engines": { - "node": ">=8" + "bin": { + "electron": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 12.20.55" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/electron-builder": { + "version": "26.4.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.4.0.tgz", + "integrity": "sha512-FCUqvdq2AULL+Db2SUGgjOYTbrgkPxZtCjqIZGnjH9p29pTWyesQqBIfvQBKa6ewqde87aWl49n/WyI/NyUBog==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "app-builder-lib": "26.4.0", + "builder-util": "26.3.4", + "builder-util-runtime": "9.5.1", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "dmg-builder": "26.4.0", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "simple-update-notifier": "2.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" }, "engines": { - "node": ">=12" + "node": ">=14.0.0" } }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "node_modules/electron-builder-squirrel-windows": { + "version": "26.4.0", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.4.0.tgz", + "integrity": "sha512-7dvalY38xBzWNaoOJ4sqy2aGIEpl2S1gLPkkB0MHu1Hu5xKQ82il1mKSFlXs6fLpXUso/NmyjdHGlSHDRoG8/w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "app-builder-lib": "26.4.0", + "builder-util": "26.3.4", + "electron-winstaller": "5.4.0" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "node_modules/electron-builder/node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">=8" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "node_modules/electron-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "license": "MIT" - }, - "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==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=12" } }, - "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==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/electron-builder/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" + "universalify": "^2.0.0" }, - "engines": { - "node": ">= 0.8" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "node_modules/electron-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 6" + "node": ">= 10.0.0" } }, - "node_modules/compare-version": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", - "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "node_modules/electron-publish": { + "version": "26.3.4", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.3.4.tgz", + "integrity": "sha512-5/ouDPb73SkKuay2EXisPG60LTFTMNHWo2WLrK5GDphnWK9UC+yzYrzVeydj078Yk4WUXi0+TaaZsNd6Zt5k/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^9.0.11", + "builder-util": "26.3.4", + "builder-util-runtime": "9.5.1", + "chalk": "^4.1.2", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-publish/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/compress-commons": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", - "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "node_modules/electron-publish/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-publish/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, "engines": { - "node": ">= 10" + "node": ">= 10.0.0" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "node_modules/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/config-file-ts": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.6.tgz", - "integrity": "sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==", - "dev": true, + "node_modules/electron-updater": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.7.3.tgz", + "integrity": "sha512-EgkT8Z9noqXKbwc3u5FkJA+r48jwZ5DTUiOkJMOTEEH//n5Am6wfQGz7nvSFEA2oIAMv9jRzn5JKTyWeSKOPgg==", "license": "MIT", "dependencies": { - "glob": "^10.3.10", - "typescript": "^5.3.3" + "builder-util-runtime": "9.5.1", + "fs-extra": "^10.1.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "lodash.escaperegexp": "^4.1.2", + "lodash.isequal": "^4.5.0", + "semver": "~7.7.3", + "tiny-typed-emitter": "^2.1.0" } }, - "node_modules/config-file-ts/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", + "node_modules/electron-updater/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=12" } }, - "node_modules/config-file-ts/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", + "node_modules/electron-updater/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/config-file-ts/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, + "node_modules/electron-updater/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10" } }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, + "node_modules/electron-updater/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "license": "MIT", - "optional": true, - "dependencies": { - "buffer": "^5.1.0" - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "crc32": "bin/crc32.njs" - }, "engines": { - "node": ">=0.8" + "node": ">= 10.0.0" } }, - "node_modules/crc32-stream": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", - "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "node_modules/electron-winstaller": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.4.0.tgz", + "integrity": "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==", "dev": true, + "hasInstallScript": true, "license": "MIT", "peer": true, "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" + "@electron/asar": "^3.2.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.21", + "temp": "^0.9.0" }, "engines": { - "node": ">= 10" + "node": ">=8.0.0" + }, + "optionalDependencies": { + "@electron/windows-sign": "^1.1.2" } }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "node_modules/electron-winstaller/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6 <7 || >=8" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/electron/node_modules/@types/node": { + "version": "24.10.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.9.tgz", + "integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" + "undici-types": "~7.16.0" } }, - "node_modules/crypto-js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "node_modules/electron/node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, "license": "MIT" }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" + "iconv-lite": "^0.6.2" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "license": "MIT", "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, "license": "MIT" }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { - "mimic-response": "^3.1.0" + "es-errors": "^1.3.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.4" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "optional": true }, - "node_modules/dedent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" + "bin": { + "esbuild": "bin/esbuild" }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" } }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "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/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==", + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "license": "MIT", - "optional": true, + "license": "BSD-2-Clause", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "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==", + "node_modules/eslint": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "peerDependencies": { + "eslint": ">=8.40" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "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": "MIT", - "optional": 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/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "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": "MIT", + "license": "Apache-2.0", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/dijkstrajs": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", - "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==", - "license": "MIT" - }, - "node_modules/dir-compare": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-3.3.0.tgz", - "integrity": "sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==", + "node_modules/eslint/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": { - "buffer-equal": "^1.0.0", - "minimatch": "^3.0.4" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dir-compare/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/eslint/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": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dir-compare/node_modules/minimatch": { + "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", @@ -3218,896 +6797,991 @@ "node": "*" } }, - "node_modules/dmg-builder": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.13.3.tgz", - "integrity": "sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==", + "node_modules/eslint/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": { - "app-builder-lib": "24.13.3", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", - "fs-extra": "^10.1.0", - "iconv-lite": "^0.6.2", - "js-yaml": "^4.1.0" + "yocto-queue": "^0.1.0" }, - "optionalDependencies": { - "dmg-license": "^1.0.11" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dmg-builder/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/eslint/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": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dmg-builder/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "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": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "universalify": "^2.0.0" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/dmg-builder/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=4" } }, - "node_modules/dmg-license": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", - "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "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": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "license": "BSD-3-Clause", "dependencies": { - "@types/plist": "^3.0.1", - "@types/verror": "^1.10.3", - "ajv": "^6.10.0", - "crc": "^3.8.0", - "iconv-corefoundation": "^1.1.7", - "plist": "^3.0.4", - "smart-buffer": "^4.0.2", - "verror": "^1.10.0" - }, - "bin": { - "dmg-license": "bin/dmg-license.js" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=8" + "node": ">=0.10" } }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", + "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": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "webidl-conversions": "^7.0.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=12" + "node": ">=4.0" } }, - "node_modules/dotenv": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", - "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "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": ">=10" + "node": ">=4.0" } }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true, - "license": "BSD-2-Clause" - }, - "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==", + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, + "@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.4" + "node": ">=0.10.0" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", "dev": true, - "license": "MIT" - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" + "engines": { + "node": ">=12.0.0" } }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", "dev": true, - "license": "Apache-2.0", + "license": "Apache-2.0" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "jake": "^10.8.5" + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" }, "bin": { - "ejs": "bin/cli.js" + "extract-zip": "cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" } }, - "node_modules/electron": { - "version": "28.3.3", - "resolved": "https://registry.npmjs.org/electron/-/electron-28.3.3.tgz", - "integrity": "sha512-ObKMLSPNhomtCOBAxFS8P2DW/4umkh72ouZUlUKzXGtYuPzgr1SYhskhFWgzAsPtUzhL2CzyV2sfbHcEW4CXqw==", + "node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", "dev": true, - "hasInstallScript": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "optional": true + }, + "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-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", "dependencies": { - "@electron/get": "^2.0.0", - "@types/node": "^18.11.18", - "extract-zip": "^2.0.1" - }, - "bin": { - "electron": "cli.js" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" }, "engines": { - "node": ">= 12.20.55" + "node": ">=8.6.0" } }, - "node_modules/electron-builder": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.13.3.tgz", - "integrity": "sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==", - "dev": true, - "license": "MIT", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", "dependencies": { - "app-builder-lib": "24.13.3", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", - "chalk": "^4.1.2", - "dmg-builder": "24.13.3", - "fs-extra": "^10.1.0", - "is-ci": "^3.0.0", - "lazy-val": "^1.0.5", - "read-config-file": "6.3.2", - "simple-update-notifier": "2.0.0", - "yargs": "^17.6.2" - }, - "bin": { - "electron-builder": "cli.js", - "install-app-deps": "install-app-deps.js" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=14.0.0" + "node": ">= 6" } }, - "node_modules/electron-builder-squirrel-windows": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-24.13.3.tgz", - "integrity": "sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg==", + "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", - "peer": 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/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "license": "ISC", "dependencies": { - "app-builder-lib": "24.13.3", - "archiver": "^5.3.1", - "builder-util": "24.13.1", - "fs-extra": "^10.1.0" + "reusify": "^1.0.4" } }, - "node_modules/electron-builder-squirrel-windows/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" + "pend": "~1.2.0" } }, - "node_modules/electron-builder-squirrel-windows/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "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", - "peer": true, "dependencies": { - "universalify": "^2.0.0" + "flat-cache": "^4.0.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/electron-builder-squirrel-windows/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 10.0.0" + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" } }, - "node_modules/electron-builder/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" + "balanced-match": "^1.0.0" } }, - "node_modules/electron-builder/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "universalify": "^2.0.0" + "brace-expansion": "^2.0.1" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=10" } }, - "node_modules/electron-builder/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=8" } }, - "node_modules/electron-publish": { - "version": "24.13.1", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.13.1.tgz", - "integrity": "sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==", + "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": { - "@types/fs-extra": "^9.0.11", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", - "chalk": "^4.1.2", - "fs-extra": "^10.1.0", - "lazy-val": "^1.0.5", - "mime": "^2.5.2" + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" } }, - "node_modules/electron-publish/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, "engines": { - "node": ">=12" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/electron-publish/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "universalify": "^2.0.0" + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/electron-publish/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">= 10.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/electron-to-chromium": { - "version": "1.5.200", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.200.tgz", - "integrity": "sha512-rFCxROw7aOe4uPTfIAx+rXv9cEcGx+buAF4npnhtTqCJk5KDFRnh3+KYj7rdVh6lsFt5/aPs+Irj9rZ33WMA7w==", - "dev": true, - "license": "ISC" + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": "*" }, "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/rawify" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "license": "MIT", "dependencies": { - "once": "^1.4.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" } }, - "node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" + "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", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { - "node": ">= 0.4" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/es-errors": { + "node_modules/get-intrinsic": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "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, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "MIT", - "optional": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=10" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "license": "BSD-2-Clause", + "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==", + "license": "ISC", "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=6.0" + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, - "optionalDependencies": { - "source-map": "~0.6.1" + "engines": { + "node": "*" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" }, "engines": { - "node": ">=4" + "node": ">=10.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==", + "node_modules/global-agent/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=4.0" + "node": ">=10" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "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", + "optional": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, + "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==", + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "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", + "optional": true, "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" + "es-define-property": "^1.0.0" }, + "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==", + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" + "has-symbols": "^1.0.3" }, - "bin": { - "extract-zip": "cli.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" }, "engines": { - "node": ">= 10.17.0" + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "engines": { + "node": ">=10" } }, - "node_modules/extsprintf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", - "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, - "engines": [ - "node >=0.6.0" - ], "license": "MIT", - "optional": true + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } }, - "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==", + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "dev": true, - "license": "MIT" + "license": "BSD-2-Clause" }, - "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==", + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "bser": "2.1.1" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "license": "MIT", "dependencies": { - "pend": "~1.2.0" + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "node_modules/iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "dependencies": { - "minimatch": "^5.0.1" + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + }, + "engines": { + "node": "^8.11.2 || >=10" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "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", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 4" } }, - "node_modules/foreground-child": { + "node_modules/import-fresh": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=14" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "node_modules/import-fresh/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", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "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", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=0.8.19" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "license": "ISC" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/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, + "node_modules/input-otp": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.2.tgz", + "integrity": "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, - "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==", + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">= 12" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=8" } }, - "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, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "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" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -4116,1164 +7790,1089 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "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, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "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", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/isbinaryfile": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", + "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "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", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } + "license": "ISC" }, - "node_modules/global-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", - "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, - "license": "BSD-3-Clause", - "optional": true, + "license": "BlueOak-1.0.0", "dependencies": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" + "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=10.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/global-agent/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", "dev": true, - "license": "ISC", - "optional": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, "bin": { - "semver": "bin/semver.js" + "jake": "bin/cli.js" }, "engines": { "node": ">=10" } }, - "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, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "devOptional": true, "license": "MIT", - "optional": true, + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/joi": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-18.0.2.tgz", + "integrity": "sha512-RuCOQMIt78LWnktPoeBL0GErkNaJPTBGcYuyaBvUOQSpcpcLfWrHPPihYdOGbV5pam9VTWbeoF7TsGiHugcjGA==", + "license": "BSD-3-Clause", "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "@hapi/address": "^5.1.1", + "@hapi/formula": "^3.0.2", + "@hapi/hoek": "^11.0.7", + "@hapi/pinpoint": "^2.0.1", + "@hapi/tlds": "^1.1.1", + "@hapi/topo": "^6.0.2", + "@standard-schema/spec": "^1.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 20" } }, - "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, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "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==", "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "dev": true, "license": "MIT", "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=10.19.0" + "node": ">=14" }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "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": "ISC" + "license": "MIT" }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "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/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC", + "optional": true + }, + "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": ">=8" + "node": ">=6" } }, - "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==", + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "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==", + "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", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "json-buffer": "3.0.1" } }, - "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==", + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "license": "MIT" + }, + "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": { - "has-symbols": "^1.0.3" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8.0" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/hosted-git-info": { + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "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/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, + "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==", "license": "MIT", "dependencies": { - "whatwg-encoding": "^2.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "engines": { - "node": ">=12" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", "dev": true, "license": "MIT" }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, - "license": "BSD-2-Clause" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "node_modules/lucide-react": { + "version": "0.462.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.462.0.tgz", + "integrity": "sha512-NTL7EbAao9IFtuSivSZgrAh4fZd09Lr+6MTkqIxuHaH2nnYiYIzXPo06cOxHg9wKLdj6LL8TByG4qpePqwgx/g==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" + "peer": true, + "bin": { + "lz-string": "bin/bin.js" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/make-fetch-happen": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", "dev": true, - "license": "Apache-2.0", + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, "engines": { - "node": ">=10.17.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/iconv-corefoundation": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", - "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", "dev": true, "license": "MIT", "optional": true, - "os": [ - "darwin" - ], "dependencies": { - "cli-truncate": "^2.1.0", - "node-addon-api": "^1.6.3" + "escape-string-regexp": "^4.0.0" }, "engines": { - "node": "^8.11.2 || >=10" + "node": ">=10" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", "bin": { - "import-local-fixture": "fixtures/cli.js" + "mime": "cli.js" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0.0" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", "engines": { - "node": ">=0.8.19" + "node": ">= 0.6" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" + "engines": { + "node": ">=4" } }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "hasown": "^2.0.2" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "license": "MIT", - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=0.12.0" + "node": ">=16 || 14 >=14.17" } }, - "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", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-stream": { + "node_modules/minipass-collect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=16 || 14 >=14.17" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/isbinaryfile": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.4.tgz", - "integrity": "sha512-YKBKVkKhty7s8rxddb40oOkuP0NbaeXrQvLin6QMHL7Ypiy2RW9LwOVrVgZRyOrhQlayMd9t+D8yDy8MKFTSDQ==", + "node_modules/minipass-fetch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", "dev": true, "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, "engines": { - "node": ">= 18.0.0" + "node": "^18.17.0 || >=20.5.0" }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "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/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" + "yallist": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "minipass": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "minipass": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "minipass": "^7.1.2" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "engines": { + "node": ">= 18" } }, - "node_modules/jake": { - "version": "10.9.4", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", - "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.6", - "filelist": "^1.0.4", - "picocolors": "^1.1.1" - }, + "license": "MIT", "bin": { - "jake": "bin/cli.js" + "mkdirp": "bin/cmd.js" }, "engines": { "node": ">=10" } }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "license": "MIT", "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", "bin": { - "jest": "bin/jest.js" + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "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/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "dev": true, "license": "MIT", - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.6" } }, - "node_modules/jest-changed-files/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==", + "node_modules/node-abi": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.26.0.tgz", + "integrity": "sha512-8QwIZqikRvDIkXS2S93LjzhsSPJuIbfaMETWH+Bx8oOT9Sa9UsUtBFQlc3gBNd1+QINjaTloitXr1W3dQLi9Iw==", "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "semver": "^7.6.3" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=22.12.0" } }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus/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==", + "node_modules/node-abi/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-api-version": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.1.tgz", + "integrity": "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, + "semver": "^7.3.5" + } + }, + "node_modules/node-api-version/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", "bin": { - "jest": "bin/jest.js" + "semver": "bin/semver.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=10" } }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "node_modules/node-gyp": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.5.0.tgz", + "integrity": "sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" + "bin": { + "node-gyp": "bin/node-gyp.js" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "node_modules/node-gyp/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" } }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, + "license": "ISC", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16" } }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "node_modules/node-gyp/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-environment-jsdom": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", - "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "node_modules/node-gyp/node_modules/tar": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.6.tgz", + "integrity": "sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0", - "jsdom": "^20.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": ">=18" } }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "node_modules/node-gyp/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/node-gyp/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" } }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "dev": true, + "license": "ISC", "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" + "abbrev": "^3.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "nopt": "bin/nopt.js" }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "node_modules/nwsapi": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz", + "integrity": "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==", "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==", "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 6" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "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", + "optional": true, "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "license": "ISC", + "dependencies": { + "wrappy": "1" } }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "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": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" + "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": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.8.0" } }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/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==", + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "engines": { "node": ">=10" @@ -5282,2382 +8881,2816 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "engines": { + "node": ">=8" } }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "license": "BlueOak-1.0.0" }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "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": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "callsites": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" + "entities": "^6.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "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": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "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", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "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==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "has-flag": "^4.0.0" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.18" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } + "license": "MIT" }, - "node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", "dev": true, "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" - }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": ">= 14.16" } }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "node_modules/pe-library": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", + "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==", "dev": true, "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, "engines": { - "node": ">=6" + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" } }, - "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==", + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true, "license": "MIT" }, - "node_modules/json-parse-even-better-errors": { + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "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/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "license": "ISC", - "optional": true + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", "dev": true, "license": "MIT", - "bin": { - "json5": "lib/cli.js" + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" }, "engines": { - "node": ">=6" + "node": ">=10.4.0" } }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "license": "MIT", "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" }, "engines": { - "node": ">=12", - "npm": ">=6" + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" } }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" }, "engines": { - "node": ">=10" + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" } }, - "node_modules/jwa": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", - "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" } }, - "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, + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "license": "MIT", "dependencies": { - "json-buffer": "3.0.1" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/lazy-val": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", - "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", - "dev": true, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "license": "MIT" }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "node_modules/postject": { + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz", + "integrity": "sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==", "dev": true, "license": "MIT", + "optional": true, "peer": true, "dependencies": { - "readable-stream": "^2.0.5" + "commander": "^9.4.0" + }, + "bin": { + "postject": "dist/cli.js" }, "engines": { - "node": ">= 0.6.3" + "node": ">=14.0.0" } }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/postject/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, "license": "MIT", + "optional": true, "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "engines": { + "node": "^12.20.0 || >=14" } }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "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", - "peer": true + "engines": { + "node": ">= 0.8.0" + } }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.4.0" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "err-code": "^2.0.2", + "retry": "^0.12.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", "dev": true, "license": "MIT", - "peer": true + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", - "peer": true + "engines": { + "node": ">=6" + } }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "license": "MIT" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "license": "MIT" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "license": "MIT" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", "license": "MIT" }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT" }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, "license": "MIT", - "peer": true + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "react": "^18.3.1" } }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, + "node_modules/react-remove-scroll": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", "license": "MIT", "dependencies": { - "semver": "^7.5.3" + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" }, "engines": { "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" }, "engines": { "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" + "node_modules/react-resizable-panels": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.1.9.tgz", + "integrity": "sha512-z77+X08YDIrgAes4jl8xhnUu1LNIRp4+E7cv4xHmLOxxUPO/ML7PSrE813b90vj7xvQ1lcf7g2uA9GeMZonjhQ==", + "license": "MIT", + "peerDependencies": { + "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, - "node_modules/marked": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", - "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", "license": "MIT", - "bin": { - "marked": "bin/marked.js" + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" }, "engines": { - "node": ">= 18" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "node_modules/read-binary-file-arch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", + "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "escape-string-regexp": "^4.0.0" + "debug": "^4.3.4" }, - "engines": { - "node": ">=10" + "bin": { + "read-binary-file-arch": "cli.js" } }, - "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, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "pify": "^2.3.0" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "license": "MIT", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=8.6" + "node": ">=8.10.0" } }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "license": "MIT", - "bin": { - "mime": "cli.js" + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=8" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resedit": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz", + "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==", "dev": true, "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "pe-library": "^0.4.1" }, "engines": { - "node": ">= 0.6" + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 4" } }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", "engines": { - "node": ">=8" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "license": "MIT", + "license": "ISC", + "peer": true, "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">= 8" + "bin": { + "rimraf": "bin.js" } }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", + "optional": true, "dependencies": { - "yallist": "^4.0.0" + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" }, "engines": { - "node": ">=8" + "node": ">=8.0" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/rollup": { + "version": "4.55.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.3.tgz", + "integrity": "sha512-y9yUpfQvetAjiDLtNMf1hL9NXchIJgWt6zIKeoB+tCd3npX08Eqfzg60V9DhIGVMtQ0AlMkFw5xa+AQ37zxnAA==", "dev": true, "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, "bin": { - "mkdirp": "bin/cmd.js" + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=10" + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.55.3", + "@rollup/rollup-android-arm64": "4.55.3", + "@rollup/rollup-darwin-arm64": "4.55.3", + "@rollup/rollup-darwin-x64": "4.55.3", + "@rollup/rollup-freebsd-arm64": "4.55.3", + "@rollup/rollup-freebsd-x64": "4.55.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.55.3", + "@rollup/rollup-linux-arm-musleabihf": "4.55.3", + "@rollup/rollup-linux-arm64-gnu": "4.55.3", + "@rollup/rollup-linux-arm64-musl": "4.55.3", + "@rollup/rollup-linux-loong64-gnu": "4.55.3", + "@rollup/rollup-linux-loong64-musl": "4.55.3", + "@rollup/rollup-linux-ppc64-gnu": "4.55.3", + "@rollup/rollup-linux-ppc64-musl": "4.55.3", + "@rollup/rollup-linux-riscv64-gnu": "4.55.3", + "@rollup/rollup-linux-riscv64-musl": "4.55.3", + "@rollup/rollup-linux-s390x-gnu": "4.55.3", + "@rollup/rollup-linux-x64-gnu": "4.55.3", + "@rollup/rollup-linux-x64-musl": "4.55.3", + "@rollup/rollup-openbsd-x64": "4.55.3", + "@rollup/rollup-openharmony-arm64": "4.55.3", + "@rollup/rollup-win32-arm64-msvc": "4.55.3", + "@rollup/rollup-win32-ia32-msvc": "4.55.3", + "@rollup/rollup-win32-x64-gnu": "4.55.3", + "@rollup/rollup-win32-x64-msvc": "4.55.3", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "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==", + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT" }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "license": "MIT" }, - "node_modules/node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", "dev": true, - "license": "MIT", - "optional": true + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } }, - "node_modules/node-cron": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz", - "integrity": "sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==", + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, "license": "ISC", "dependencies": { - "uuid": "8.3.2" + "xmlchars": "^2.2.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=v12.22.7" } }, - "node_modules/node-cron/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "dependencies": { + "loose-envify": "^1.1.0" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "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": "MIT" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "dev": true, "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", "dev": true, - "license": "MIT", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, "engines": { - "node": ">=10" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "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": { - "path-key": "^3.0.0" + "shebang-regex": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/nwsapi": { - "version": "2.2.21", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz", - "integrity": "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==", + "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" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "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, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", "license": "MIT", - "optional": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } + "license": "ISC" }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "p-limit": "^2.2.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, "license": "MIT", "dependencies": { - "entities": "^6.0.0" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": ">= 14" } }, - "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==", + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, + "node_modules/sonner": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.4.tgz", + "integrity": "sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==", "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "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==", + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true, - "license": "MIT" + "license": "BSD-3-Clause", + "optional": true }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "node_modules/ssri": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, "license": "MIT" }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", "dev": true, "license": "MIT", "engines": { "node": ">= 6" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/plist": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", - "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "license": "MIT", "dependencies": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.5.1", - "xmlbuilder": "^15.1.1" - }, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/pngjs": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", - "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", - "license": "MIT", - "engines": { - "node": ">=10.13.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/psl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", - "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "license": "MIT", "dependencies": { - "punycode": "^2.3.1" + "min-indent": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/lupomontero" + "engines": { + "node": ">=8" } }, - "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "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", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/strip-literal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], "license": "MIT" }, - "node_modules/qrcode": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.4.tgz", - "integrity": "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==", + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", "license": "MIT", "dependencies": { - "dijkstrajs": "^1.0.1", - "pngjs": "^5.0.0", - "yargs": "^15.3.1" + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" }, "bin": { - "qrcode": "bin/qrcode" + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" }, "engines": { - "node": ">=10.13.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/qrcode/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" } }, - "node_modules/qrcode/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "license": "MIT", + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "debug": "^4.1.0" }, "engines": { - "node": ">=8" + "node": ">= 8.0" } }, - "node_modules/qrcode/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "license": "ISC" - }, - "node_modules/qrcode/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "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==", "license": "MIT", "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/qrcode/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, + "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==", + "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true, "license": "MIT" }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, + "node_modules/tailwind-merge": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", + "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", "license": "MIT", - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } }, - "node_modules/read-config-file": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.3.2.tgz", - "integrity": "sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==", - "dev": true, + "node_modules/tailwindcss/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "license": "MIT", "dependencies": { - "config-file-ts": "^0.2.4", - "dotenv": "^9.0.2", - "dotenv-expand": "^5.1.0", - "js-yaml": "^4.1.0", - "json5": "^2.2.0", - "lazy-val": "^1.0.4" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=12.0.0" + "node": ">=4" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me", "dev": true, - "license": "MIT", - "peer": true, + "license": "ISC", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/readdir-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, - "license": "Apache-2.0", - "peer": true, + "license": "ISC", "dependencies": { - "minimatch": "^5.1.0" + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "license": "ISC" - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, - "license": "MIT" + "license": "ISC", + "engines": { + "node": ">=8" + } }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "node_modules/tar/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" + } + }, + "node_modules/temp": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "node_modules/temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "node_modules/temp-file/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "license": "MIT", "dependencies": { - "resolve-from": "^5.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/temp-file/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "node_modules/temp-file/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 10.0.0" } }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "node_modules/temp/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "lowercase-keys": "^2.0.0" + "minimist": "^1.2.6" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "license": "MIT", - "engines": { - "node": ">= 4" + "dependencies": { + "any-promise": "^1.0.0" } }, - "node_modules/roarr": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", - "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", "dependencies": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" + "thenify": ">= 3.1.0 < 4" }, "engines": { - "node": ">=8.0" + "node": ">=0.8" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "node_modules/tiny-async-pool": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz", + "integrity": "sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "semver": "^5.5.0" + } }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "node_modules/tiny-async-pool/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "WTFPL OR ISC", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "node_modules/tiny-typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", + "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==", + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", "dependencies": { - "xmlchars": "^2.2.0" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { - "node": ">=v12.22.7" - } - }, - "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": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "license": "MIT", - "optional": true + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } }, - "node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", - "optional": true, - "dependencies": { - "type-fest": "^0.13.1" - }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "license": "ISC" + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } }, - "node_modules/shebang-command": { + "node_modules/tinyrainbow": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", "dev": true, "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=14.0.0" } }, - "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==", + "node_modules/tinyspy": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=14.0.0" } }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=14.14" } }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.5.3" + "tmp": "^0.2.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=8.0" } }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 4.0.0" } }, - "node_modules/slice-ansi": { + "node_modules/tr46": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "punycode": "^2.1.1" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "license": "MIT", - "optional": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "bin": { + "tree-kill": "cli.js" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", "dev": true, "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" } }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { - "escape-string-regexp": "^2.0.0" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=10" + "node": ">= 0.8.0" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, - "license": "MIT", + "license": "(MIT OR CC0-1.0)", + "optional": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stat-mode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", - "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">= 6" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.2.0" + "node": ">=14.17" } }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "node_modules/typescript-eslint": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.53.1.tgz", + "integrity": "sha512-gB+EVQfP5RDElh9ittfXlhZJdjSU4jUSTyE2+ia8CYyNvet4ElfaLlAIqDvQV9JPknKx0jQH1racTYe/4LaLSg==", "dev": true, "license": "MIT", "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" + "@typescript-eslint/eslint-plugin": "8.53.1", + "@typescript-eslint/parser": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1", + "@typescript-eslint/utils": "8.53.1" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unique-filename": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", + "dev": true, + "license": "ISC", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "unique-slug": "^5.0.0" }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/unique-slug": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "imurmurhash": "^0.1.4" }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 4.0.0" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, - "engines": { - "node": ">=8" + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "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": "MIT", - "engines": { - "node": ">=8" + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/sumchecker": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", - "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, - "license": "Apache-2.0", + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", "dependencies": { - "debug": "^4.1.0" + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" }, "engines": { - "node": ">= 8.0" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "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==", + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "has-flag": "^4.0.0" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" }, "engines": { - "node": ">=8" + "node": ">=0.6.0" } }, - "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==", + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { - "node": ">= 0.4" + "node": "^18.0.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/symbol-tree": { + "node_modules/vite-node": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" }, "engines": { - "node": ">=10" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/temp-file": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", - "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "async-exit-hook": "^2.0.1", - "fs-extra": "^10.0.0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/temp-file/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { "node": ">=12" } }, - "node_modules/temp-file/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/temp-file/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 10.0.0" + "node": ">=12" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=14.14" + "node": ">=12" } }, - "node_modules/tmp-promise": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "tmp": "^0.2.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8.0" + "node": ">=12" } }, - "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 4.0.0" + "node": ">=12" } }, - "node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], "dev": true, "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=12" } }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "WTFPL", - "dependencies": { - "utf8-byte-length": "^1.0.1" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.17" + "node": ">=12" } }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">= 4.0.0" + "node": ">=12" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" ], + "dev": true, "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/utf8-byte-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", - "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "peer": true + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" ], + "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=10.12.0" + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/vitest": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.4", + "@vitest/ui": "3.2.4", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } } }, - "node_modules/verror": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", - "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "node_modules/vitest/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, "engines": { - "node": ">=0.6.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/w3c-xmlserializer": { @@ -7673,14 +11706,33 @@ "node": ">=14" } }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "node_modules/wait-on": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-9.0.3.tgz", + "integrity": "sha512-13zBnyYvFDW1rBvWiJ6Av3ymAaq8EDQuvxZnPIw3g04UqGi4TyoIJABmfJ6zrvKo9yeFQExNkOk7idQbDJcuKA==", + "license": "MIT", + "dependencies": { + "axios": "^1.13.2", + "joi": "^18.0.1", + "lodash": "^4.17.21", + "minimist": "^1.2.8", + "rxjs": "^7.8.2" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "makeerror": "1.0.12" + "defaults": "^1.0.3" } }, "node_modules/webidl-conversions": { @@ -7746,17 +11798,37 @@ "node": ">= 8" } }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "license": "ISC" + "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", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -7796,27 +11868,6 @@ "dev": true, "license": "ISC" }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, "node_modules/ws": { "version": "8.18.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", @@ -7870,7 +11921,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -7887,7 +11937,6 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -7906,7 +11955,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -7935,45 +11983,6 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/zip-stream": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", - "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "archiver-utils": "^3.0.4", - "compress-commons": "^4.1.2", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/zip-stream/node_modules/archiver-utils": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", - "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "glob": "^7.2.3", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } } } } diff --git a/package.json b/package.json index e7bb24c0..3ee71b41 100644 --- a/package.json +++ b/package.json @@ -1,77 +1,131 @@ { - "name": "dev-tools-desktop", + "name": "devtools", + "private": true, "version": "1.0.0", - "description": "Desktop version of dev-tool.dev - Ultimate Developer Toolkit", - "main": "src/main.js", - "scripts": { - "start": "electron .", - "dev": "electron . --dev", - "build": "electron-builder", - "pack": "electron-builder --dir", - "dist": "electron-builder --publish=never", - "test": "jest", - "test:watch": "jest --watch", - "test:coverage": "jest --coverage", - "security-check": "./scripts/security-check.sh", - "pre-commit": "npm run security-check" - }, - "keywords": [ - "electron", - "developer-tools", - "utilities", - "json", - "base64", - "uuid", - "converter" - ], - "author": "Dev Tools Desktop", + "description": "DevTools - Your Essential Developer Companion", + "author": "Ahmed Shamim", "license": "MIT", - "devDependencies": { - "electron": "^28.0.0", - "electron-builder": "^24.0.0", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0" + "main": "dist-electron/main.js", + "type": "module", + "scripts": { + "dev": "concurrently \"vite\" \"node scripts/build-electron.js --watch\" \"wait-on http://localhost:8080 && electron .\"", + "build:electron": "node scripts/build-electron.js", + "build": "vite build && npm run build:electron", + "build:dev": "vite build --mode development && npm run build:electron", + "dist": "npm run build && electron-builder --publish=never", + "dist:publish": "npm run build && electron-builder --publish=always", + "icon": "node scripts/create-icon.js", + "lint": "eslint .", + "preview": "vite preview", + "test": "vitest run", + "test:watch": "vitest" }, "dependencies": { - "crypto-js": "^4.2.0", - "jsonwebtoken": "^9.0.2", - "marked": "^12.0.0", - "node-cron": "^3.0.3", - "qrcode": "^1.5.3", - "uuid": "^9.0.1" + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-select": "^2.2.5", + "@radix-ui/react-slider": "^1.3.5", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-switch": "^1.2.5", + "@radix-ui/react-tabs": "^1.1.12", + "@radix-ui/react-toast": "^1.2.14", + "@radix-ui/react-tooltip": "^1.2.7", + "@tanstack/react-query": "^5.83.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "concurrently": "^9.2.1", + "electron-updater": "^6.7.3", + "input-otp": "^1.4.2", + "lucide-react": "^0.462.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-resizable-panels": "^2.1.9", + "sonner": "^1.7.4", + "tailwind-merge": "^2.6.0", + "tailwindcss-animate": "^1.0.7", + "wait-on": "^9.0.3" + }, + "devDependencies": { + "@eslint/js": "^9.32.0", + "@tailwindcss/typography": "^0.5.16", + "@testing-library/jest-dom": "^6.6.0", + "@testing-library/react": "^16.0.0", + "@types/node": "^22.19.7", + "@types/react": "^18.3.23", + "@types/react-dom": "^18.3.7", + "@vitejs/plugin-react-swc": "^3.11.0", + "autoprefixer": "^10.4.21", + "electron": "^40.0.0", + "electron-builder": "^26.4.0", + "esbuild": "^0.27.2", + "eslint": "^9.32.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^15.15.0", + "jsdom": "^20.0.3", + "postcss": "^8.5.6", + "sharp": "^0.34.5", + "tailwindcss": "^3.4.17", + "typescript": "^5.8.3", + "typescript-eslint": "^8.38.0", + "vite": "^5.4.19", + "vitest": "^3.2.4" }, "build": { - "appId": "com.devtools.desktop", - "productName": "Dev Tools Desktop", + "appId": "com.meshaon.devtools", + "productName": "DevTools", "directories": { - "output": "dist" + "output": "release" }, "files": [ - "src/**/*", - "node_modules/**/*" + "dist/**", + "dist-electron/**", + "package.json" ], + "extraMetadata": { + "main": "dist-electron/main.js" + }, "mac": { - "category": "public.app-category.developer-tools" + "target": [ + { + "target": "dmg", + "arch": [ + "x64", + "arm64" + ] + } + ], + "icon": "build/icon.png", + "category": "public.app-category.developer-tools", + "hardenedRuntime": true }, "win": { - "target": "nsis" + "target": [ + { + "target": "nsis", + "arch": [ + "x64", + "ia32" + ] + } + ], + "icon": "build/icon.png" }, "linux": { - "target": "AppImage" + "target": [ + { + "target": "AppImage", + "arch": [ + "x64" + ] + } + ], + "icon": "build/icon.png", + "category": "Development" + }, + "publish": { + "provider": "github", + "owner": "me-shaon", + "repo": "devtools" } - }, - "jest": { - "testEnvironment": "jsdom", - "collectCoverageFrom": [ - "src/renderer/js/tools/**/*.js", - "!src/renderer/js/tools/**/*.test.js" - ], - "testMatch": [ - "**/__tests__/**/*.test.js", - "**/*.test.js" - ], - "setupFilesAfterEnv": [ - "/tests/setup.js" - ] } } diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 00000000..2aa7205d --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/public/app-icon.png b/public/app-icon.png new file mode 100644 index 00000000..d5e519a1 Binary files /dev/null and b/public/app-icon.png differ diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 00000000..0b2da7f4 Binary files /dev/null and b/public/favicon.png differ diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 00000000..c2a49f4f --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Allow: / diff --git a/scripts/build-electron.js b/scripts/build-electron.js new file mode 100644 index 00000000..d9ce73bf --- /dev/null +++ b/scripts/build-electron.js @@ -0,0 +1,52 @@ +import esbuild from "esbuild"; +import { resolve, dirname } from "path"; +import { fileURLToPath } from "url"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); +const rootDir = resolve(__dirname, ".."); + +const isWatch = process.argv.includes("--watch"); + +async function build() { + // Build main process as ESM + const mainContext = await esbuild.context({ + entryPoints: [resolve(rootDir, "src-electron/main.ts")], + bundle: true, + platform: "node", + target: "node20", + format: "esm", + outfile: resolve(rootDir, "dist-electron/main.js"), + external: ["electron", "electron-updater"], + logLevel: "info", + }); + + // Build preload script as CommonJS (Electron requires this) + const preloadContext = await esbuild.context({ + entryPoints: [resolve(rootDir, "src-electron/preload.ts")], + bundle: true, + platform: "node", + target: "node20", + format: "cjs", + outfile: resolve(rootDir, "dist-electron/preload.js"), + external: ["electron"], + logLevel: "info", + }); + + if (isWatch) { + await mainContext.watch(); + await preloadContext.watch(); + console.log("Watching for changes..."); + } else { + await mainContext.rebuild(); + await mainContext.dispose(); + await preloadContext.rebuild(); + await preloadContext.dispose(); + console.log("Build complete!"); + } +} + +build().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/scripts/create-icon.js b/scripts/create-icon.js new file mode 100644 index 00000000..c9697bba --- /dev/null +++ b/scripts/create-icon.js @@ -0,0 +1,16 @@ +import sharp from "sharp"; +import { readFileSync } from "fs"; + +// Read the SVG +const svgBuffer = readFileSync("build/icon.svg"); + +// Convert to PNG +sharp(svgBuffer) + .resize(1024, 1024) + .png() + .toFile("build/icon.png") + .then(() => console.log("Icon created successfully!")) + .catch((err) => { + console.error("Error creating icon:", err); + process.exit(1); + }); diff --git a/src-electron/main.ts b/src-electron/main.ts new file mode 100644 index 00000000..e838c789 --- /dev/null +++ b/src-electron/main.ts @@ -0,0 +1,144 @@ +import { app, BrowserWindow, Tray, dialog, shell } from "electron"; +import path from "path"; +import { fileURLToPath } from "url"; +import { dirname } from "path"; +import electronUpdater from "electron-updater"; + +const { autoUpdater } = electronUpdater; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +let win: BrowserWindow | null = null; +let tray: Tray | null = null; + +const isDev = !app.isPackaged; + +function createWindow() { + win = new BrowserWindow({ + width: 1200, + height: 800, + backgroundColor: "#191919", + show: false, + webPreferences: { + preload: path.join(__dirname, "preload.js"), + contextIsolation: true, + nodeIntegration: false, + webSecurity: true, + }, + }); + + // Show window when ready to prevent visual flash + win.once("ready-to-show", () => { + win?.show(); + }); + + const url = isDev + ? "http://localhost:8080" + : `file://${path.join(__dirname, "../dist/index.html")}`; + + win.loadURL(url); + + // Open DevTools in development + if (isDev) { + win.webContents.openDevTools(); + } + + // Handle external links + win.webContents.setWindowOpenHandler(({ url }) => { + shell.openExternal(url); + return { action: "deny" }; + }); + + win.on("closed", () => { + win = null; + }); +} + +function createTray() { + // Note: You'll need to add a tray icon at src-electron/assets/tray.png + // For now, we'll skip tray creation if the icon doesn't exist + const trayIconPath = path.join(__dirname, "assets/tray.png"); + + // Only create tray if icon exists (we can add this later) + // tray = new Tray(trayIconPath); + // tray.setToolTip("DevTools"); + // tray.on("click", () => { + // if (win) { + // if (win.isMinimized()) { + // win.restore(); + // } else { + // win.focus(); + // } + // } else { + // createWindow(); + // } + // }); +} + +app.whenReady().then(() => { + createWindow(); + createTray(); + + if (!isDev) { + autoUpdater.checkForUpdates(); + } +}); + +app.on("window-all-closed", () => { + if (process.platform !== "darwin") { + app.quit(); + } +}); + +app.on("activate", () => { + if (BrowserWindow.getAllWindows().length === 0) { + createWindow(); + } +}); + +// Auto Update UX +autoUpdater.autoDownload = false; +autoUpdater.setFeedURL({ + provider: "github", + owner: "me-shaon", + repo: "devtools", +}); + +autoUpdater.on("update-available", () => { + dialog + .showMessageBox({ + type: "info", + title: "Update available", + message: "A new version of DevTools is available. Update now?", + buttons: ["Update", "Later"], + }) + .then((result) => { + if (result.response === 0) { + autoUpdater.downloadUpdate(); + } + }); +}); + +autoUpdater.on("update-not-available", () => { + // No update available - silent +}); + +autoUpdater.on("update-downloaded", () => { + dialog + .showMessageBox({ + type: "info", + title: "Update ready", + message: "Restart to install update?", + buttons: ["Restart", "Later"], + }) + .then((result) => { + if (result.response === 0) { + autoUpdater.quitAndInstall(); + } + }); +}); + +autoUpdater.on("error", (error) => { + console.error("Auto-updater error:", error); +}); diff --git a/src-electron/preload.ts b/src-electron/preload.ts new file mode 100644 index 00000000..bb26723a --- /dev/null +++ b/src-electron/preload.ts @@ -0,0 +1,47 @@ +import { contextBridge, ipcRenderer } from "electron"; + +/** + * Expose a safe API to the renderer process via contextBridge + * This provides a secure way for the renderer to communicate with the main process + */ +contextBridge.exposeInMainWorld("electronAPI", { + invoke: (channel: string, ...args: unknown[]) => { + // Whitelist allowed channels + const validChannels = ["app-version", "get-path"]; + if (validChannels.includes(channel)) { + return ipcRenderer.invoke(channel, ...args); + } + return Promise.reject(new Error(`Channel ${channel} is not allowed`)); + }, + on: (channel: string, callback: (...args: unknown[]) => void) => { + // Whitelist allowed channels + const validChannels = ["update-available", "update-downloaded"]; + if (validChannels.includes(channel)) { + const subscription = (_event: Electron.IpcRendererEvent, ...args: unknown[]) => + callback(...args); + ipcRenderer.on(channel, subscription); + + // Return unsubscribe function + return () => { + ipcRenderer.removeListener(channel, subscription); + }; + } + return () => {}; + }, + platform: process.platform, + version: process.versions.electron, +}); + +// TypeScript type declarations for the exposed API +export interface ElectronAPI { + invoke: (channel: string, ...args: unknown[]) => Promise; + on: (channel: string, callback: (...args: unknown[]) => void) => () => void; + platform: string; + version: string; +} + +declare global { + interface Window { + electronAPI: ElectronAPI; + } +} diff --git a/src-electron/tsconfig.json b/src-electron/tsconfig.json new file mode 100644 index 00000000..d1de0c5d --- /dev/null +++ b/src-electron/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "CommonJS", + "lib": ["ES2020"], + "outDir": "../dist-electron", + "rootDir": ".", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "moduleResolution": "node", + "types": ["node"] + }, + "include": ["./**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 00000000..e31fb48f --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,19 @@ +import { Toaster } from "@/components/ui/toaster"; +import { Toaster as Sonner } from "@/components/ui/sonner"; +import { TooltipProvider } from "@/components/ui/tooltip"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import DevToolsApp from "./app/DevToolsApp"; + +const queryClient = new QueryClient(); + +const App = () => ( + + + + + + + +); + +export default App; diff --git a/src/components/tools/ApiFormatter.tsx b/src/components/tools/ApiFormatter.tsx new file mode 100644 index 00000000..43bab1d0 --- /dev/null +++ b/src/components/tools/ApiFormatter.tsx @@ -0,0 +1,210 @@ +import { useState } from "react"; +import { Button } from "@/components/ui/button"; +import { Textarea } from "@/components/ui/textarea"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { Copy, Check, Code2 } from "lucide-react"; +import { toast } from "sonner"; + +export function ApiFormatter() { + const [input, setInput] = useState(""); + const [output, setOutput] = useState(""); + const [copied, setCopied] = useState(false); + + const formatJson = () => { + if (!input.trim()) { + toast.error("Please enter JSON to format"); + return; + } + + try { + const parsed = JSON.parse(input); + setOutput(JSON.stringify(parsed, null, 2)); + toast.success("JSON formatted!"); + } catch (error) { + toast.error("Invalid JSON"); + } + }; + + const minifyJson = () => { + if (!input.trim()) { + toast.error("Please enter JSON to minify"); + return; + } + + try { + const parsed = JSON.parse(input); + setOutput(JSON.stringify(parsed)); + toast.success("JSON minified!"); + } catch (error) { + toast.error("Invalid JSON"); + } + }; + + const parseUrlEncoded = () => { + if (!input.trim()) { + toast.error("Please enter URL-encoded data"); + return; + } + + try { + const params = new URLSearchParams(input); + const result: Record = {}; + params.forEach((value, key) => { + result[key] = value; + }); + setOutput(JSON.stringify(result, null, 2)); + toast.success("URL-encoded data parsed!"); + } catch (error) { + toast.error("Invalid URL-encoded data"); + } + }; + + const parseQueryString = () => { + if (!input.trim()) { + toast.error("Please enter a query string"); + return; + } + + try { + const queryString = input.startsWith("?") ? input.slice(1) : input; + const params = new URLSearchParams(queryString); + const result: Record = {}; + params.forEach((value, key) => { + result[key] = value; + }); + setOutput(JSON.stringify(result, null, 2)); + toast.success("Query string parsed!"); + } catch (error) { + toast.error("Invalid query string"); + } + }; + + const copyOutput = () => { + navigator.clipboard.writeText(output); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + toast.success("Output copied!"); + }; + + const clearAll = () => { + setInput(""); + setOutput(""); + }; + + const examples = { + json: '{"name":"John","age":30,"city":"New York"}', + urlEncoded: "name=John&age=30&city=New+York", + queryString: "?name=John&age=30&city=New+York", + }; + + return ( +
+ + + + + API Response Formatter + + Format and parse API responses + + + + + Format JSON + Minify JSON + URL Encoded + Query String + + + +
+ -
-
-
- - - -
-

-            
-
- - -
-

API Response Formatter

-
-
-
- - -
- -
-
-
- - - - - - -
-
-
- - - -
- -
-
-
-
-
- -
-

Text Compare

-
-
-
- - -
-
- - -
-
-
-
- - -
-
- - -
-
-
-
-
- -
-

Case Converter

-
-
- -
-
- - - - - - - -
-
- -
-
-
- -
-

UUID Generator

-
-
-
- - -
-
- - -
- -
-
- -
-
-
- -
-

Password Generator

-
-
- - - - -
- - -
-
-
- - -
- -
- - - - - -
- -
- - - -
-
- -
- -
- -
-
-
-
-
- Strength: - - Entropy: 0 bits -
-
    -
    -
    - - -
    -
    -
    - - -
    - -
    - -
    - -
    -
    - - -
    -
    -
    - - -
    -
    - - -
    - -
    - - -
    - - -
    - -
    - -
    - -
    -
    -
    - - -
    -
    -
    - - -
    -
    - -
    -
    -
    -
    -
    - Strength: - - Entropy: 0 bits -
    -
      -
      -
      -
      -
      - -
      -

      Base64 Converter

      -
      -
      - - -
      -
      - - - -
      -
      - - - -
      -
      -
      - -
      -

      JWT Decoder

      -
      -
      - - -
      -
      -
      -

      Header

      -
      
      -              
      -
      -

      Payload

      -
      
      -              
      -
      -

      Signature

      -
      
      -              
      -
      -
      -
      - -
      -

      JSON to TypeScript

      -
      -
      - -
      -
      - - -
      -
      -
      
      -            
      -
      -
      - -
      -

      Hash Generator

      -
      -
      - -
      -
      - - - - -
      -
      -
      - - -
      -
      - - -
      -
      - - -
      -
      - - -
      -
      -
      -
      - -
      -

      URL Encoder/Decoder

      -
      -
      - - -
      -
      -
      - - -
      -
      - - - -
      -
      - - -
      -
      -
      -
      - - -
      -
      - - - -
      -
      - - -
      -
      -
      -
      - -
      -

      Timestamp Converter

      -
      -
      -

      Current Timestamp

      -
      -
      - --- - --- -
      - -
      -
      -
      - - -
      -
      - - - -
      -
      - - - -
      -
      -
      - -
      -

      Lorem Ipsum Generator

      -
      -
      -
      - - -
      -
      - - -
      - -
      -
      - -
      -
      -
      - -
      -

      Date Time Difference

      -
      -
      -
      -
      - - -
      -
      -
      -
      - - -
      -
      -
      - - -
      - -
      -
      -
      -
      - - -
      -
      -
      -
      - - -
      -
      -
      - - -
      -
      - -
      -

      SQL Formatter

      -
      -
      - -
      -
      - - - -
      -
      - - -
      -
      -
      
      -            
      -
      -
      - -
      -

      Number Base Converter

      -
      -
      -
      - - -
      -
      - - -
      -
      - - -
      -
      - - -
      -
      -
      - -
      -
      -
      - -
      -

      CSV ↔ JSON Converter

      -
      -
      - - -
      -
      -
      - - -
      - - -
      
      -            
      -
      - - - -
      -
      -
      - -
      -

      Image Format Converter

      -
      -
      -
      - -

      Drop image here or click to browse

      - -
      -
      - - -
      -
      - -
      -

      Markdown Editor

      -
      -
      - - - - - - -
      - -
      -
      -
      - -
      -
      -
      -
      -
      -
      -
      - -
      -

      Cron Calculator

      -
      -
      -
      -
      - - -
      -
      - - -
      -
      - - -
      -
      - - -
      -
      - - -
      -
      -
      - - -
      -
      - - -
      -
      -
      -

      Description:

      -

      Select values to see description

      -
      -
      -

      Next 5 Runs:

      -
        -
        -
        -
        - -
        -

        Regex Generator

        -
        -
        - -
        - / - - / - -
        -
        -
        - - -
        -
        - - -
        - -
        - -
        - - - - - - - - -
        - - -
        -
        -

        Quick Reference:

        -
        -
        . Any character
        -
        * 0 or more
        -
        + 1 or more
        -
        ? 0 or 1
        -
        \d Digit (0-9)
        -
        \w Word character
        -
        \s Whitespace
        -
        ^ Start of line
        -
        $ End of line
        -
        [abc] Character class
        -
        (abc) Capturing group
        -
        {n,m} Quantifier
        -
        -
        -
        -
        -
        -
        - -
        -

        Code Playground

        -
        -
        -
        - - -
        -
        - - - -
        -
        -
        -
        - -
        -
        -
        - - -
        -
        - -
        -
        -
        -
        -
        -
        -
        -
        - -
        -

        QR Code Generator

        -
        -
        - -
        -
        -
        - - -
        -
        - - -
        -
        -
        - - -
        -
        - -
        -
        -
        - -
        -

        Color Palette Generator

        -
        -
        -
        - -
        - - -
        -
        -
        - - -
        - -
        -
        -
        -
        -
        -

        Color Formats:

        -
        -
        -
        -
        -
        -
        - -
        -

        Unit Converter

        -
        -
        -
        - - -
        - -
        -
        - -
        - - -
        -
        - -
        - -
        - -
        - -
        - - -
        -
        -
        - -
        - -
        -
        - - - - - - -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/renderer/js/main.js b/src/renderer/js/main.js deleted file mode 100644 index 5ad6dfbe..00000000 --- a/src/renderer/js/main.js +++ /dev/null @@ -1,408 +0,0 @@ -// Check if we're in Electron or browser environment -const isElectron = - typeof require !== 'undefined' && - window.process && - window.process.type === 'renderer'; -const ipcRenderer = isElectron ? require('electron').ipcRenderer : null; - -class DevToolsApp { - constructor() { - this.currentTool = 'home'; - this.searchTimeout = null; - this.init(); - } - - init() { - this.setupNavigation(); - this.setupMenuListeners(); - this.setupToolCards(); - this.setupSearch(); - this.setupCategories(); - } - - setupNavigation() { - const navLinks = document.querySelectorAll('.nav-link[data-tool]'); - - navLinks.forEach((link) => { - link.addEventListener('click', (e) => { - e.preventDefault(); - const tool = link.dataset.tool; - this.switchTool(tool); - }); - }); - } - - setupMenuListeners() { - if (ipcRenderer) { - ipcRenderer.on('navigate-to', (_, tool) => { - this.switchTool(tool); - }); - } - } - - setupToolCards() { - const toolCards = document.querySelectorAll('.tool-card'); - - toolCards.forEach((card) => { - card.addEventListener('click', () => { - const tool = card.dataset.tool; - this.switchTool(tool); - }); - }); - } - - setupSearch() { - const searchInput = document.getElementById('menu-search'); - const clearButton = document.getElementById('clear-search'); - const searchResults = document.getElementById('search-results'); - - searchInput.addEventListener('input', (e) => { - clearTimeout(this.searchTimeout); - const query = e.target.value.trim(); - - if (query.length > 0) { - clearButton.classList.add('visible'); - this.searchTimeout = setTimeout(() => { - this.performSearch(query); - }, 200); - } else { - clearButton.classList.remove('visible'); - this.clearSearch(); - } - }); - - clearButton.addEventListener('click', () => { - searchInput.value = ''; - clearButton.classList.remove('visible'); - this.clearSearch(); - searchInput.focus(); - }); - - // Hide search results when clicking outside - document.addEventListener('click', (e) => { - if (!e.target.closest('.menu-search-container')) { - searchResults.style.display = 'none'; - } - }); - - // Focus search input with Ctrl/Cmd + K - document.addEventListener('keydown', (e) => { - if ((e.ctrlKey || e.metaKey) && e.key === 'k') { - e.preventDefault(); - searchInput.focus(); - searchInput.select(); - } - }); - } - - setupCategories() { - const categoryHeaders = document.querySelectorAll('.category-header'); - - categoryHeaders.forEach((header) => { - header.addEventListener('click', () => { - const category = header.dataset.category; - const menu = document.getElementById(`${category}-menu`); - - header.classList.toggle('expanded'); - menu.classList.toggle('expanded'); - }); - }); - - // Expand first category by default - const firstCategory = document.querySelector('.category-header'); - if (firstCategory) { - firstCategory.click(); - } - } - - performSearch(query) { - const navLinks = document.querySelectorAll('.nav-link[data-tool]'); - const searchResults = document.getElementById('search-results'); - - // Create search index with tool information - const tools = Array.from(navLinks).map(link => ({ - element: link, - name: link.textContent.trim(), - tool: link.dataset.tool, - category: this.getToolCategory(link) - })); - - // Filter tools based on search query - const filteredTools = tools.filter(tool => - tool.name.toLowerCase().includes(query.toLowerCase()) - ); - - if (filteredTools.length > 0) { - // Show search results dropdown - searchResults.innerHTML = ''; - filteredTools.forEach((tool, index) => { - const resultItem = document.createElement('div'); - resultItem.className = 'search-result-item'; - - // Get icon class from the original link - const iconElement = tool.element.querySelector('i'); - const iconClass = iconElement ? iconElement.className : 'fas fa-tools'; - - resultItem.innerHTML = ` - - ${tool.name} - `; - - resultItem.addEventListener('click', () => { - this.switchTool(tool.tool); - this.clearSearch(); - document.getElementById('menu-search').value = ''; - }); - - // Highlight first result - if (index === 0) { - resultItem.classList.add('highlighted'); - } - - searchResults.appendChild(resultItem); - }); - searchResults.style.display = 'block'; - - // Add keyboard navigation - this.setupSearchKeyboardNavigation(searchResults); - } else { - searchResults.innerHTML = '
        No tools found
        '; - searchResults.style.display = 'block'; - } - } - - setupSearchKeyboardNavigation(searchResults) { - const items = searchResults.querySelectorAll('.search-result-item'); - const clickableItems = Array.from(items).filter(item => - item.textContent.trim() !== 'No tools found' - ); - let currentIndex = 0; - - const handleKeyDown = (e) => { - if (clickableItems.length === 0) return; - - if (e.key === 'ArrowDown') { - e.preventDefault(); - clickableItems[currentIndex]?.classList.remove('highlighted'); - currentIndex = (currentIndex + 1) % clickableItems.length; - clickableItems[currentIndex]?.classList.add('highlighted'); - clickableItems[currentIndex]?.scrollIntoView({ block: 'nearest' }); - } else if (e.key === 'ArrowUp') { - e.preventDefault(); - clickableItems[currentIndex]?.classList.remove('highlighted'); - currentIndex = currentIndex === 0 ? clickableItems.length - 1 : currentIndex - 1; - clickableItems[currentIndex]?.classList.add('highlighted'); - clickableItems[currentIndex]?.scrollIntoView({ block: 'nearest' }); - } else if (e.key === 'Enter') { - e.preventDefault(); - if (clickableItems[currentIndex]) { - clickableItems[currentIndex].click(); - } - } - }; - - document.addEventListener('keydown', handleKeyDown); - - // Remove event listener when search is cleared - setTimeout(() => { - document.removeEventListener('keydown', handleKeyDown); - }, 5000); - } - - getToolCategory(link) { - const categoryMenu = link.closest('.category-menu'); - if (categoryMenu) { - return categoryMenu.id.replace('-menu', ''); - } - return 'general'; - } - - clearSearch() { - const searchResults = document.getElementById('search-results'); - searchResults.style.display = 'none'; - searchResults.innerHTML = ''; - } - - switchTool(toolName) { - document.querySelectorAll('.tool-container').forEach((container) => { - container.classList.remove('active'); - }); - - document.querySelectorAll('.nav-link').forEach((link) => { - link.classList.remove('active'); - }); - - const targetContainer = document.getElementById(toolName); - const targetNavLink = document.querySelector(`[data-tool="${toolName}"]`); - - if (targetContainer) { - targetContainer.classList.add('active'); - this.currentTool = toolName; - } - - if (targetNavLink) { - targetNavLink.classList.add('active'); - } - - if (toolName === 'uuid-generator' && window.UUIDGenerator) { - window.UUIDGenerator.init(); - } - if (toolName === 'json-viewer' && window.JSONViewer) { - window.JSONViewer.init(); - } - if (toolName === 'lorem-generator' && window.LoremGenerator) { - console.log('Lorem Generator activated - reinitializing'); - window.LoremGenerator.init(); - } - - /** - * Initialize DateDifference tool if it's activated - * and the class is available in the global scope. - */ - if (toolName === 'date-difference' && window.DateDifference) { - window.DateDifference.init(); - } - } - - async saveFile(content, filters = []) { - if (!ipcRenderer) { - console.log('Save functionality not available in browser mode'); - return { success: false, error: 'Not available in browser' }; - } - - try { - const result = await ipcRenderer.invoke('save-file', { - content, - filters, - }); - return result; - } catch (error) { - console.error('Error saving file:', error); - return { success: false, error: error.message }; - } - } - - async openFile(filters = []) { - if (!ipcRenderer) { - console.log('Open file functionality not available in browser mode'); - return { success: false, error: 'Not available in browser' }; - } - - try { - const result = await ipcRenderer.invoke('open-file', filters); - return result; - } catch (error) { - console.error('Error opening file:', error); - return { success: false, error: error.message }; - } - } - - showMessage(message, type = 'info') { - const messageDiv = document.createElement('div'); - messageDiv.className = `notification notification-${type}`; - - const icon = - { - success: 'fa-check-circle', - error: 'fa-exclamation-circle', - warning: 'fa-exclamation-triangle', - info: 'fa-info-circle', - }[type] || 'fa-info-circle'; - - messageDiv.innerHTML = ` - - ${message} - - `; - - messageDiv.style.cssText = ` - position: fixed; - top: 20px; - right: 20px; - padding: 16px 20px; - border-radius: 8px; - z-index: 10000; - min-width: 300px; - max-width: 400px; - box-shadow: 0 4px 12px rgba(0,0,0,0.15); - display: flex; - align-items: center; - gap: 12px; - animation: slideIn 0.3s ease; - backdrop-filter: blur(10px); - font-weight: 500; - `; - - const colors = { - success: { - bg: 'linear-gradient(135deg, rgba(45, 206, 137, 0.95), rgba(45, 206, 137, 0.85))', - color: 'white', - }, - error: { - bg: 'linear-gradient(135deg, rgba(245, 54, 92, 0.95), rgba(245, 54, 92, 0.85))', - color: 'white', - }, - warning: { - bg: 'linear-gradient(135deg, rgba(251, 99, 64, 0.95), rgba(251, 99, 64, 0.85))', - color: 'white', - }, - info: { - bg: 'linear-gradient(135deg, rgba(94, 114, 228, 0.95), rgba(94, 114, 228, 0.85))', - color: 'white', - }, - }; - - const colorScheme = colors[type] || colors.info; - messageDiv.style.background = colorScheme.bg; - messageDiv.style.color = colorScheme.color; - - const style = document.createElement('style'); - style.textContent = ` - @keyframes slideIn { - from { - transform: translateX(100%); - opacity: 0; - } - to { - transform: translateX(0); - opacity: 1; - } - } - .notification-close { - background: none; - border: none; - color: white; - cursor: pointer; - margin-left: auto; - padding: 4px; - opacity: 0.8; - transition: opacity 0.2s; - } - .notification-close:hover { - opacity: 1; - } - `; - if (!document.querySelector('#notification-styles')) { - style.id = 'notification-styles'; - document.head.appendChild(style); - } - - document.body.appendChild(messageDiv); - - setTimeout(() => { - messageDiv.style.animation = 'slideOut 0.3s ease'; - setTimeout(() => messageDiv.remove(), 300); - }, 4000); - } -} - -// Initialize app when DOM is ready -document.addEventListener('DOMContentLoaded', () => { - window.app = new DevToolsApp(); -}); - -document.addEventListener('DOMContentLoaded', () => { - console.log('Dev Tools Desktop loaded successfully'); -}); diff --git a/src/renderer/js/tools/api-response-formatter.js b/src/renderer/js/tools/api-response-formatter.js deleted file mode 100644 index 5dcff9a7..00000000 --- a/src/renderer/js/tools/api-response-formatter.js +++ /dev/null @@ -1,623 +0,0 @@ -/** - * API Response Formatter - Format REST/GraphQL responses with tree view - * - * Features: - * - Interactive tree view with expand/collapse - * - Real-time search with highlighting and navigation - * - JSON and GraphQL response support - * - Syntax highlighting and validation - * - Copy/export functionality - * - * @version 1.0.1 - Fixed multi-character search bug with DOM normalization - */ -class APIResponseFormatter { - constructor() { - this.currentData = null; - this.currentType = 'json'; - this.searchResults = []; - this.currentSearchIndex = 0; - this.searchDebounceTimer = null; - this.bindEvents(); - } - - bindEvents() { - const formatBtn = document.getElementById('format-response'); - const validateBtn = document.getElementById('validate-response'); - const expandAllBtn = document.getElementById('expand-all'); - const collapseAllBtn = document.getElementById('collapse-all'); - const copyBtn = document.getElementById('copy-response'); - const clearBtn = document.getElementById('clear-response'); - const typeSelect = document.getElementById('response-type'); - const searchInput = document.getElementById('search-response'); - const searchPrevBtn = document.getElementById('search-prev'); - const searchNextBtn = document.getElementById('search-next'); - - if (formatBtn) - formatBtn.addEventListener('click', () => this.formatResponse()); - if (validateBtn) - validateBtn.addEventListener('click', () => this.validateResponse()); - if (expandAllBtn) - expandAllBtn.addEventListener('click', () => this.expandAll()); - if (collapseAllBtn) - collapseAllBtn.addEventListener('click', () => this.collapseAll()); - if (copyBtn) - copyBtn.addEventListener('click', () => this.copyToClipboard()); - if (clearBtn) clearBtn.addEventListener('click', () => this.clearAll()); - if (typeSelect) - typeSelect.addEventListener('change', () => this.onTypeChange()); - if (searchInput) { - searchInput.addEventListener('input', () => - this.onSearchInputDebounced() - ); - searchInput.addEventListener('keypress', (e) => { - if (e.key === 'Enter') { - e.preventDefault(); - this.searchNext(); - } - }); - } - if (searchPrevBtn) - searchPrevBtn.addEventListener('click', () => this.searchPrev()); - if (searchNextBtn) - searchNextBtn.addEventListener('click', () => this.searchNext()); - - // Bind tree toggle events using event delegation - const output = document.getElementById('response-output'); - if (output) { - output.addEventListener('click', (e) => { - if (e.target.closest('.tree-toggle')) { - this.toggleTreeNode(e.target.closest('.tree-toggle')); - } - }); - } - } - - formatResponse() { - this.clearButtonStates(); // Clear all active button states - this.setButtonActive('format-response'); // Set this button as active - - const input = document.getElementById('response-input').value; - const typeSelect = document.getElementById('response-type'); - const output = document.getElementById('response-output'); - const responseType = typeSelect ? typeSelect.value : 'json'; - - if (!input.trim()) { - this.showError('Please enter API response data to format.'); - return; - } - - try { - this.currentData = window.APIFormatterUtils.parseResponse( - input, - responseType - ); - this.currentType = responseType; - - const treeHTML = window.APIFormatterUtils.generateTreeHTML( - this.currentData - ); - const info = window.APIFormatterUtils.getResponseInfo(this.currentData); - - output.innerHTML = ` -
        -
        - Type: - ${info.type} -
        -
        - Size: - ${info.size} -
        -
        - Keys: - ${info.keys} -
        -
        - Depth: - ${info.depth} -
        -
        -
        - ${treeHTML} -
        - `; - - this.clearErrors(); - this.updateSearchResults(); - window.app?.showMessage( - `${responseType.toUpperCase()} formatted successfully!`, - 'success' - ); - } catch (error) { - this.showError(error.message); - this.currentData = null; - } - } - - validateResponse() { - this.clearButtonStates(); // Clear all active button states - this.setButtonActive('validate-response'); // Set this button as active - - const input = document.getElementById('response-input').value; - const typeSelect = document.getElementById('response-type'); - const output = document.getElementById('response-output'); - const responseType = typeSelect ? typeSelect.value : 'json'; - - if (!input.trim()) { - this.showError('Please enter API response data to validate.'); - return; - } - - try { - const data = window.APIFormatterUtils.parseResponse(input, responseType); - const info = window.APIFormatterUtils.getResponseInfo(data); - - let validationMessage = ''; - if (responseType === 'graphql') { - validationMessage = this.validateGraphQLStructure(data); - } - - output.innerHTML = ` -
        -

        ✅ Valid ${responseType.toUpperCase()}

        - ${validationMessage ? `

        ${validationMessage}

        ` : ''} -
        -
        - Type: - ${info.type} -
        -
        - Size: - ${info.size} -
        -
        - Keys: - ${info.keys} -
        -
        - Depth: - ${info.depth} -
        -
        -
        - `; - - this.clearErrors(); - window.app?.showMessage( - `${responseType.toUpperCase()} is valid!`, - 'success' - ); - } catch (error) { - this.showError(error.message); - output.innerHTML = ` -
        -

        ❌ Invalid ${responseType.toUpperCase()}

        -

        ${error.message}

        -
        - `; - } - } - - validateGraphQLStructure(data) { - const messages = []; - - if (data.data) { - messages.push('Contains data field'); - } - - if (data.errors && Array.isArray(data.errors)) { - messages.push(`Contains ${data.errors.length} error(s)`); - } - - if (data.extensions) { - messages.push('Contains extensions field'); - } - - return messages.join(', '); - } - - expandAll() { - this.clearButtonStates(); // Clear button states - this.setButtonActive('expand-all'); - - const toggles = document.querySelectorAll( - '.tree-toggle i.fa-chevron-right' - ); - toggles.forEach((toggle) => { - const toggleBtn = toggle.parentElement; - this.expandTreeNode(toggleBtn); - }); - - window.app?.showMessage('All nodes expanded', 'info'); - - // Clear active state after a short delay - setTimeout(() => this.clearButtonStates(), 1000); - } - - collapseAll() { - this.clearButtonStates(); // Clear button states - this.setButtonActive('collapse-all'); - - const toggles = document.querySelectorAll('.tree-toggle i.fa-chevron-down'); - toggles.forEach((toggle) => { - const toggleBtn = toggle.parentElement; - this.collapseTreeNode(toggleBtn); - }); - - window.app?.showMessage('All nodes collapsed', 'info'); - - // Clear active state after a short delay - setTimeout(() => this.clearButtonStates(), 1000); - } - - toggleTreeNode(toggleBtn) { - const icon = toggleBtn.querySelector('i'); - const target = document.getElementById(toggleBtn.dataset.target); - - if (!target) return; - - if (icon.classList.contains('fa-chevron-down')) { - this.collapseTreeNode(toggleBtn); - } else { - this.expandTreeNode(toggleBtn); - } - } - - expandTreeNode(toggleBtn) { - const icon = toggleBtn.querySelector('i'); - const target = document.getElementById(toggleBtn.dataset.target); - - if (!target) return; - - icon.classList.remove('fa-chevron-right'); - icon.classList.add('fa-chevron-down'); - target.style.display = 'block'; - } - - collapseTreeNode(toggleBtn) { - const icon = toggleBtn.querySelector('i'); - const target = document.getElementById(toggleBtn.dataset.target); - - if (!target) return; - - icon.classList.remove('fa-chevron-down'); - icon.classList.add('fa-chevron-right'); - target.style.display = 'none'; - } - - onSearchInputDebounced() { - // Clear any existing timer - if (this.searchDebounceTimer) { - clearTimeout(this.searchDebounceTimer); - } - - const searchInput = document.getElementById('search-response'); - const searchTerm = searchInput ? searchInput.value : ''; - - // For very short queries (1-2 characters), use shorter debounce - // For longer queries, use longer debounce to avoid too many searches while typing - const debounceDelay = searchTerm.length <= 2 ? 150 : 300; - - // Set a new timer to perform search after debounce delay - this.searchDebounceTimer = setTimeout(() => { - this.performSearch(); - }, debounceDelay); - } - - performSearch() { - const searchInput = document.getElementById('search-response'); - const searchTerm = searchInput ? searchInput.value : ''; - - // Clear previous highlights - this.clearSearchHighlights(); - - if (!searchTerm.trim()) { - this.searchResults = []; - this.currentSearchIndex = 0; - this.updateSearchStats(); - return; - } - - // Highlight results and count them - const highlightedCount = this.highlightSearchResults(searchTerm); - - // For now, create a simple results array for navigation - this.searchResults = Array.from({ length: highlightedCount }, (_, i) => ({ - index: i, - })); - this.currentSearchIndex = 0; - - this.updateSearchStats(); - - if (this.searchResults.length > 0) { - this.updateCurrentSearchResult(0); - } - } - - searchNext() { - if (this.searchResults.length === 0) return; - - this.currentSearchIndex = - (this.currentSearchIndex + 1) % this.searchResults.length; - this.updateCurrentSearchResult(this.currentSearchIndex); - this.updateSearchStats(); - } - - searchPrev() { - if (this.searchResults.length === 0) return; - - this.currentSearchIndex = - this.currentSearchIndex === 0 - ? this.searchResults.length - 1 - : this.currentSearchIndex - 1; - this.updateCurrentSearchResult(this.currentSearchIndex); - this.updateSearchStats(); - } - - highlightSearchResults(searchTerm) { - const output = document.getElementById('response-output'); - if (!output) return 0; - - // Clear previous highlights first - this.clearSearchHighlights(); - - if (!searchTerm || !searchTerm.trim()) return 0; - - // Use a safer approach: find text nodes and highlight matches - return this.highlightInTextNodes(output, searchTerm.toLowerCase()); - } - - /** - * Clear all search highlighting from the formatted output. - * - * CRITICAL: This method includes DOM normalization to prevent TreeWalker - * issues when replacing highlight elements with text nodes. Without - * normalization, adjacent text nodes created during highlight removal - * can fragment the DOM and break subsequent search functionality. - * - * Fix for: Multi-character search queries failing after first character - * @since 1.0.1 - */ - clearSearchHighlights() { - const highlights = document.querySelectorAll( - '.search-highlight, .search-current' - ); - const parents = new Set(); - - highlights.forEach((highlight) => { - const text = highlight.textContent; - const parent = highlight.parentNode; - parents.add(parent); - parent.replaceChild(document.createTextNode(text), highlight); - }); - - // Normalize adjacent text nodes to prevent TreeWalker issues - parents.forEach((parent) => { - if (parent && parent.normalize) { - parent.normalize(); - } - }); - } - - highlightInTextNodes(element, searchTerm) { - const walker = document.createTreeWalker( - element, - NodeFilter.SHOW_TEXT, - null, - false - ); - - const textNodes = []; - let node; - while ((node = walker.nextNode())) { - if (node.textContent.toLowerCase().includes(searchTerm)) { - textNodes.push(node); - } - } - - let highlightCount = 0; - - textNodes.forEach((textNode) => { - const parent = textNode.parentNode; - if ( - parent && - !parent.classList.contains('search-highlight') && - !parent.classList.contains('search-current') - ) { - const text = textNode.textContent; - const lowerText = text.toLowerCase(); - let currentIndex = 0; - let searchIndex = lowerText.indexOf(searchTerm, currentIndex); - - if (searchIndex !== -1) { - const fragment = document.createDocumentFragment(); - - while (searchIndex !== -1) { - // Add text before the match - if (searchIndex > currentIndex) { - const beforeText = text.substring(currentIndex, searchIndex); - fragment.appendChild(document.createTextNode(beforeText)); - } - - // Add the highlighted match - const matchText = text.substring( - searchIndex, - searchIndex + searchTerm.length - ); - const highlight = document.createElement('mark'); - highlight.className = 'search-highlight'; - highlight.textContent = matchText; - fragment.appendChild(highlight); - highlightCount++; - - // Move to next potential match - currentIndex = searchIndex + searchTerm.length; - searchIndex = lowerText.indexOf(searchTerm, currentIndex); - } - - // Add any remaining text - if (currentIndex < text.length) { - const afterText = text.substring(currentIndex); - fragment.appendChild(document.createTextNode(afterText)); - } - - parent.replaceChild(fragment, textNode); - } - } - }); - - return highlightCount; - } - - updateCurrentSearchResult(index) { - // Remove previous current highlighting - const currentHighlights = document.querySelectorAll('.search-current'); - currentHighlights.forEach((highlight) => { - highlight.classList.remove('search-current'); - highlight.classList.add('search-highlight'); - }); - - // Add current highlighting to new result - const highlights = document.querySelectorAll('.search-highlight'); - if (highlights[index]) { - highlights[index].classList.remove('search-highlight'); - highlights[index].classList.add('search-current'); - highlights[index].scrollIntoView({ behavior: 'smooth', block: 'center' }); - } - } - - updateSearchStats() { - const searchStats = document.getElementById('search-stats'); - if (!searchStats) return; - - if (this.searchResults.length === 0) { - searchStats.textContent = ''; - } else { - searchStats.textContent = `${this.currentSearchIndex + 1} of ${ - this.searchResults.length - }`; - } - } - - updateSearchResults() { - // Clear search when data changes - const searchInput = document.getElementById('search-response'); - if (searchInput) { - searchInput.value = ''; - } - this.searchResults = []; - this.currentSearchIndex = 0; - this.updateSearchStats(); - } - - copyToClipboard() { - this.clearButtonStates(); // Clear button states - this.setButtonActive('copy-response'); - - if (!this.currentData) { - this.showError('No formatted data to copy.'); - setTimeout(() => this.clearButtonStates(), 1000); - return; - } - - try { - const formatted = JSON.stringify(this.currentData, null, 2); - navigator.clipboard - .writeText(formatted) - .then(() => { - window.app?.showMessage( - 'Formatted response copied to clipboard!', - 'success' - ); - setTimeout(() => this.clearButtonStates(), 1000); - }) - .catch(() => { - // Fallback for older browsers - const textarea = document.createElement('textarea'); - textarea.value = formatted; - document.body.appendChild(textarea); - textarea.select(); - document.execCommand('copy'); - document.body.removeChild(textarea); - window.app?.showMessage( - 'Formatted response copied to clipboard!', - 'success' - ); - setTimeout(() => this.clearButtonStates(), 1000); - }); - } catch (error) { - this.showError('Failed to copy to clipboard.'); - setTimeout(() => this.clearButtonStates(), 1000); - } - } - - onTypeChange() { - // Clear output when type changes - this.clearOutput(); - this.currentData = null; - this.updateSearchResults(); - } - - clearAll() { - this.clearButtonStates(); // Clear button states - this.setButtonActive('clear-response'); - - const input = document.getElementById('response-input'); - const searchInput = document.getElementById('search-response'); - - if (input) input.value = ''; - if (searchInput) searchInput.value = ''; - - this.clearOutput(); - this.currentData = null; - this.searchResults = []; - - window.app?.showMessage('All data cleared!', 'info'); - setTimeout(() => this.clearButtonStates(), 1000); - } - - clearOutput() { - const output = document.getElementById('response-output'); - if (output) output.innerHTML = ''; - } - - showError(message) { - const output = document.getElementById('response-output'); - if (output) { - output.innerHTML = `
        ${message}
        `; - } - } - - clearErrors() { - const existingErrors = document.querySelectorAll('.error'); - existingErrors.forEach((error) => error.remove()); - } - - // Button state management methods - clearButtonStates() { - const buttons = [ - 'format-response', - 'validate-response', - 'expand-all', - 'collapse-all', - 'copy-response', - 'clear-response', - ]; - - buttons.forEach((buttonId) => { - const button = document.getElementById(buttonId); - if (button) { - button.classList.remove('active'); - } - }); - } - - setButtonActive(buttonId) { - const button = document.getElementById(buttonId); - if (button) { - button.classList.add('active'); - } - } -} - -window.APIResponseFormatter = new APIResponseFormatter(); diff --git a/src/renderer/js/tools/base64-converter.js b/src/renderer/js/tools/base64-converter.js deleted file mode 100644 index 80f39d4e..00000000 --- a/src/renderer/js/tools/base64-converter.js +++ /dev/null @@ -1,114 +0,0 @@ -class Base64Converter { - constructor() { - this.init(); - } - - init() { - const container = document.getElementById('base64-converter'); - const tabButtons = container.querySelectorAll('.tab-btn'); - const encodeBtn = document.getElementById('encode-btn'); - const decodeBtn = document.getElementById('decode-btn'); - - tabButtons.forEach(button => { - button.addEventListener('click', () => { - this.switchTab(button.dataset.tab); - }); - }); - - if (encodeBtn) { - encodeBtn.addEventListener('click', () => this.encodeToBase64()); - } - - if (decodeBtn) { - decodeBtn.addEventListener('click', () => this.decodeFromBase64()); - } - - const textInputs = document.querySelectorAll('#text-to-encode, #base64-to-decode'); - textInputs.forEach(input => { - input.addEventListener('input', () => this.clearOutputs()); - }); - } - - switchTab(tabName) { - const container = document.getElementById('base64-converter'); - - container.querySelectorAll('.tab-btn').forEach(btn => { - btn.classList.remove('active'); - }); - container.querySelectorAll('.tab-content').forEach(content => { - content.classList.remove('active'); - }); - - container.querySelector(`[data-tab="${tabName}"]`).classList.add('active'); - document.getElementById(`${tabName}-tab`).classList.add('active'); - - this.clearOutputs(); - } - - encodeToBase64() { - const input = document.getElementById('text-to-encode').value; - const output = document.getElementById('encoded-output'); - - if (!input.trim()) { - window.app?.showMessage('Please enter text to encode.', 'error'); - return; - } - - try { - const encoded = btoa(unescape(encodeURIComponent(input))); - output.value = encoded; - window.app?.showMessage('Text encoded to Base64!', 'success'); - this.selectOutput('encoded-output'); - } catch (error) { - window.app?.showMessage('Error encoding text: ' + error.message, 'error'); - output.value = ''; - } - } - - decodeFromBase64() { - const input = document.getElementById('base64-to-decode').value; - const output = document.getElementById('decoded-output'); - - if (!input.trim()) { - window.app?.showMessage('Please enter Base64 to decode.', 'error'); - return; - } - - try { - if (!this.isValidBase64(input.trim())) { - throw new Error('Invalid Base64 format'); - } - - const decoded = decodeURIComponent(escape(atob(input.trim()))); - output.value = decoded; - window.app?.showMessage('Base64 decoded successfully!', 'success'); - this.selectOutput('decoded-output'); - } catch (error) { - window.app?.showMessage('Error decoding Base64: Invalid format or corrupted data', 'error'); - output.value = ''; - } - } - - isValidBase64(str) { - try { - return btoa(atob(str)) === str; - } catch (err) { - return false; - } - } - - selectOutput(outputId) { - const output = document.getElementById(outputId); - setTimeout(() => { - output.select(); - output.setSelectionRange(0, 99999); - }, 100); - } - - clearOutputs() { - document.getElementById('encoded-output').value = ''; - document.getElementById('decoded-output').value = ''; - } -} - -window.Base64Converter = new Base64Converter(); \ No newline at end of file diff --git a/src/renderer/js/tools/case-converter.js b/src/renderer/js/tools/case-converter.js deleted file mode 100644 index af82bd10..00000000 --- a/src/renderer/js/tools/case-converter.js +++ /dev/null @@ -1,123 +0,0 @@ -class CaseConverter { - constructor() { - this.init(); - } - - init() { - const inputTextarea = document.getElementById('case-input'); - const outputTextarea = document.getElementById('case-output'); - const caseButtons = document.querySelectorAll('.case-btn'); - - if (caseButtons.length > 0) { - caseButtons.forEach(button => { - button.addEventListener('click', () => { - const caseType = button.dataset.case; - this.convertCase(caseType); - }); - }); - } - - if (inputTextarea) { - inputTextarea.addEventListener('input', () => { - outputTextarea.value = ''; - }); - } - } - - convertCase(caseType) { - const input = document.getElementById('case-input').value; - const output = document.getElementById('case-output'); - - if (!input.trim()) { - window.app?.showMessage('Please enter text to convert.', 'error'); - return; - } - - let convertedText = ''; - - switch (caseType) { - case 'camel': - convertedText = this.toCamelCase(input); - break; - case 'pascal': - convertedText = this.toPascalCase(input); - break; - case 'snake': - convertedText = this.toSnakeCase(input); - break; - case 'kebab': - convertedText = this.toKebabCase(input); - break; - case 'upper': - convertedText = input.toUpperCase(); - break; - case 'lower': - convertedText = input.toLowerCase(); - break; - case 'title': - convertedText = this.toTitleCase(input); - break; - default: - convertedText = input; - } - - output.value = convertedText; - window.app?.showMessage(`Text converted to ${caseType} case!`, 'success'); - - this.selectOutput(); - } - - toCamelCase(str) { - return str - .replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => { - return index === 0 ? word.toLowerCase() : word.toUpperCase(); - }) - .replace(/\s+/g, '') - .replace(/[^a-zA-Z0-9]/g, ''); - } - - toPascalCase(str) { - return str - .replace(/(?:^\w|[A-Z]|\b\w)/g, (word) => { - return word.toUpperCase(); - }) - .replace(/\s+/g, '') - .replace(/[^a-zA-Z0-9]/g, ''); - } - - toSnakeCase(str) { - return str - .replace(/\W+/g, ' ') - .split(/ |\B(?=[A-Z])/) - .map(word => word.toLowerCase()) - .join('_') - .replace(/_{2,}/g, '_') - .replace(/^_|_$/g, ''); - } - - toKebabCase(str) { - return str - .replace(/\W+/g, ' ') - .split(/ |\B(?=[A-Z])/) - .map(word => word.toLowerCase()) - .join('-') - .replace(/-{2,}/g, '-') - .replace(/^-|-$/g, ''); - } - - toTitleCase(str) { - return str.replace(/\w\S*/g, (txt) => { - return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); - }); - } - - selectOutput() { - const output = document.getElementById('case-output'); - setTimeout(() => { - output.select(); - output.setSelectionRange(0, 99999); - }, 100); - } -} - -window.CaseConverter = new CaseConverter(); \ No newline at end of file diff --git a/src/renderer/js/tools/code-playground.js b/src/renderer/js/tools/code-playground.js deleted file mode 100644 index b1bf5e51..00000000 --- a/src/renderer/js/tools/code-playground.js +++ /dev/null @@ -1,847 +0,0 @@ -class CodePlayground { - constructor() { - this.consoleHistory = []; - this.init(); - } - - init() { - const runBtn = document.getElementById('run-code'); - const clearBtn = document.getElementById('clear-code'); - const formatBtn = document.getElementById('format-code'); - const languageSelect = document.getElementById('code-language'); - const outputTabs = document.querySelectorAll('.output-tab'); - const codeInput = document.getElementById('code-input'); - - if (runBtn) { - runBtn.addEventListener('click', () => this.runCode()); - } - - if (clearBtn) { - clearBtn.addEventListener('click', () => this.clearCode()); - } - - if (formatBtn) { - formatBtn.addEventListener('click', () => this.formatCode()); - } - - if (languageSelect) { - languageSelect.addEventListener('change', () => this.updateLanguage()); - } - - if (codeInput) { - codeInput.addEventListener('input', () => this.highlightSyntax()); - codeInput.addEventListener('scroll', () => this.syncScroll()); - } - - outputTabs.forEach(tab => { - tab.addEventListener('click', () => { - this.switchOutputTab(tab.dataset.tab); - }); - }); - - this.setupConsoleCapture(); - this.setupSyntaxHighlighting(); - this.updateLanguage(); - } - - runCode() { - const code = document.getElementById('code-input').value; - const language = document.getElementById('code-language').value; - - if (!code.trim()) { - window.app?.showMessage('Please enter code to run.', 'error'); - return; - } - - this.clearOutput(); - this.switchOutputTab('result'); - - try { - switch (language) { - case 'javascript': - this.runJavaScript(code); - break; - case 'html': - this.runHTML(code); - break; - case 'css': - this.runCSS(code); - break; - case 'json': - this.validateJSON(code); - break; - case 'markdown': - this.renderMarkdown(code); - break; - default: - this.displayCode(code, language); - } - window.app?.showMessage('Code executed successfully!', 'success'); - } catch (error) { - this.displayError(error.message); - window.app?.showMessage('Error executing code: ' + error.message, 'error'); - } - } - - runJavaScript(code) { - const iframe = document.getElementById('result-frame'); - const html = ` - - - - - - - - - - `; - - iframe.srcdoc = html; - } - - runHTML(code) { - const iframe = document.getElementById('result-frame'); - iframe.srcdoc = code; - } - - runCSS(code) { - const iframe = document.getElementById('result-frame'); - const html = ` - - - - - - -

        Heading 1

        -

        Heading 2

        -

        This is a paragraph with bold text and italic text.

        -
        -
        Box 1
        -
        Box 2
        -
        Box 3
        -
        -
          -
        • List item 1
        • -
        • List item 2
        • -
        • List item 3
        • -
        - - - - - `; - - iframe.srcdoc = html; - } - - validateJSON(code) { - try { - const parsed = JSON.parse(code); - const formatted = JSON.stringify(parsed, null, 2); - this.displayCode(formatted, 'json'); - } catch (error) { - throw new Error('Invalid JSON: ' + error.message); - } - } - - renderMarkdown(code) { - const iframe = document.getElementById('result-frame'); - const html = ` - - - - - - - ${this.markdownToHtml(code)} - - - `; - - iframe.srcdoc = html; - } - - displayCode(code, language) { - const iframe = document.getElementById('result-frame'); - const html = ` - - - - - - -
        ${language.toUpperCase()}
        -
        ${this.escapeHtml(code)}
        - - - `; - - iframe.srcdoc = html; - } - - displayError(message) { - const iframe = document.getElementById('result-frame'); - const html = ` - - - - - - -
        - Error: ${this.escapeHtml(message)} -
        - - - `; - - iframe.srcdoc = html; - } - - formatCode() { - const code = document.getElementById('code-input').value; - const language = document.getElementById('code-language').value; - - if (!code.trim()) { - window.app?.showMessage('Please enter code to format.', 'error'); - return; - } - - try { - let formatted; - switch (language) { - case 'json': - const parsed = JSON.parse(code); - formatted = JSON.stringify(parsed, null, 2); - break; - case 'html': - formatted = this.formatHTML(code); - break; - case 'css': - formatted = this.formatCSS(code); - break; - case 'javascript': - formatted = this.formatJavaScript(code); - break; - default: - formatted = code; - } - - document.getElementById('code-input').value = formatted; - window.app?.showMessage('Code formatted!', 'success'); - } catch (error) { - window.app?.showMessage('Error formatting code: ' + error.message, 'error'); - } - } - - formatHTML(html) { - return html.replace(/>\n<') - .replace(/\n\s*\n/g, '\n') - .trim(); - } - - formatCSS(css) { - return css.replace(/\{/g, ' {\n ') - .replace(/\}/g, '\n}\n') - .replace(/;/g, ';\n ') - .replace(/\n\s*\n/g, '\n') - .trim(); - } - - formatJavaScript(js) { - return js.replace(/\{/g, ' {\n ') - .replace(/\}/g, '\n}') - .replace(/;/g, ';\n') - .replace(/\n\s*\n/g, '\n') - .trim(); - } - - setupConsoleCapture() { - window.addEventListener('message', (event) => { - if (event.data.type === 'console') { - this.addToConsole(event.data.method, event.data.args); - } - }); - } - - addToConsole(method, args) { - const consoleLog = document.getElementById('console-log'); - const entry = document.createElement('div'); - entry.className = `console-entry console-${method}`; - - const timestamp = new Date().toLocaleTimeString(); - entry.innerHTML = ` - ${timestamp} - ${args.map(arg => - typeof arg === 'object' ? JSON.stringify(arg, null, 2) : String(arg) - ).join(' ')} - `; - - consoleLog.appendChild(entry); - consoleLog.scrollTop = consoleLog.scrollHeight; - } - - switchOutputTab(tab) { - document.querySelectorAll('.output-tab').forEach(t => t.classList.remove('active')); - document.querySelectorAll('.output-content').forEach(c => c.classList.remove('active')); - - document.querySelector(`[data-tab="${tab}"]`).classList.add('active'); - document.getElementById(`${tab}-output`).classList.add('active'); - } - - clearCode() { - document.getElementById('code-input').value = ''; - this.clearOutput(); - window.app?.showMessage('Code cleared!', 'info'); - } - - clearOutput() { - const iframe = document.getElementById('result-frame'); - iframe.srcdoc = ''; - document.getElementById('console-log').innerHTML = ''; - } - - updateLanguage() { - const language = document.getElementById('code-language').value; - const codeInput = document.getElementById('code-input'); - - const examples = { - javascript: 'console.log("Hello, World!");\n\nfunction greet(name) {\n return `Hello, ${name}!`;\n}\n\nconsole.log(greet("JavaScript"));', - html: '\n\n\n Hello World\n\n\n

        Hello, World!

        \n

        This is a sample HTML document.

        \n\n', - css: 'body {\n font-family: Arial, sans-serif;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n text-align: center;\n padding: 50px;\n}\n\n.container {\n display: flex;\n gap: 20px;\n justify-content: center;\n}\n\n.box {\n background: rgba(255,255,255,0.1);\n padding: 20px;\n border-radius: 10px;\n}', - json: '{\n "name": "Dev Tools",\n "version": "1.0.0",\n "description": "A collection of developer tools",\n "features": [\n "JSON Viewer",\n "Text Compare",\n "Base64 Converter"\n ],\n "settings": {\n "theme": "dark",\n "autoSave": true\n }\n}', - markdown: '# Markdown Example\n\nThis is a **markdown** document with *italic* text.\n\n## Features\n\n- Lists\n- Links: [GitHub](https://github.com)\n- Code: `console.log("Hello")`\n\n```javascript\nfunction hello() {\n return "Hello, World!";\n}\n```\n\n> This is a blockquote\n\n---\n\nThat\'s all!' - }; - - if (!codeInput.value.trim() && examples[language]) { - codeInput.value = examples[language]; - } - - setTimeout(() => this.highlightSyntax(), 100); - } - - markdownToHtml(markdown) { - let html = markdown; - - html = html.replace(/```(\w+)?\n([\s\S]*?)\n```/g, (_, lang, code) => { - return `
        ${this.escapeHtml(code)}
        `; - }); - - html = html.replace(/`([^`]+)`/g, '$1'); - html = html.replace(/^### (.*$)/gim, '

        $1

        '); - html = html.replace(/^## (.*$)/gim, '

        $1

        '); - html = html.replace(/^# (.*$)/gim, '

        $1

        '); - html = html.replace(/\*\*(.*?)\*\*/g, '$1'); - html = html.replace(/\*(.*?)\*/g, '$1'); - html = html.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '$1'); - html = html.replace(/!\[([^\]]*)\]\(([^)]+)\)/g, '$1'); - html = html.replace(/^- (.*$)/gim, '
      • $1
      • '); - html = html.replace(/(
      • .*<\/li>)/s, '
          $1
        '); - html = html.replace(/^\d+\. (.*$)/gim, '
      • $1
      • '); - html = html.replace(/^> (.*$)/gim, '
        $1
        '); - html = html.replace(/---/g, '
        '); - - const paragraphs = html.split(/\n\s*\n/); - html = paragraphs.map(paragraph => { - paragraph = paragraph.trim(); - if (paragraph && !paragraph.match(/^<(h[1-6]|ul|ol|li|blockquote|pre|hr)/)) { - return `

        ${paragraph}

        `; - } - return paragraph; - }).join('\n\n'); - - return html; - } - - escapeHtml(text) { - const div = document.createElement('div'); - div.textContent = text; - return div.innerHTML; - } - - setupSyntaxHighlighting() { - const codeEditor = document.querySelector('.code-editor'); - if (!codeEditor) return; - - this.highlightContainer = document.createElement('div'); - this.highlightContainer.className = 'syntax-highlight'; - codeEditor.appendChild(this.highlightContainer); - } - - highlightSyntax() { - if (!this.highlightContainer) return; - - const code = document.getElementById('code-input').value; - const language = document.getElementById('code-language').value; - - let highlighted = this.escapeHtml(code); - - switch (language) { - case 'javascript': - highlighted = this.highlightJavaScript(highlighted); - break; - case 'css': - highlighted = this.highlightCSS(highlighted); - break; - case 'json': - highlighted = this.highlightJSON(highlighted); - break; - case 'html': - highlighted = this.highlightHTML(highlighted); - break; - } - - this.highlightContainer.innerHTML = highlighted; - } - - highlightJavaScript(code) { - const keywords = ['const', 'let', 'var', 'function', 'return', 'if', 'else', 'for', 'while', 'do', 'switch', 'case', 'break', 'continue', 'try', 'catch', 'finally', 'throw', 'new', 'this', 'class', 'extends', 'import', 'export', 'default', 'async', 'await', 'true', 'false', 'null', 'undefined']; - - return code - .replace(new RegExp(`\\b(${keywords.join('|')})\\b`, 'g'), '$1') - .replace(/("([^"\\]|\\.)*"|'([^'\\]|\\.)*'|`([^`\\]|\\.)*`)/g, '$1') - .replace(/\b\d+\.?\d*\b/g, '$&') - .replace(/(\/\/.*$|\/\*[\s\S]*?\*\/)/gm, '$1') - .replace(/\b([a-zA-Z_$][a-zA-Z0-9_$]*)\s*(?=\()/g, '$1') - .replace(/[+\-*/%=<>!&|^~?:]/g, '$&'); - } - - highlightCSS(code) { - return code - .replace(/([a-zA-Z-]+)\s*:/g, '$1:') - .replace(/("([^"\\]|\\.)*"|'([^'\\]|\\.)*')/g, '$1') - .replace(/\b\d+\.?\d*(px|em|rem|%|vh|vw|pt|pc|in|cm|mm|ex|ch|fr|vmin|vmax)?\b/g, '$&') - .replace(/(\/\*[\s\S]*?\*\/)/g, '$1'); - } - - highlightJSON(code) { - return code - .replace(/("([^"\\]|\\.)*")\s*:/g, '$1:') - .replace(/:\s*("([^"\\]|\\.)*")/g, ': $1') - .replace(/:\s*\b\d+\.?\d*\b/g, ': $&') - .replace(/:\s*\b(true|false|null)\b/g, ': $1'); - } - - highlightHTML(code) { - return code - .replace(/(<\/?[a-zA-Z][^>]*>)/g, '$1') - .replace(/("([^"\\]|\\.)*"|'([^'\\]|\\.)*')/g, '$1') - .replace(/(<!--[\s\S]*?-->)/g, '$1'); - } - - syncScroll() { - if (!this.highlightContainer) return; - - const codeInput = document.getElementById('code-input'); - this.highlightContainer.scrollTop = codeInput.scrollTop; - this.highlightContainer.scrollLeft = codeInput.scrollLeft; - } -} - -window.CodePlayground = new CodePlayground(); - -const playgroundStyles = ` -.playground-header { - display: flex; - justify-content: space-between; - align-items: flex-start; - margin-bottom: 20px; - flex-wrap: wrap; - gap: 15px; - min-height: 40px; -} - -.language-selector { - display: flex; - align-items: center; - gap: 10px; - flex: 1; - max-width: 300px; -} - -.language-selector label { - font-weight: 500; - color: #32325d; - white-space: nowrap; - margin-bottom: 0; -} - -.language-selector select { - padding: 10px 12px; - border: 2px solid #e3e8f0; - border-radius: 6px; - font-size: 14px; - background: white; - color: #32325d; - outline: none; - transition: border-color 0.2s ease; - flex: 1; - min-width: 120px; - height: 40px; - box-sizing: border-box; -} - -.language-selector select:focus { - border-color: #5e72e4; - box-shadow: 0 0 0 3px rgba(94, 114, 228, 0.1); -} - -.playground-controls { - display: flex; - gap: 10px; - flex-wrap: wrap; -} - -.playground-container { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 20px; - min-height: 500px; -} - -.code-editor, -.code-output { - border: 2px solid #e3e8f0; - border-radius: 8px; - overflow: hidden; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); - transition: border-color 0.2s ease; -} - -.code-editor:focus-within { - border-color: #5e72e4; - box-shadow: 0 0 0 3px rgba(94, 114, 228, 0.1); -} - -#code-input { - width: 100%; - height: 500px; - border: none; - outline: none; - padding: 20px; - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', 'Courier New', monospace; - font-size: 14px; - line-height: 1.6; - resize: none; - background: #f8f9fc; - color: #32325d; - tab-size: 2; - box-sizing: border-box; -} - -#code-input::placeholder { - color: #8898aa; - font-style: italic; -} - -.output-tabs { - display: flex; - background: #f8f9fa; - border-bottom: 1px solid #e3e8f0; - border-top-left-radius: 8px; - border-top-right-radius: 8px; - overflow: hidden; -} - -.output-tab { - background: transparent; - border: none; - padding: 12px 20px; - cursor: pointer; - font-size: 14px; - font-weight: 500; - color: #8898aa; - border-bottom: 3px solid transparent; - transition: all 0.2s ease; - position: relative; -} - -.output-tab:hover { - color: #5e72e4; - background: rgba(94, 114, 228, 0.05); -} - -.output-tab.active { - color: #5e72e4; - border-bottom-color: #5e72e4; - background: white; - box-shadow: 0 -2px 4px rgba(0, 0, 0, 0.05); -} - -.output-content { - display: none; - height: 460px; -} - -.output-content.active { - display: block; -} - -#result-frame { - width: 100%; - height: 100%; - border: none; - background: white; - box-sizing: border-box; -} - -#console-log { - height: 100%; - overflow-y: auto; - padding: 15px; - background: #1a1a1a; - color: #e8e8e8; - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 13px; - line-height: 1.5; - box-sizing: border-box; -} - -#console-log::-webkit-scrollbar { - width: 8px; -} - -#console-log::-webkit-scrollbar-track { - background: #2a2a2a; -} - -#console-log::-webkit-scrollbar-thumb { - background: #555; - border-radius: 4px; -} - -#console-log::-webkit-scrollbar-thumb:hover { - background: #777; -} - -.console-entry { - margin: 5px 0; - padding: 5px 0; - border-bottom: 1px solid #333; -} - -.console-timestamp { - color: #888; - font-size: 11px; - margin-right: 10px; -} - -.console-content { - white-space: pre-wrap; -} - -.console-log .console-content { - color: #4CAF50; -} - -.console-error .console-content { - color: #f44336; -} - -/* Syntax highlighting styles */ -.code-editor { - position: relative; -} - -#code-input { - position: relative; - z-index: 1; - background: transparent; -} - -.syntax-highlight { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - padding: 20px; - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', 'Courier New', monospace; - font-size: 14px; - line-height: 1.6; - white-space: pre-wrap; - word-wrap: break-word; - overflow: hidden; - pointer-events: none; - background: #f8f9fc; - color: transparent; - z-index: 0; -} - -.syntax-highlight .keyword { - color: #8b5cf6; - font-weight: 600; -} - -.syntax-highlight .string { - color: #10b981; -} - -.syntax-highlight .number { - color: #f59e0b; -} - -.syntax-highlight .comment { - color: #6b7280; - font-style: italic; -} - -.syntax-highlight .function { - color: #3b82f6; - font-weight: 500; -} - -.syntax-highlight .operator { - color: #ef4444; -} - -.syntax-highlight .property { - color: #8b5cf6; -} - -@media (max-width: 1024px) { - .playground-container { - grid-template-columns: 1fr; - } - - #code-input, - .output-content { - height: 300px; - } - - .syntax-highlight { - padding: 20px; - } -} -`; - -const codePlaygroundStyle = document.createElement('style'); -codePlaygroundStyle.textContent = playgroundStyles; -document.head.appendChild(codePlaygroundStyle); \ No newline at end of file diff --git a/src/renderer/js/tools/color-palette.js b/src/renderer/js/tools/color-palette.js deleted file mode 100644 index 85087b5a..00000000 --- a/src/renderer/js/tools/color-palette.js +++ /dev/null @@ -1,528 +0,0 @@ -class ColorPalette { - constructor() { - this.currentPalette = []; - this.init(); - } - - init() { - const generateBtn = document.getElementById('generate-palette'); - const baseColorPicker = document.getElementById('base-color'); - const baseColorHex = document.getElementById('base-color-hex'); - const paletteType = document.getElementById('palette-type'); - - if (generateBtn) { - generateBtn.addEventListener('click', () => this.generatePalette()); - } - - if (baseColorPicker) { - baseColorPicker.addEventListener('input', (e) => { - baseColorHex.value = e.target.value; - }); - } - - if (baseColorHex) { - baseColorHex.addEventListener('input', (e) => { - if (this.isValidHexColor(e.target.value)) { - baseColorPicker.value = e.target.value; - } - }); - } - - if (paletteType) { - paletteType.addEventListener('change', () => { - if (this.currentPalette.length > 0) { - this.generatePalette(); - } - }); - } - } - - generatePalette() { - const baseColor = document.getElementById('base-color').value; - const paletteType = document.getElementById('palette-type').value; - - try { - const palette = this.createPalette(baseColor, paletteType); - this.displayPalette(palette); - this.displayColorFormats(palette); - this.currentPalette = palette; - window.app?.showMessage(`${paletteType} palette generated!`, 'success'); - } catch (error) { - window.app?.showMessage('Error generating palette: ' + error.message, 'error'); - } - } - - createPalette(baseColor, type) { - const baseHsl = this.hexToHsl(baseColor); - const [h, s, l] = baseHsl; - const colors = []; - - switch (type) { - case 'monochromatic': - colors.push(...this.createMonochromatic(baseHsl)); - break; - case 'analogous': - colors.push(...this.createAnalogous(h, s, l)); - break; - case 'complementary': - colors.push(...this.createComplementary(h, s, l)); - break; - case 'triadic': - colors.push(...this.createTriadic(h, s, l)); - break; - case 'tetradic': - colors.push(...this.createTetradic(h, s, l)); - break; - default: - colors.push(baseHsl); - } - - return colors.map(hsl => ({ - hex: this.hslToHex(hsl), - hsl: hsl, - rgb: this.hslToRgb(hsl) - })); - } - - createMonochromatic([h, s, l]) { - return [ - [h, s, Math.max(0, l - 0.3)], - [h, s, Math.max(0, l - 0.15)], - [h, s, l], - [h, s, Math.min(1, l + 0.15)], - [h, s, Math.min(1, l + 0.3)] - ]; - } - - createAnalogous(h, s, l) { - return [ - [(h - 60 + 360) % 360, s, l], - [(h - 30 + 360) % 360, s, l], - [h, s, l], - [(h + 30) % 360, s, l], - [(h + 60) % 360, s, l] - ]; - } - - createComplementary(h, s, l) { - const complement = (h + 180) % 360; - return [ - [h, s, l], - [complement, s, l], - [h, s * 0.7, l * 0.9], - [complement, s * 0.7, l * 0.9], - [h, s * 0.3, l * 1.1] - ]; - } - - createTriadic(h, s, l) { - return [ - [h, s, l], - [(h + 120) % 360, s, l], - [(h + 240) % 360, s, l], - [h, s * 0.6, l * 0.8], - [(h + 120) % 360, s * 0.6, l * 0.8] - ]; - } - - createTetradic(h, s, l) { - return [ - [h, s, l], - [(h + 90) % 360, s, l], - [(h + 180) % 360, s, l], - [(h + 270) % 360, s, l], - [h, s * 0.5, l * 0.9] - ]; - } - - displayPalette(palette) { - const container = document.getElementById('palette-colors'); - container.innerHTML = ''; - - palette.forEach((color) => { - const colorDiv = document.createElement('div'); - colorDiv.className = 'palette-color'; - colorDiv.style.backgroundColor = color.hex; - - colorDiv.innerHTML = ` -
        -
        ${color.hex}
        - -
        - `; - - colorDiv.addEventListener('click', () => this.copyColor(color.hex)); - - container.appendChild(colorDiv); - }); - - document.getElementById('color-palette-display').style.display = 'block'; - } - - displayColorFormats(palette) { - const container = document.getElementById('color-format-list'); - container.innerHTML = ''; - - palette.forEach((color) => { - const formatDiv = document.createElement('div'); - formatDiv.className = 'color-formats-item'; - - formatDiv.innerHTML = ` -
        -
        -
        - HEX: - ${color.hex} -
        -
        - RGB: - rgb(${color.rgb[0]}, ${color.rgb[1]}, ${color.rgb[2]}) -
        -
        - HSL: - hsl(${Math.round(color.hsl[0])}, ${Math.round(color.hsl[1] * 100)}%, ${Math.round(color.hsl[2] * 100)}%) -
        -
        - `; - - container.appendChild(formatDiv); - }); - } - - copyColor(hex) { - this.copyText(hex); - } - - copyText(text) { - navigator.clipboard.writeText(text).then(() => { - window.app?.showMessage(`${text} copied to clipboard!`, 'success'); - }); - } - - hexToHsl(hex) { - const r = parseInt(hex.slice(1, 3), 16) / 255; - const g = parseInt(hex.slice(3, 5), 16) / 255; - const b = parseInt(hex.slice(5, 7), 16) / 255; - - const max = Math.max(r, g, b); - const min = Math.min(r, g, b); - let h, s, l = (max + min) / 2; - - if (max === min) { - h = s = 0; - } else { - const d = max - min; - s = l > 0.5 ? d / (2 - max - min) : d / (max + min); - switch (max) { - case r: h = (g - b) / d + (g < b ? 6 : 0); break; - case g: h = (b - r) / d + 2; break; - case b: h = (r - g) / d + 4; break; - } - h /= 6; - } - - return [h * 360, s, l]; - } - - hslToRgb([h, s, l]) { - h /= 360; - const hue2rgb = (p, q, t) => { - if (t < 0) t += 1; - if (t > 1) t -= 1; - if (t < 1/6) return p + (q - p) * 6 * t; - if (t < 1/2) return q; - if (t < 2/3) return p + (q - p) * (2/3 - t) * 6; - return p; - }; - - let r, g, b; - if (s === 0) { - r = g = b = l; - } else { - const q = l < 0.5 ? l * (1 + s) : l + s - l * s; - const p = 2 * l - q; - r = hue2rgb(p, q, h + 1/3); - g = hue2rgb(p, q, h); - b = hue2rgb(p, q, h - 1/3); - } - - return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]; - } - - hslToHex([h, s, l]) { - const [r, g, b] = this.hslToRgb([h, s, l]); - const toHex = (n) => { - const hex = n.toString(16); - return hex.length === 1 ? '0' + hex : hex; - }; - return `#${toHex(r)}${toHex(g)}${toHex(b)}`; - } - - isValidHexColor(hex) { - return /^#[0-9A-F]{6}$/i.test(hex); - } - - exportPalette() { - if (this.currentPalette.length === 0) { - window.app?.showMessage('Please generate a palette first.', 'error'); - return; - } - - const data = { - palette: this.currentPalette, - timestamp: new Date().toISOString(), - type: document.getElementById('palette-type').value - }; - - const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }); - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = 'color-palette.json'; - a.click(); - URL.revokeObjectURL(url); - } -} - -window.ColorPalette = new ColorPalette(); - -const colorPaletteStyles = ` -.color-input { - margin-bottom: 30px; -} - -.color-picker-group { - margin-bottom: 20px; -} - -.color-picker-group label { - display: block; - font-weight: 500; - color: #1d1d1f; - margin-bottom: 8px; -} - -.color-input-container { - display: flex; - gap: 15px; - align-items: center; -} - -#base-color { - width: 60px; - height: 40px; - border: 2px solid #f0f0f0; - border-radius: 8px; - cursor: pointer; -} - -#base-color-hex { - flex: 1; - padding: 10px 15px; - border: 2px solid #f0f0f0; - border-radius: 8px; - font-family: 'Monaco', 'Consolas', monospace; - font-size: 14px; - max-width: 150px; -} - -#base-color-hex:focus { - outline: none; - border-color: #667eea; -} - -.palette-type { - margin-bottom: 20px; -} - -.palette-type label { - display: block; - font-weight: 500; - color: #1d1d1f; - margin-bottom: 8px; -} - -.palette-type select { - padding: 10px 15px; - border: 2px solid #f0f0f0; - border-radius: 8px; - font-size: 14px; - min-width: 200px; -} - -.palette-type select:focus { - outline: none; - border-color: #667eea; -} - -.color-palette-display { - margin-top: 30px; -} - -.palette-colors { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); - gap: 15px; - margin-bottom: 30px; -} - -.palette-color { - height: 120px; - border-radius: 12px; - cursor: pointer; - position: relative; - overflow: hidden; - transition: transform 0.3s ease, box-shadow 0.3s ease; - border: 1px solid rgba(0,0,0,0.1); -} - -.palette-color:hover { - transform: translateY(-5px); - box-shadow: 0 8px 30px rgba(0,0,0,0.15); -} - -.color-overlay { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(0,0,0,0.7); - color: white; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - opacity: 0; - transition: opacity 0.3s ease; - gap: 10px; -} - -.palette-color:hover .color-overlay { - opacity: 1; -} - -.color-hex { - font-family: 'Monaco', 'Consolas', monospace; - font-size: 14px; - font-weight: bold; -} - -.copy-color { - background: rgba(255,255,255,0.2); - border: 1px solid rgba(255,255,255,0.3); - color: white; - padding: 8px 12px; - border-radius: 6px; - cursor: pointer; - font-size: 12px; - transition: all 0.3s ease; -} - -.copy-color:hover { - background: rgba(255,255,255,0.3); - border-color: rgba(255,255,255,0.5); -} - -.color-formats { - background: #f8f9fa; - border-radius: 12px; - padding: 20px; -} - -.color-formats h3 { - margin-top: 0; - margin-bottom: 20px; - color: #1d1d1f; -} - -.color-formats-item { - display: flex; - align-items: flex-start; - gap: 20px; - padding: 15px; - background: white; - border-radius: 8px; - margin: 15px 0; - border: 1px solid #e0e0e0; -} - -.color-sample { - width: 60px; - height: 60px; - border-radius: 8px; - border: 1px solid rgba(0,0,0,0.1); - flex-shrink: 0; -} - -.color-values { - flex: 1; -} - -.format-row { - display: flex; - align-items: center; - margin: 8px 0; - gap: 15px; -} - -.format-label { - font-weight: 500; - color: #666; - min-width: 50px; - font-size: 14px; -} - -.format-value { - font-family: 'Monaco', 'Consolas', monospace; - background: #f4f4f4; - padding: 4px 8px; - border-radius: 4px; - cursor: pointer; - transition: background-color 0.3s ease; - font-size: 13px; - color: #333; -} - -.format-value:hover { - background: #e0e0e0; -} - -@media (max-width: 768px) { - .color-input-container { - flex-direction: column; - align-items: stretch; - } - - #base-color-hex { - max-width: none; - } - - .palette-colors { - grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); - gap: 10px; - } - - .palette-color { - height: 100px; - } - - .color-formats-item { - flex-direction: column; - gap: 15px; - } - - .color-sample { - width: 100%; - height: 40px; - } -} -`; - -const colorPaletteStyle = document.createElement('style'); -colorPaletteStyle.textContent = colorPaletteStyles; -document.head.appendChild(colorPaletteStyle); \ No newline at end of file diff --git a/src/renderer/js/tools/cron-calculator.js b/src/renderer/js/tools/cron-calculator.js deleted file mode 100644 index bbe3f2ff..00000000 --- a/src/renderer/js/tools/cron-calculator.js +++ /dev/null @@ -1,372 +0,0 @@ -class CronCalculator { - constructor() { - this.init(); - } - - init() { - const generateBtn = document.getElementById('generate-cron'); - const parseBtn = document.getElementById('parse-cron'); - const cronFields = document.querySelectorAll('#cron-minute, #cron-hour, #cron-day, #cron-month, #cron-dow'); - const expressionInput = document.getElementById('cron-expression'); - - if (generateBtn) { - generateBtn.addEventListener('click', () => this.generateExpression()); - } - - if (parseBtn) { - parseBtn.addEventListener('click', () => this.parseExpression()); - } - - cronFields.forEach(field => { - field.addEventListener('input', () => this.updateFromFields()); - }); - - if (expressionInput) { - expressionInput.addEventListener('input', () => this.updateDescription()); - } - } - - generateExpression() { - const minute = document.getElementById('cron-minute').value.trim() || '*'; - const hour = document.getElementById('cron-hour').value.trim() || '*'; - const day = document.getElementById('cron-day').value.trim() || '*'; - const month = document.getElementById('cron-month').value.trim() || '*'; - const dow = document.getElementById('cron-dow').value.trim() || '*'; - - const expression = `${minute} ${hour} ${day} ${month} ${dow}`; - document.getElementById('cron-expression').value = expression; - - this.updateDescription(); - this.calculateNextRuns(); - window.app?.showMessage('Cron expression generated!', 'success'); - } - - parseExpression() { - const expression = document.getElementById('cron-expression').value.trim(); - - if (!expression) { - window.app?.showMessage('Please enter a cron expression to parse.', 'error'); - return; - } - - const parts = expression.split(/\s+/); - if (parts.length !== 5) { - window.app?.showMessage('Invalid cron expression. Must have 5 fields.', 'error'); - return; - } - - document.getElementById('cron-minute').value = parts[0]; - document.getElementById('cron-hour').value = parts[1]; - document.getElementById('cron-day').value = parts[2]; - document.getElementById('cron-month').value = parts[3]; - document.getElementById('cron-dow').value = parts[4]; - - this.updateDescription(); - this.calculateNextRuns(); - window.app?.showMessage('Cron expression parsed!', 'success'); - } - - updateFromFields() { - this.generateExpression(); - } - - updateDescription() { - const expression = document.getElementById('cron-expression').value.trim(); - const descriptionElement = document.getElementById('cron-description-text'); - - if (!expression) { - descriptionElement.textContent = 'Enter a cron expression to see description'; - return; - } - - try { - const description = this.describeCronExpression(expression); - descriptionElement.textContent = description; - } catch (error) { - descriptionElement.textContent = 'Invalid cron expression'; - } - } - - describeCronExpression(expression) { - const parts = expression.split(/\s+/); - if (parts.length !== 5) { - throw new Error('Invalid expression'); - } - - const [minute, hour, day, month, dow] = parts; - - let description = 'Runs '; - - const minuteDesc = this.describeField(minute, 'minute', ['past the hour', 'every minute']); - const hourDesc = this.describeField(hour, 'hour', ['', 'every hour']); - const dayDesc = this.describeField(day, 'day', ['on day', 'every day']); - const monthDesc = this.describeField(month, 'month', ['in', 'every month']); - const dowDesc = this.describeField(dow, 'weekday', ['on', 'every day']); - - if (minute === '*' && hour === '*' && day === '*' && month === '*' && dow === '*') { - return 'Runs every minute'; - } - - if (dow !== '*' && day === '*') { - description += `${dowDesc} at ${this.formatTime(hour, minute)}`; - } else if (day !== '*' && dow === '*') { - description += `${dayDesc} of ${monthDesc} at ${this.formatTime(hour, minute)}`; - } else if (day === '*' && dow === '*') { - description += `${hourDesc} ${minuteDesc} ${monthDesc}`; - } else { - description += `${dayDesc} of ${monthDesc} and ${dowDesc} at ${this.formatTime(hour, minute)}`; - } - - return description; - } - - describeField(field, type, prefixes) { - if (field === '*') { - return prefixes[1]; - } - - if (field.includes(',')) { - const values = field.split(','); - return `${prefixes[0]} ${values.join(', ')}`; - } - - if (field.includes('-')) { - const [start, end] = field.split('-'); - return `${prefixes[0]} ${start} through ${end}`; - } - - if (field.includes('/')) { - const [base, step] = field.split('/'); - if (base === '*') { - return `every ${step} ${type}${step > 1 ? 's' : ''}`; - } - return `every ${step} ${type}${step > 1 ? 's' : ''} starting at ${base}`; - } - - return `${prefixes[0]} ${field}`; - } - - formatTime(hour, minute) { - if (hour === '*' && minute === '*') { - return 'every minute'; - } - if (hour === '*') { - return `minute ${minute} of every hour`; - } - if (minute === '*') { - return `every minute of hour ${hour}`; - } - - const h = parseInt(hour); - const m = parseInt(minute); - const period = h >= 12 ? 'PM' : 'AM'; - const displayHour = h === 0 ? 12 : h > 12 ? h - 12 : h; - const displayMinute = m.toString().padStart(2, '0'); - - return `${displayHour}:${displayMinute} ${period}`; - } - - calculateNextRuns() { - const expression = document.getElementById('cron-expression').value.trim(); - const nextRunsList = document.getElementById('next-runs-list'); - - if (!expression) { - nextRunsList.innerHTML = '
      • Enter a cron expression
      • '; - return; - } - - try { - const nextRuns = this.getNextRuns(expression, 5); - nextRunsList.innerHTML = nextRuns.map(date => - `
      • ${date.toLocaleString()}
      • ` - ).join(''); - } catch (error) { - nextRunsList.innerHTML = '
      • Invalid cron expression
      • '; - } - } - - getNextRuns(expression, count) { - const parts = expression.split(/\s+/); - if (parts.length !== 5) { - throw new Error('Invalid expression'); - } - - const [minutePattern, hourPattern, dayPattern, monthPattern, dowPattern] = parts; - const runs = []; - let currentDate = new Date(); - currentDate.setSeconds(0, 0); - currentDate.setMinutes(currentDate.getMinutes() + 1); - - let attempts = 0; - const maxAttempts = 10000; - - while (runs.length < count && attempts < maxAttempts) { - attempts++; - - if (this.matchesCronPattern(currentDate, minutePattern, hourPattern, dayPattern, monthPattern, dowPattern)) { - runs.push(new Date(currentDate)); - } - - currentDate.setMinutes(currentDate.getMinutes() + 1); - } - - return runs; - } - - matchesCronPattern(date, minute, hour, day, month, dow) { - const dateMinute = date.getMinutes(); - const dateHour = date.getHours(); - const dateDay = date.getDate(); - const dateMonth = date.getMonth() + 1; - const dateDow = date.getDay(); - - return this.matchesPattern(dateMinute, minute, 0, 59) && - this.matchesPattern(dateHour, hour, 0, 23) && - this.matchesPattern(dateDay, day, 1, 31) && - this.matchesPattern(dateMonth, month, 1, 12) && - this.matchesPattern(dateDow, dow, 0, 7); - } - - matchesPattern(value, pattern, min, max) { - if (pattern === '*') { - return true; - } - - if (pattern.includes(',')) { - return pattern.split(',').some(p => this.matchesPattern(value, p.trim(), min, max)); - } - - if (pattern.includes('-')) { - const [start, end] = pattern.split('-').map(x => parseInt(x.trim())); - return value >= start && value <= end; - } - - if (pattern.includes('/')) { - const [base, step] = pattern.split('/'); - const stepNum = parseInt(step); - - if (base === '*') { - return (value - min) % stepNum === 0; - } else { - const baseNum = parseInt(base); - return value >= baseNum && (value - baseNum) % stepNum === 0; - } - } - - return value === parseInt(pattern); - } -} - -window.CronCalculator = new CronCalculator(); - -const cronStyles = ` -.cron-fields { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 15px; - margin-bottom: 20px; -} - -.cron-field { - display: flex; - flex-direction: column; - gap: 5px; -} - -.cron-field label { - font-weight: 500; - color: #1d1d1f; - font-size: 14px; -} - -.cron-field input { - padding: 8px 12px; - border: 2px solid #f0f0f0; - border-radius: 6px; - font-family: 'Monaco', 'Consolas', monospace; - font-size: 14px; - transition: border-color 0.3s ease; -} - -.cron-field input:focus { - outline: none; - border-color: #667eea; -} - -.cron-expression { - margin: 20px 0; -} - -.cron-expression label { - display: block; - font-weight: 500; - color: #1d1d1f; - margin-bottom: 8px; -} - -#cron-expression { - width: 100%; - padding: 12px 15px; - border: 2px solid #f0f0f0; - border-radius: 8px; - font-family: 'Monaco', 'Consolas', monospace; - font-size: 16px; - font-weight: bold; - text-align: center; - background: #f8f9fa; -} - -#cron-expression:focus { - outline: none; - border-color: #667eea; -} - -.cron-description, -.next-runs { - background: #f8f9fa; - border-radius: 8px; - padding: 20px; - margin: 20px 0; -} - -.cron-description h3, -.next-runs h3 { - margin-top: 0; - margin-bottom: 15px; - color: #1d1d1f; -} - -#cron-description-text { - color: #333; - line-height: 1.5; - font-size: 15px; -} - -#next-runs-list { - list-style: none; - padding: 0; - margin: 0; -} - -#next-runs-list li { - background: white; - padding: 10px 15px; - margin: 8px 0; - border-radius: 6px; - border: 1px solid #e0e0e0; - font-family: 'Monaco', 'Consolas', monospace; - font-size: 14px; - color: #333; -} - -.controls { - display: flex; - gap: 15px; - margin: 20px 0; - flex-wrap: wrap; -} -`; - -const cronCalculatorStyle = document.createElement('style'); -style.textContent = cronStyles; -document.head.appendChild(cronCalculatorStyle); \ No newline at end of file diff --git a/src/renderer/js/tools/csv-json.js b/src/renderer/js/tools/csv-json.js deleted file mode 100644 index 2234d0e9..00000000 --- a/src/renderer/js/tools/csv-json.js +++ /dev/null @@ -1,300 +0,0 @@ -class CSVJSONConverter { - constructor() { - this.init(); - } - - init() { - const tabButtons = document.querySelectorAll('#csv-json .tab-btn'); - const csvToJsonBtn = document.getElementById('csv-to-json-btn'); - const jsonToCsvBtn = document.getElementById('json-to-csv-btn'); - - tabButtons.forEach(button => { - button.addEventListener('click', () => { - this.switchTab(button.dataset.tab); - }); - }); - - if (csvToJsonBtn) { - csvToJsonBtn.addEventListener('click', () => this.convertCSVToJSON()); - } - - if (jsonToCsvBtn) { - jsonToCsvBtn.addEventListener('click', () => this.convertJSONToCSV()); - } - - const inputs = document.querySelectorAll('#csv-input, #json-for-csv-input'); - inputs.forEach(input => { - input.addEventListener('input', () => this.clearOutputs()); - }); - } - - switchTab(tabName) { - const container = document.getElementById('csv-json'); - - container.querySelectorAll('.tab-btn').forEach(btn => { - btn.classList.remove('active'); - }); - container.querySelectorAll('.tab-content').forEach(content => { - content.classList.remove('active'); - }); - - container.querySelector(`[data-tab="${tabName}"]`).classList.add('active'); - container.getElementById(`${tabName}-tab`).classList.add('active'); - - this.clearOutputs(); - } - - convertCSVToJSON() { - const input = document.getElementById('csv-input').value.trim(); - const output = document.getElementById('json-from-csv-output'); - const hasHeaders = document.getElementById('has-headers').checked; - const delimiter = document.getElementById('csv-delimiter').value; - - if (!input) { - window.app?.showMessage('Please enter CSV data to convert.', 'error'); - return; - } - - try { - const jsonResult = this.csvToJson(input, delimiter, hasHeaders); - output.textContent = JSON.stringify(jsonResult, null, 2); - window.app?.showMessage('CSV converted to JSON successfully!', 'success'); - } catch (error) { - window.app?.showMessage('Error converting CSV: ' + error.message, 'error'); - output.textContent = ''; - } - } - - convertJSONToCSV() { - const input = document.getElementById('json-for-csv-input').value.trim(); - const output = document.getElementById('csv-from-json-output'); - - if (!input) { - window.app?.showMessage('Please enter JSON array to convert.', 'error'); - return; - } - - try { - const jsonData = JSON.parse(input); - if (!Array.isArray(jsonData)) { - throw new Error('JSON must be an array of objects'); - } - - const csvResult = this.jsonToCsv(jsonData); - output.value = csvResult; - window.app?.showMessage('JSON converted to CSV successfully!', 'success'); - } catch (error) { - window.app?.showMessage('Error converting JSON: ' + error.message, 'error'); - output.value = ''; - } - } - - csvToJson(csvString, delimiter = ',', hasHeaders = true) { - const lines = this.parseCSVLines(csvString); - if (lines.length === 0) { - throw new Error('No data found'); - } - - const result = []; - let headers = []; - - if (hasHeaders) { - headers = this.parseCSVLine(lines[0], delimiter); - for (let i = 1; i < lines.length; i++) { - const values = this.parseCSVLine(lines[i], delimiter); - if (values.length > 0) { - const obj = {}; - headers.forEach((header, index) => { - obj[header] = values[index] || ''; - }); - result.push(obj); - } - } - } else { - for (let i = 0; i < lines.length; i++) { - const values = this.parseCSVLine(lines[i], delimiter); - if (values.length > 0) { - result.push(values); - } - } - } - - return result; - } - - jsonToCsv(jsonArray) { - if (jsonArray.length === 0) { - return ''; - } - - const headers = Object.keys(jsonArray[0]); - const csvLines = []; - - csvLines.push(headers.map(header => this.escapeCSVValue(header)).join(',')); - - jsonArray.forEach(obj => { - const values = headers.map(header => { - const value = obj[header]; - return this.escapeCSVValue(value !== undefined ? String(value) : ''); - }); - csvLines.push(values.join(',')); - }); - - return csvLines.join('\n'); - } - - parseCSVLines(csvString) { - return csvString.split(/\r?\n/).filter(line => line.trim()); - } - - parseCSVLine(line, delimiter = ',') { - const result = []; - let current = ''; - let inQuotes = false; - let quoteChar = '"'; - - for (let i = 0; i < line.length; i++) { - const char = line[i]; - const nextChar = line[i + 1]; - - if (char === quoteChar && !inQuotes) { - inQuotes = true; - } else if (char === quoteChar && inQuotes) { - if (nextChar === quoteChar) { - current += quoteChar; - i++; - } else { - inQuotes = false; - } - } else if (char === delimiter && !inQuotes) { - result.push(current.trim()); - current = ''; - } else { - current += char; - } - } - - result.push(current.trim()); - return result; - } - - escapeCSVValue(value) { - if (value.includes(',') || value.includes('"') || value.includes('\n')) { - return '"' + value.replace(/"/g, '""') + '"'; - } - return value; - } - - clearOutputs() { - document.getElementById('json-from-csv-output').textContent = ''; - document.getElementById('csv-from-json-output').value = ''; - } - - downloadCSV() { - const output = document.getElementById('csv-from-json-output'); - if (output.value.trim()) { - const blob = new Blob([output.value], { type: 'text/csv' }); - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = 'converted.csv'; - a.click(); - URL.revokeObjectURL(url); - } - } - - downloadJSON() { - const output = document.getElementById('json-from-csv-output'); - if (output.textContent.trim()) { - const blob = new Blob([output.textContent], { type: 'application/json' }); - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = 'converted.json'; - a.click(); - URL.revokeObjectURL(url); - } - } -} - -window.CSVJSONConverter = new CSVJSONConverter(); - -const csvJsonStyles = ` -.csv-options { - display: flex; - gap: 20px; - margin-bottom: 15px; - flex-wrap: wrap; - align-items: center; -} - -.csv-options label { - display: flex; - align-items: center; - gap: 8px; - font-size: 14px; - color: #1d1d1f; - white-space: nowrap; -} - -.csv-options select { - padding: 4px 8px; - border: 1px solid #d0d0d0; - border-radius: 4px; - font-size: 14px; -} - -.csv-options input[type="checkbox"] { - margin: 0; -} - -#csv-input, -#json-for-csv-input { - min-height: 150px; - font-family: 'Monaco', 'Consolas', monospace; - font-size: 13px; -} - -#json-from-csv-output { - background-color: #f8f9fa; - border: 2px solid #f0f0f0; - border-radius: 8px; - padding: 15px; - font-family: 'Monaco', 'Consolas', monospace; - font-size: 12px; - line-height: 1.4; - white-space: pre; - overflow: auto; - max-height: 400px; - min-height: 150px; -} - -#csv-from-json-output { - min-height: 150px; - font-family: 'Monaco', 'Consolas', monospace; - font-size: 13px; -} - -.converter-tabs { - border-bottom: 2px solid #f0f0f0; - margin-bottom: 20px; -} - -.tab-content { - display: none; -} - -.tab-content.active { - display: block; -} - -.tab-content textarea, -.tab-content pre { - width: 100%; - margin: 15px 0; -} -`; - -const csvJsonStyle = document.createElement('style'); -csvJsonStyle.textContent = csvJsonStyles; -document.head.appendChild(csvJsonStyle); \ No newline at end of file diff --git a/src/renderer/js/tools/date-difference.js b/src/renderer/js/tools/date-difference.js deleted file mode 100644 index 77a9278a..00000000 --- a/src/renderer/js/tools/date-difference.js +++ /dev/null @@ -1,223 +0,0 @@ -/** - * DateDifference class - * This class provides functionality to calculate the difference between two dates - * and the difference between two times. It initializes the date difference calculator - * and sets up event listeners for user interactions. - * It calculates the difference in years, months, weeks, days, hours, minutes, and seconds. - * @class - * @author MsM Robin - * @version 1.0.0 - * @date 2025-08-23 - */ -class DateDifference { - /** - * Constructor for the DateDifference class. - * Initializes the date difference calculator and sets up event listeners. - * It binds the input fields and buttons to their respective DOM elements. - * @constructor - * @this {DateDifference} - * @return {void} - */ - constructor() { - this.init(); - } - - init() { - this.fromDateInput = document.getElementById('fromDate'); - this.toDateInput = document.getElementById('toDate'); - this.calculateButton = document.getElementById('calculate'); - this.resultDiv = document.getElementById('result'); - - // Time Difference Dom - this.time1Input = document.getElementById('time1'); - this.time2Input = document.getElementById('time2'); - this.calculateTimeButton = document.getElementById('timeCalculate'); - this.timeResultDiv = document.getElementById('timeResult'); - - this.setupEventListeners(); - } - - /** - * Sets up event listeners for the date difference calculator. - * This method binds the click events for the calculate buttons to their respective functions. - * It also initializes the time difference calculator with its own event listeners. - * @return {void} - */ - setupEventListeners() { - this.calculateButton.addEventListener('click', () => { - this.calculateDifference(); - }); - - this.calculateTimeButton.addEventListener('click', () => { - this.calculateTimeDifference(); - }); - - // Make date inputs show calendar when clicked - this.fromDateInput.addEventListener('click', () => { - this.showCalendar(this.fromDateInput); - }); - - this.toDateInput.addEventListener('click', () => { - this.showCalendar(this.toDateInput); - }); - - // Make time inputs show time picker when clicked - this.time1Input.addEventListener('click', () => { - this.showTimePicker(this.time1Input); - }); - - this.time2Input.addEventListener('click', () => { - this.showTimePicker(this.time2Input); - }); - - // Add double-click fallback for browsers that restrict picker triggering - this.fromDateInput.addEventListener('dblclick', () => { - this.fromDateInput.focus(); - }); - - this.toDateInput.addEventListener('dblclick', () => { - this.toDateInput.focus(); - }); - - this.time1Input.addEventListener('dblclick', () => { - this.time1Input.focus(); - }); - - this.time2Input.addEventListener('dblclick', () => { - this.time2Input.focus(); - }); - } - - /** - * Shows the calendar for date inputs by triggering the native date picker - * @param {HTMLInputElement} input - The date input element - */ - showCalendar(input) { - if (input.type === 'date') { - // Try modern showPicker API first - if (typeof input.showPicker === 'function') { - input.showPicker(); - } else { - // Fallback: focus and click to trigger native picker - input.focus(); - // Simulate a click on the calendar icon area - const rect = input.getBoundingClientRect(); - const event = new MouseEvent('click', { - view: window, - bubbles: true, - cancelable: true, - clientX: rect.right - 20, - clientY: rect.top + rect.height / 2 - }); - input.dispatchEvent(event); - } - } - } - - /** - * Shows the time picker for time inputs by triggering the native time picker - * @param {HTMLInputElement} input - The time input element - */ - showTimePicker(input) { - if (input.type === 'time') { - // Try modern showPicker API first - if (typeof input.showPicker === 'function') { - input.showPicker(); - } else { - // Fallback: focus and click to trigger native picker - input.focus(); - // Simulate a click on the time picker icon area - const rect = input.getBoundingClientRect(); - const event = new MouseEvent('click', { - view: window, - bubbles: true, - cancelable: true, - clientX: rect.right - 20, - clientY: rect.top + rect.height / 2 - }); - input.dispatchEvent(event); - } - } - } - - /** - * Calculates the difference between two dates. - * It retrieves the values from the input fields, converts them to Date objects, - * and calculates the absolute difference in milliseconds. - * The difference is then converted into years, months, weeks, and days. - * The result is displayed in the resultDiv element. - * @return {void} - */ - calculateDifference() { - const fromDate = new Date(this.fromDateInput.value); - const toDate = new Date(this.toDateInput.value); - - if (isNaN(fromDate.getTime()) || isNaN(toDate.getTime())) { - this.resultDiv.textContent = 'Please enter valid dates.'; - this.resultDiv.style.display = 'block'; - return; - } - - let diff = Math.abs(fromDate.getTime() - toDate.getTime()); - - const years = Math.floor(diff / (1000 * 60 * 60 * 24 * 365)); - diff -= years * (1000 * 60 * 60 * 24 * 365); - - const months = Math.floor(diff / (1000 * 60 * 60 * 24 * 30)); - diff -= months * (1000 * 60 * 60 * 24 * 30); - - const weeks = Math.floor(diff / (1000 * 60 * 60 * 24 * 7)); - diff -= weeks * (1000 * 60 * 60 * 24 * 7); - - const days = Math.floor(diff / (1000 * 60 * 60 * 24)); - diff -= days * (1000 * 60 * 60 * 24); - - this.resultDiv.innerHTML = ` -

        Years: ${years}

        -

        Months: ${months}

        -

        Weeks: ${weeks}

        -

        Days: ${days}

        - `; - this.resultDiv.style.display = 'block'; - } - - - /** - * Calculates the difference between two times. - * It retrieves the values from the time input fields, splits them into hours, minutes, - * and seconds, and converts them into Date objects. - * @return {void} - */ - calculateTimeDifference() { - const time1 = this.time1Input.value.split(':').map(Number); - const time2 = this.time2Input.value.split(':').map(Number); - - if (time1.length !== 2 || time2.length !== 2) { - this.timeResultDiv.textContent = 'Please enter valid times in HH:MM:SS format.'; - this.timeResultDiv.style.display = 'block'; - return; - } - - const date1 = new Date(0, 0, 0, ...time1); - const date2 = new Date(0, 0, 0, ...time2); - - let diff = Math.abs(date1.getTime() - date2.getTime()); - - const hours = Math.floor(diff / (1000 * 60 * 60)); - diff -= hours * (1000 * 60 * 60); - - const minutes = Math.floor(diff / (1000 * 60)); - diff -= minutes * (1000 * 60); - - const seconds = Math.floor(diff / 1000); - - this.timeResultDiv.innerHTML = ` -

        Hours: ${hours}

        -

        Minutes: ${minutes}

        -

        Seconds: ${seconds}

        - `; - this.timeResultDiv.style.display = 'block'; - } -} - -window.DateDifference = new DateDifference(); \ No newline at end of file diff --git a/src/renderer/js/tools/image-converter.js b/src/renderer/js/tools/image-converter.js deleted file mode 100644 index ca82b281..00000000 --- a/src/renderer/js/tools/image-converter.js +++ /dev/null @@ -1,295 +0,0 @@ -class ImageConverter { - constructor() { - this.currentImage = null; - this.init(); - } - - init() { - const dropZone = document.getElementById('image-drop-zone'); - const fileInput = document.getElementById('image-file-input'); - const convertBtn = document.getElementById('convert-image'); - const formatSelect = document.getElementById('output-format'); - const qualitySlider = document.getElementById('quality-slider'); - const qualityValue = document.getElementById('quality-value'); - - if (dropZone) { - dropZone.addEventListener('click', () => fileInput?.click()); - dropZone.addEventListener('dragover', (e) => this.handleDragOver(e)); - dropZone.addEventListener('drop', (e) => this.handleDrop(e)); - dropZone.addEventListener('dragleave', (e) => this.handleDragLeave(e)); - } - - if (fileInput) { - fileInput.addEventListener('change', (e) => this.handleFileSelect(e)); - } - - if (convertBtn) { - convertBtn.addEventListener('click', () => this.convertImage()); - } - - if (formatSelect) { - formatSelect.addEventListener('change', () => this.toggleQualityOptions()); - } - - if (qualitySlider) { - qualitySlider.addEventListener('input', (e) => { - qualityValue.textContent = e.target.value; - }); - } - } - - handleDragOver(e) { - e.preventDefault(); - e.stopPropagation(); - e.currentTarget.style.backgroundColor = '#f0f8ff'; - e.currentTarget.style.borderColor = '#667eea'; - } - - handleDragLeave(e) { - e.preventDefault(); - e.stopPropagation(); - e.currentTarget.style.backgroundColor = ''; - e.currentTarget.style.borderColor = ''; - } - - handleDrop(e) { - e.preventDefault(); - e.stopPropagation(); - e.currentTarget.style.backgroundColor = ''; - e.currentTarget.style.borderColor = ''; - - const files = e.dataTransfer.files; - if (files.length > 0) { - this.processFile(files[0]); - } - } - - handleFileSelect(e) { - const files = e.target.files; - if (files.length > 0) { - this.processFile(files[0]); - } - } - - processFile(file) { - if (!file.type.startsWith('image/')) { - window.app?.showMessage('Please select a valid image file.', 'error'); - return; - } - - if (file.size > 50 * 1024 * 1024) { - window.app?.showMessage('File size should be less than 50MB.', 'error'); - return; - } - - const reader = new FileReader(); - reader.onload = (e) => { - this.loadImage(e.target.result, file); - }; - reader.readAsDataURL(file); - } - - loadImage(dataUrl, file) { - const img = new Image(); - img.onload = () => { - this.currentImage = { - img, - dataUrl, - file, - width: img.width, - height: img.height - }; - this.showImagePreview(); - this.showConversionOptions(); - }; - img.src = dataUrl; - } - - showImagePreview() { - const preview = document.getElementById('image-preview'); - const previewImg = document.getElementById('preview-image'); - const imageName = document.getElementById('image-name'); - const imageSize = document.getElementById('image-size'); - const imageDimensions = document.getElementById('image-dimensions'); - - previewImg.src = this.currentImage.dataUrl; - imageName.textContent = this.currentImage.file.name; - imageSize.textContent = this.formatFileSize(this.currentImage.file.size); - imageDimensions.textContent = `${this.currentImage.width} × ${this.currentImage.height}`; - - preview.style.display = 'block'; - } - - showConversionOptions() { - const options = document.getElementById('conversion-options'); - options.style.display = 'block'; - this.toggleQualityOptions(); - } - - toggleQualityOptions() { - const format = document.getElementById('output-format').value; - const qualityOptions = document.getElementById('quality-options'); - - if (format === 'jpeg' || format === 'webp') { - qualityOptions.style.display = 'block'; - } else { - qualityOptions.style.display = 'none'; - } - } - - convertImage() { - if (!this.currentImage) { - window.app?.showMessage('Please select an image first.', 'error'); - return; - } - - const format = document.getElementById('output-format').value; - const quality = document.getElementById('quality-slider').value / 100; - - const canvas = document.createElement('canvas'); - const ctx = canvas.getContext('2d'); - - canvas.width = this.currentImage.width; - canvas.height = this.currentImage.height; - - if (format === 'jpeg') { - ctx.fillStyle = 'white'; - ctx.fillRect(0, 0, canvas.width, canvas.height); - } - - ctx.drawImage(this.currentImage.img, 0, 0); - - let mimeType = 'image/' + format; - if (format === 'jpeg') { - mimeType = 'image/jpeg'; - } - - const convertedDataUrl = canvas.toDataURL(mimeType, quality); - this.downloadImage(convertedDataUrl, format); - } - - downloadImage(dataUrl, format) { - const link = document.createElement('a'); - const originalName = this.currentImage.file.name.split('.')[0]; - - link.download = `${originalName}.${format}`; - link.href = dataUrl; - link.click(); - - window.app?.showMessage(`Image converted and downloaded as ${format.toUpperCase()}!`, 'success'); - } - - formatFileSize(bytes) { - if (bytes === 0) return '0 Bytes'; - - const k = 1024; - const sizes = ['Bytes', 'KB', 'MB', 'GB']; - const i = Math.floor(Math.log(bytes) / Math.log(k)); - - return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; - } -} - -window.ImageConverter = new ImageConverter(); - -const imageStyles = ` -.file-drop-zone { - border: 2px dashed #d0d0d0; - border-radius: 8px; - padding: 40px 20px; - text-align: center; - cursor: pointer; - transition: all 0.3s ease; - background-color: #fafafa; -} - -.file-drop-zone:hover { - border-color: #667eea; - background-color: #f0f8ff; -} - -.file-drop-zone i { - font-size: 3rem; - color: #86868b; - margin-bottom: 15px; -} - -.file-drop-zone p { - color: #86868b; - margin: 0; - font-size: 16px; -} - -.image-preview { - margin: 20px 0; - text-align: center; -} - -#preview-image { - max-width: 100%; - max-height: 300px; - border-radius: 8px; - box-shadow: 0 4px 20px rgba(0,0,0,0.1); -} - -.image-info { - display: flex; - justify-content: center; - gap: 20px; - margin-top: 15px; - flex-wrap: wrap; -} - -.image-info span { - background: #f0f0f0; - padding: 5px 12px; - border-radius: 20px; - font-size: 12px; - color: #666; -} - -.conversion-options { - background: #f8f9fa; - border-radius: 8px; - padding: 20px; - margin-top: 20px; -} - -.format-options, -.quality-options { - display: flex; - align-items: center; - gap: 15px; - margin-bottom: 15px; - flex-wrap: wrap; -} - -.format-options label, -.quality-options label { - font-weight: 500; - color: #1d1d1f; -} - -.format-options select { - padding: 8px 12px; - border: 2px solid #f0f0f0; - border-radius: 6px; - font-size: 14px; -} - -#quality-slider { - flex: 1; - min-width: 150px; -} - -#quality-value { - min-width: 35px; - text-align: right; - font-weight: bold; - color: #667eea; -} -`; - -const imageConverterStyle = document.createElement('style'); -style.textContent = imageStyles; -document.head.appendChild(imageConverterStyle); \ No newline at end of file diff --git a/src/renderer/js/tools/json-to-ts.js b/src/renderer/js/tools/json-to-ts.js deleted file mode 100644 index f573326b..00000000 --- a/src/renderer/js/tools/json-to-ts.js +++ /dev/null @@ -1,142 +0,0 @@ -class JSONToTypeScript { - constructor() { - this.init(); - } - - init() { - const convertBtn = document.getElementById('convert-to-ts'); - const clearBtn = document.getElementById('clear-ts'); - const inputTextarea = document.getElementById('json-to-ts-input'); - - if (convertBtn) { - convertBtn.addEventListener('click', () => this.convertToTypeScript()); - } - - if (clearBtn) { - clearBtn.addEventListener('click', () => this.clearAll()); - } - - if (inputTextarea) { - inputTextarea.addEventListener('input', () => this.clearOutput()); - } - } - - convertToTypeScript() { - const input = document.getElementById('json-to-ts-input').value.trim(); - const output = document.getElementById('typescript-output'); - - if (!input) { - window.app?.showMessage('Please enter JSON data to convert.', 'error'); - return; - } - - try { - const parsed = JSON.parse(input); - const typescript = this.generateTypeScript(parsed, 'RootObject'); - output.textContent = typescript; - window.app?.showMessage('JSON converted to TypeScript!', 'success'); - } catch (error) { - window.app?.showMessage('Error: Invalid JSON format', 'error'); - output.textContent = ''; - } - } - - generateTypeScript(obj, interfaceName = 'RootObject', level = 0) { - const indent = ' '.repeat(level); - let result = ''; - - if (Array.isArray(obj)) { - if (obj.length === 0) { - return 'any[]'; - } - const firstItem = obj[0]; - if (typeof firstItem === 'object' && firstItem !== null) { - const itemInterface = this.generateTypeScript(firstItem, interfaceName + 'Item', level + 1); - return itemInterface + '\n' + indent + `type ${interfaceName} = ${interfaceName}Item[];`; - } else { - return `${this.getTypeScriptType(firstItem)}[]`; - } - } - - if (typeof obj === 'object' && obj !== null) { - result += `${indent}interface ${interfaceName} {\n`; - - const nestedInterfaces = []; - - for (const [key, value] of Object.entries(obj)) { - const safeKey = this.makeSafePropertyName(key); - const optional = this.shouldBeOptional(value) ? '?' : ''; - - if (Array.isArray(value)) { - if (value.length === 0) { - result += `${indent} ${safeKey}${optional}: any[];\n`; - } else { - const firstItem = value[0]; - if (typeof firstItem === 'object' && firstItem !== null) { - const itemInterfaceName = this.capitalizeFirst(safeKey) + 'Item'; - const itemInterface = this.generateTypeScript(firstItem, itemInterfaceName, level + 1); - nestedInterfaces.push(itemInterface); - result += `${indent} ${safeKey}${optional}: ${itemInterfaceName}[];\n`; - } else { - result += `${indent} ${safeKey}${optional}: ${this.getTypeScriptType(firstItem)}[];\n`; - } - } - } else if (typeof value === 'object' && value !== null) { - const nestedInterfaceName = this.capitalizeFirst(safeKey); - const nestedInterface = this.generateTypeScript(value, nestedInterfaceName, level + 1); - nestedInterfaces.push(nestedInterface); - result += `${indent} ${safeKey}${optional}: ${nestedInterfaceName};\n`; - } else { - result += `${indent} ${safeKey}${optional}: ${this.getTypeScriptType(value)};\n`; - } - } - - result += `${indent}}\n`; - - if (nestedInterfaces.length > 0) { - result = nestedInterfaces.join('\n') + '\n' + result; - } - - return result; - } - - return this.getTypeScriptType(obj); - } - - getTypeScriptType(value) { - if (value === null) return 'any'; - if (typeof value === 'string') return 'string'; - if (typeof value === 'number') return 'number'; - if (typeof value === 'boolean') return 'boolean'; - if (Array.isArray(value)) return 'any[]'; - if (typeof value === 'object') return 'object'; - return 'any'; - } - - makeSafePropertyName(key) { - if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) { - return key; - } - return `"${key}"`; - } - - shouldBeOptional(value) { - return value === null || value === undefined; - } - - capitalizeFirst(str) { - return str.charAt(0).toUpperCase() + str.slice(1); - } - - clearAll() { - document.getElementById('json-to-ts-input').value = ''; - this.clearOutput(); - window.app?.showMessage('Cleared!', 'info'); - } - - clearOutput() { - document.getElementById('typescript-output').textContent = ''; - } -} - -window.JSONToTypeScript = new JSONToTypeScript(); \ No newline at end of file diff --git a/src/renderer/js/tools/json-viewer.js b/src/renderer/js/tools/json-viewer.js deleted file mode 100644 index 62b96f5d..00000000 --- a/src/renderer/js/tools/json-viewer.js +++ /dev/null @@ -1,146 +0,0 @@ -class JSONViewer { - constructor() { - this.init(); - } - - init() { - const formatBtn = document.getElementById('format-json'); - const minifyBtn = document.getElementById('minify-json'); - const validateBtn = document.getElementById('validate-json'); - const inputTextarea = document.getElementById('json-input'); - const outputPre = document.getElementById('json-output'); - - if (formatBtn) { - formatBtn.addEventListener('click', () => this.formatJSON()); - } - - if (minifyBtn) { - minifyBtn.addEventListener('click', () => this.minifyJSON()); - } - - if (validateBtn) { - validateBtn.addEventListener('click', () => this.validateJSON()); - } - - if (inputTextarea) { - inputTextarea.addEventListener('input', () => this.clearOutput()); - } - } - - formatJSON() { - const input = document.getElementById('json-input').value; - const output = document.getElementById('json-output'); - - if (!input.trim()) { - this.showError('Please enter JSON data to format.'); - return; - } - - try { - const parsed = JSON.parse(input); - const formatted = JSON.stringify(parsed, null, 2); - output.textContent = formatted; - output.className = 'formatted-json'; - this.clearErrors(); - window.app?.showMessage('JSON formatted successfully!', 'success'); - } catch (error) { - this.showError(`Invalid JSON: ${error.message}`); - } - } - - minifyJSON() { - const input = document.getElementById('json-input').value; - const output = document.getElementById('json-output'); - - if (!input.trim()) { - this.showError('Please enter JSON data to minify.'); - return; - } - - try { - const parsed = JSON.parse(input); - const minified = JSON.stringify(parsed); - output.textContent = minified; - output.className = 'minified-json'; - this.clearErrors(); - window.app?.showMessage('JSON minified successfully!', 'success'); - } catch (error) { - this.showError(`Invalid JSON: ${error.message}`); - } - } - - validateJSON() { - const input = document.getElementById('json-input').value; - const output = document.getElementById('json-output'); - - if (!input.trim()) { - this.showError('Please enter JSON data to validate.'); - return; - } - - try { - const parsed = JSON.parse(input); - const info = this.getJSONInfo(parsed); - output.innerHTML = `

        ✅ Valid JSON

        Type: ${info.type}

        Size: ${info.size} characters

        Keys: ${info.keys}

        Depth: ${info.depth}

        `; - this.clearErrors(); - window.app?.showMessage('JSON is valid!', 'success'); - } catch (error) { - this.showError(`Invalid JSON: ${error.message}`); - output.innerHTML = `

        ❌ Invalid JSON

        ${error.message}

        `; - } - } - - getJSONInfo(obj) { - const type = Array.isArray(obj) ? 'Array' : typeof obj; - const size = JSON.stringify(obj).length; - const keys = this.countKeys(obj); - const depth = this.getMaxDepth(obj); - - return { type, size, keys, depth }; - } - - countKeys(obj) { - if (typeof obj !== 'object' || obj === null) return 0; - if (Array.isArray(obj)) return obj.length; - - let count = 0; - for (let key in obj) { - if (obj.hasOwnProperty(key)) { - count++; - if (typeof obj[key] === 'object' && obj[key] !== null) { - count += this.countKeys(obj[key]); - } - } - } - return count; - } - - getMaxDepth(obj, depth = 0) { - if (typeof obj !== 'object' || obj === null) return depth; - - let maxDepth = depth; - for (let key in obj) { - if (obj.hasOwnProperty(key)) { - maxDepth = Math.max(maxDepth, this.getMaxDepth(obj[key], depth + 1)); - } - } - return maxDepth; - } - - showError(message) { - const output = document.getElementById('json-output'); - output.innerHTML = `
        ${message}
        `; - } - - clearErrors() { - const existingErrors = document.querySelectorAll('.error'); - existingErrors.forEach(error => error.remove()); - } - - clearOutput() { - const output = document.getElementById('json-output'); - output.textContent = ''; - } -} - -window.JSONViewer = new JSONViewer(); \ No newline at end of file diff --git a/src/renderer/js/tools/jwt-decoder.js b/src/renderer/js/tools/jwt-decoder.js deleted file mode 100644 index dafaf7b2..00000000 --- a/src/renderer/js/tools/jwt-decoder.js +++ /dev/null @@ -1,121 +0,0 @@ -class JWTDecoder { - constructor() { - this.init(); - } - - init() { - const decodeBtn = document.getElementById('decode-jwt'); - const jwtInput = document.getElementById('jwt-input'); - - if (decodeBtn) { - decodeBtn.addEventListener('click', () => this.decodeJWT()); - } - - if (jwtInput) { - jwtInput.addEventListener('input', () => this.clearOutput()); - } - } - - decodeJWT() { - const input = document.getElementById('jwt-input').value.trim(); - const headerOutput = document.getElementById('jwt-header'); - const payloadOutput = document.getElementById('jwt-payload'); - const signatureOutput = document.getElementById('jwt-signature'); - - if (!input) { - window.app?.showMessage('Please enter a JWT token to decode.', 'error'); - return; - } - - try { - const parts = input.split('.'); - - if (parts.length !== 3) { - throw new Error('Invalid JWT format. JWT should have 3 parts separated by dots.'); - } - - const [headerPart, payloadPart, signaturePart] = parts; - - const header = this.decodeJWTPart(headerPart); - const payload = this.decodeJWTPart(payloadPart); - - headerOutput.textContent = JSON.stringify(header, null, 2); - payloadOutput.textContent = JSON.stringify(payload, null, 2); - signatureOutput.textContent = signaturePart; - - this.highlightClaimsInfo(payload); - - window.app?.showMessage('JWT decoded successfully!', 'success'); - } catch (error) { - window.app?.showMessage('Error decoding JWT: ' + error.message, 'error'); - this.clearOutput(); - } - } - - decodeJWTPart(part) { - try { - const base64 = part.replace(/-/g, '+').replace(/_/g, '/'); - const padded = base64.padEnd(base64.length + (4 - base64.length % 4) % 4, '='); - const decoded = atob(padded); - return JSON.parse(decoded); - } catch (error) { - throw new Error('Failed to decode JWT part: ' + error.message); - } - } - - highlightClaimsInfo(payload) { - const payloadOutput = document.getElementById('jwt-payload'); - let infoHtml = JSON.stringify(payload, null, 2); - - if (payload.exp) { - const expDate = new Date(payload.exp * 1000); - const now = new Date(); - const isExpired = expDate < now; - - infoHtml += `\n\n/* Token Information */\n`; - infoHtml += `/* Expires: ${expDate.toLocaleString()} */\n`; - infoHtml += `/* Status: ${isExpired ? '🔴 EXPIRED' : '🟢 VALID'} */\n`; - - if (payload.iat) { - const iatDate = new Date(payload.iat * 1000); - infoHtml += `/* Issued: ${iatDate.toLocaleString()} */\n`; - } - - if (payload.nbf) { - const nbfDate = new Date(payload.nbf * 1000); - infoHtml += `/* Not Before: ${nbfDate.toLocaleString()} */\n`; - } - } - - if (payload.iss) { - infoHtml += `/* Issuer: ${payload.iss} */\n`; - } - - if (payload.aud) { - infoHtml += `/* Audience: ${Array.isArray(payload.aud) ? payload.aud.join(', ') : payload.aud} */\n`; - } - - if (payload.sub) { - infoHtml += `/* Subject: ${payload.sub} */\n`; - } - - payloadOutput.textContent = infoHtml; - } - - clearOutput() { - document.getElementById('jwt-header').textContent = ''; - document.getElementById('jwt-payload').textContent = ''; - document.getElementById('jwt-signature').textContent = ''; - } - - copySection(section) { - const element = document.getElementById(`jwt-${section}`); - if (element && element.textContent.trim()) { - navigator.clipboard.writeText(element.textContent).then(() => { - window.app?.showMessage(`JWT ${section} copied to clipboard!`, 'success'); - }); - } - } -} - -window.JWTDecoder = new JWTDecoder(); \ No newline at end of file diff --git a/src/renderer/js/tools/lorem-generator.js b/src/renderer/js/tools/lorem-generator.js deleted file mode 100644 index 83cabf64..00000000 --- a/src/renderer/js/tools/lorem-generator.js +++ /dev/null @@ -1,430 +0,0 @@ -class LoremGenerator { - constructor() { - // Use the same word list as our tested utils - this.LOREM_WORDS = [ - 'lorem', - 'ipsum', - 'dolor', - 'sit', - 'amet', - 'consectetur', - 'adipiscing', - 'elit', - 'sed', - 'do', - 'eiusmod', - 'tempor', - 'incididunt', - 'ut', - 'labore', - 'et', - 'dolore', - 'magna', - 'aliqua', - 'enim', - 'ad', - 'minim', - 'veniam', - 'quis', - 'nostrud', - 'exercitation', - 'ullamco', - 'laboris', - 'nisi', - 'aliquip', - 'ex', - 'ea', - 'commodo', - 'consequat', - 'duis', - 'aute', - 'irure', - 'in', - 'reprehenderit', - 'voluptate', - 'velit', - 'esse', - 'cillum', - 'fugiat', - 'nulla', - 'pariatur', - 'excepteur', - 'sint', - 'occaecat', - 'cupidatat', - 'non', - 'proident', - 'sunt', - 'culpa', - 'qui', - 'officia', - 'deserunt', - 'mollit', - 'anim', - 'id', - 'est', - 'laborum', - 'at', - 'vero', - 'eos', - 'accusamus', - 'accusantium', - 'doloremque', - 'laudantium', - 'totam', - 'rem', - 'aperiam', - 'eaque', - 'ipsa', - 'quae', - 'ab', - 'illo', - 'inventore', - 'veritatis', - 'et', - 'quasi', - 'architecto', - 'beatae', - 'vitae', - 'dicta', - 'sunt', - 'explicabo', - 'nemo', - 'ipsam', - 'voluptatem', - 'quia', - 'voluptas', - 'aspernatur', - 'aut', - 'odit', - 'fugit', - 'sed', - 'quia', - 'consequuntur', - 'magni', - 'dolores', - 'ratione', - 'sequi', - 'nesciunt', - 'neque', - 'porro', - 'quisquam', - 'dolorem', - 'adipisci', - 'numquam', - 'eius', - 'modi', - 'tempora', - 'incidunt', - 'magnam', - 'quaerat', - 'voluptatem', - 'laudantium', - 'doloremque', - 'laudantium', - ]; - this.init(); - } - - init() { - const generateBtn = document.getElementById('generate-lorem'); - const typeSelect = document.getElementById('lorem-type'); - const countInput = document.getElementById('lorem-count'); - - console.log('LoremGenerator init:', { - generateBtn: !!generateBtn, - typeSelect: !!typeSelect, - countInput: !!countInput, - }); - - // Alert for debugging in case console isn't visible - if (!generateBtn || !typeSelect || !countInput) { - window.app?.showMessage( - 'Lorem Generator: Some elements not found!', - 'error' - ); - } - - if (generateBtn) { - generateBtn.addEventListener('click', (e) => { - console.log('Generate lorem button clicked'); - window.app?.showMessage('Button clicked!', 'info'); - this.generateLorem(); - }); - } else { - console.error('Generate button not found!'); - window.app?.showMessage('Generate button not found!', 'error'); - } - - if (typeSelect) { - typeSelect.addEventListener('change', () => this.clearOutput()); - } - - if (countInput) { - countInput.addEventListener('input', () => this.clearOutput()); - } - } - - generateLorem() { - const typeElement = document.getElementById('lorem-type'); - const countElement = document.getElementById('lorem-count'); - const output = document.getElementById('lorem-output'); - - if (!typeElement || !countElement || !output) { - console.error('Lorem generator: Required elements not found', { - typeElement: !!typeElement, - countElement: !!countElement, - output: !!output, - }); - return; - } - - const type = typeElement.value; - const count = parseInt(countElement.value); - - if (isNaN(count) || count < 1 || count > 50) { - window.app?.showMessage( - 'Please enter a count between 1 and 50.', - 'error' - ); - return; - } - - try { - let result = ''; - - switch (type) { - case 'paragraphs': - result = this.generateParagraphs(count); - break; - case 'sentences': - result = this.generateSentences(count); - break; - case 'words': - result = this.generateWords(count); - break; - default: - result = this.generateParagraphs(count); - } - - output.value = result; - window.app?.showMessage(`Generated ${count} ${type}!`, 'success'); - this.selectOutput(); - } catch (error) { - console.error('Error generating lorem text:', error); - window.app?.showMessage( - 'Error generating lorem text: ' + error.message, - 'error' - ); - } - } - - generateParagraphs(count) { - if (count < 1) { - throw new Error('Paragraph count must be at least 1'); - } - - const paragraphs = []; - for (let i = 0; i < count; i++) { - const sentences = this.generateSentences(this.randomBetween(3, 7)); - paragraphs.push(sentences); - } - return paragraphs.join('\n\n'); - } - - generateSentences(count) { - if (count < 1) { - throw new Error('Sentence count must be at least 1'); - } - - const sentences = []; - for (let i = 0; i < count; i++) { - const wordCount = this.randomBetween(8, 20); - const words = this.generateWords(wordCount).split(' '); - - words[0] = this.capitalizeFirst(words[0]); - - let sentence = words.join(' '); - - if (Math.random() < 0.1) { - sentence += '!'; - } else if (Math.random() < 0.1) { - sentence += '?'; - } else { - sentence += '.'; - } - - sentences.push(sentence); - } - return sentences.join(' '); - } - - generateWords(count) { - if (count < 1) { - throw new Error('Word count must be at least 1'); - } - - const words = []; - for (let i = 0; i < count; i++) { - const word = - this.LOREM_WORDS[Math.floor(Math.random() * this.LOREM_WORDS.length)]; - words.push(word); - } - return words.join(' '); - } - - randomBetween(min, max) { - return Math.floor(Math.random() * (max - min + 1)) + min; - } - - capitalizeFirst(str) { - return str.charAt(0).toUpperCase() + str.slice(1); - } - - selectOutput() { - const output = document.getElementById('lorem-output'); - setTimeout(() => { - output.select(); - output.setSelectionRange(0, 99999); - }, 100); - } - - clearOutput() { - document.getElementById('lorem-output').value = ''; - } - - copyToClipboard() { - const output = document.getElementById('lorem-output'); - if (output.value.trim()) { - navigator.clipboard.writeText(output.value).then(() => { - window.app?.showMessage('Lorem text copied to clipboard!', 'success'); - }); - } - } - - // Test method that can be called directly - testGeneration() { - window.app?.showMessage('Testing lorem generation...', 'info'); - try { - const words = this.generateWords(5); - window.app?.showMessage(`Generated words: ${words}`, 'success'); - return words; - } catch (error) { - window.app?.showMessage(`Error: ${error.message}`, 'error'); - return null; - } - } - - // Direct method to test DOM elements - testDOMElements() { - const generateBtn = document.getElementById('generate-lorem'); - const typeSelect = document.getElementById('lorem-type'); - const countInput = document.getElementById('lorem-count'); - const output = document.getElementById('lorem-output'); - - const results = { - generateBtn: !!generateBtn, - typeSelect: !!typeSelect, - countInput: !!countInput, - output: !!output, - generateBtnVisible: generateBtn - ? window.getComputedStyle(generateBtn).display !== 'none' - : false, - containerActive: !!document.querySelector('#lorem-generator.active'), - }; - - console.log('DOM Elements Test:', results); - window.app?.showMessage(`DOM test: ${JSON.stringify(results)}`, 'info'); - return results; - } -} - -window.LoremGenerator = new LoremGenerator(); - -// Also ensure initialization happens when DOM is fully loaded -document.addEventListener('DOMContentLoaded', () => { - if (window.LoremGenerator) { - console.log('DOM loaded, reinitializing LoremGenerator'); - window.LoremGenerator.init(); - } -}); - -// Add event delegation as backup -document.addEventListener('click', (e) => { - if (e.target && e.target.id === 'generate-lorem') { - console.log('Generate lorem clicked via delegation'); - window.app?.showMessage('Clicked via delegation!', 'info'); - if (window.LoremGenerator) { - window.LoremGenerator.generateLorem(); - } - } -}); - -// Global test functions for debugging -window.testLoremGeneration = function () { - if (window.LoremGenerator) { - return window.LoremGenerator.testGeneration(); - } - return 'LoremGenerator not found'; -}; - -window.testLoremDOM = function () { - if (window.LoremGenerator) { - return window.LoremGenerator.testDOMElements(); - } - return 'LoremGenerator not found'; -}; - -window.forceLoremGeneration = function () { - if (window.LoremGenerator) { - window.app?.showMessage('Force generating lorem...', 'info'); - window.LoremGenerator.generateLorem(); - return 'Forced generation attempted'; - } - return 'LoremGenerator not found'; -}; - -const loremStyles = ` -.lorem-controls { - display: flex; - align-items: end; - gap: 20px; - margin-bottom: 20px; - flex-wrap: wrap; -} - -.lorem-controls .control-group { - display: flex; - flex-direction: column; - gap: 5px; -} - -.lorem-controls label { - font-weight: 500; - color: #1d1d1f; -} - -.lorem-controls select, -.lorem-controls input { - padding: 8px 12px; - border: 2px solid #f0f0f0; - border-radius: 6px; - font-size: 14px; - transition: border-color 0.3s ease; -} - -.lorem-controls select:focus, -.lorem-controls input:focus { - outline: none; - border-color: #667eea; -} - -#lorem-output { - min-height: 300px; - line-height: 1.6; -} -`; - -const loremStyleElement = document.createElement('style'); -loremStyleElement.textContent = loremStyles; -document.head.appendChild(loremStyleElement); diff --git a/src/renderer/js/tools/markdown-editor.js b/src/renderer/js/tools/markdown-editor.js deleted file mode 100644 index baa0a319..00000000 --- a/src/renderer/js/tools/markdown-editor.js +++ /dev/null @@ -1,403 +0,0 @@ -class MarkdownEditor { - constructor() { - this.previewMode = 'split'; - this.init(); - } - - init() { - const toolbarButtons = document.querySelectorAll('.toolbar-btn'); - const togglePreviewBtn = document.getElementById('toggle-preview'); - const markdownInput = document.getElementById('markdown-input'); - - toolbarButtons.forEach(button => { - button.addEventListener('click', () => { - const action = button.dataset.action; - this.handleToolbarAction(action); - }); - }); - - if (togglePreviewBtn) { - togglePreviewBtn.addEventListener('click', () => this.togglePreview()); - } - - if (markdownInput) { - markdownInput.addEventListener('input', () => this.updatePreview()); - markdownInput.addEventListener('scroll', () => this.syncScroll()); - } - - this.updatePreview(); - } - - handleToolbarAction(action) { - const textarea = document.getElementById('markdown-input'); - const start = textarea.selectionStart; - const end = textarea.selectionEnd; - const selectedText = textarea.value.substring(start, end); - let replacement = ''; - let newCursorPos = start; - - switch (action) { - case 'bold': - replacement = `**${selectedText || 'bold text'}**`; - newCursorPos = start + (selectedText ? 2 : 2); - break; - case 'italic': - replacement = `*${selectedText || 'italic text'}*`; - newCursorPos = start + (selectedText ? 1 : 1); - break; - case 'heading': - replacement = `## ${selectedText || 'Heading'}`; - newCursorPos = start + 3; - break; - case 'link': - replacement = `[${selectedText || 'link text'}](https://example.com)`; - newCursorPos = start + 1; - break; - case 'code': - if (selectedText.includes('\n')) { - replacement = `\`\`\`\n${selectedText || 'code'}\n\`\`\``; - newCursorPos = start + 4; - } else { - replacement = `\`${selectedText || 'code'}\``; - newCursorPos = start + 1; - } - break; - case 'list': - const lines = selectedText.split('\n'); - replacement = lines.map(line => `- ${line}`).join('\n') || '- List item'; - newCursorPos = start + 2; - break; - } - - textarea.value = textarea.value.substring(0, start) + replacement + textarea.value.substring(end); - textarea.focus(); - textarea.setSelectionRange(newCursorPos, newCursorPos); - - this.updatePreview(); - } - - togglePreview() { - const input = document.querySelector('.markdown-input'); - const preview = document.querySelector('.markdown-preview'); - const button = document.getElementById('toggle-preview'); - - switch (this.previewMode) { - case 'split': - this.previewMode = 'preview'; - input.style.display = 'none'; - preview.style.width = '100%'; - button.textContent = 'Show Editor'; - break; - case 'preview': - this.previewMode = 'editor'; - preview.style.display = 'none'; - input.style.width = '100%'; - button.textContent = 'Show Preview'; - break; - case 'editor': - this.previewMode = 'split'; - input.style.display = 'flex'; - input.style.width = '50%'; - preview.style.display = 'block'; - preview.style.width = '50%'; - button.textContent = 'Toggle Preview'; - break; - } - } - - updatePreview() { - const input = document.getElementById('markdown-input').value; - const preview = document.getElementById('preview-content'); - - if (input.trim() === '') { - preview.innerHTML = '

        Preview will appear here...

        '; - return; - } - - const html = this.markdownToHtml(input); - preview.innerHTML = html; - } - - markdownToHtml(markdown) { - let html = markdown; - - html = html.replace(/```(\w+)?\n([\s\S]*?)\n```/g, (_, lang, code) => { - return `
        ${this.escapeHtml(code)}
        `; - }); - - html = html.replace(/`([^`]+)`/g, '$1'); - - html = html.replace(/^### (.*$)/gim, '

        $1

        '); - html = html.replace(/^## (.*$)/gim, '

        $1

        '); - html = html.replace(/^# (.*$)/gim, '

        $1

        '); - - html = html.replace(/\*\*(.*?)\*\*/g, '$1'); - html = html.replace(/\*(.*?)\*/g, '$1'); - - html = html.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '$1'); - - html = html.replace(/!\[([^\]]*)\]\(([^)]+)\)/g, '$1'); - - html = html.replace(/^- (.*$)/gim, '
      • $1
      • '); - html = html.replace(/(
      • .*<\/li>)/s, '
          $1
        '); - - html = html.replace(/^\d+\. (.*$)/gim, '
      • $1
      • '); - - html = html.replace(/^> (.*$)/gim, '
        $1
        '); - - html = html.replace(/---/g, '
        '); - - const paragraphs = html.split(/\n\s*\n/); - html = paragraphs.map(paragraph => { - paragraph = paragraph.trim(); - if (paragraph && !paragraph.match(/^<(h[1-6]|ul|ol|li|blockquote|pre|hr)/)) { - return `

        ${paragraph}

        `; - } - return paragraph; - }).join('\n\n'); - - return html; - } - - escapeHtml(text) { - const div = document.createElement('div'); - div.textContent = text; - return div.innerHTML; - } - - syncScroll() { - const input = document.getElementById('markdown-input'); - const preview = document.getElementById('preview-content'); - - if (this.previewMode === 'split') { - const percentage = input.scrollTop / (input.scrollHeight - input.clientHeight); - preview.scrollTop = percentage * (preview.scrollHeight - preview.clientHeight); - } - } - - exportMarkdown() { - const content = document.getElementById('markdown-input').value; - if (content.trim()) { - const blob = new Blob([content], { type: 'text/markdown' }); - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = 'document.md'; - a.click(); - URL.revokeObjectURL(url); - } - } - - exportHTML() { - const markdown = document.getElementById('markdown-input').value; - if (markdown.trim()) { - const html = ` - - - - Exported Document - - - -${this.markdownToHtml(markdown)} - -`; - - const blob = new Blob([html], { type: 'text/html' }); - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = 'document.html'; - a.click(); - URL.revokeObjectURL(url); - } - } -} - -window.MarkdownEditor = new MarkdownEditor(); - -const markdownStyles = ` -.markdown-toolbar { - display: flex; - align-items: center; - gap: 5px; - padding: 10px; - background: #f8f9fa; - border-radius: 8px 8px 0 0; - border-bottom: 1px solid #e0e0e0; - flex-wrap: wrap; -} - -.toolbar-btn { - background: none; - border: 1px solid #d0d0d0; - border-radius: 4px; - padding: 8px 10px; - cursor: pointer; - color: #666; - font-size: 14px; - transition: all 0.3s ease; -} - -.toolbar-btn:hover { - background: #667eea; - color: white; - border-color: #667eea; -} - -.toolbar-divider { - width: 1px; - height: 20px; - background: #d0d0d0; - margin: 0 10px; -} - -.markdown-container { - display: flex; - border: 2px solid #f0f0f0; - border-radius: 0 0 8px 8px; - min-height: 400px; -} - -.markdown-input, -.markdown-preview { - flex: 1; - overflow: auto; -} - -.markdown-input { - display: flex; - flex-direction: column; - border-right: 1px solid #e0e0e0; -} - -#markdown-input { - width: 100%; - height: 400px; - border: none; - outline: none; - padding: 20px; - font-family: 'Monaco', 'Consolas', monospace; - font-size: 14px; - line-height: 1.5; - resize: none; - background: #fafafa; -} - -.markdown-preview { - background: white; -} - -#preview-content { - padding: 20px; - height: 400px; - overflow-y: auto; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; - line-height: 1.6; -} - -#preview-content h1, -#preview-content h2, -#preview-content h3 { - color: #1d1d1f; - margin-top: 0; - margin-bottom: 16px; -} - -#preview-content h1 { font-size: 2rem; border-bottom: 1px solid #e0e0e0; padding-bottom: 10px; } -#preview-content h2 { font-size: 1.5rem; } -#preview-content h3 { font-size: 1.2rem; } - -#preview-content p { - margin-bottom: 16px; - color: #333; -} - -#preview-content code { - background: #f4f4f4; - padding: 2px 6px; - border-radius: 3px; - font-family: 'Monaco', 'Consolas', monospace; - font-size: 13px; -} - -#preview-content pre { - background: #f8f9fa; - padding: 16px; - border-radius: 6px; - overflow-x: auto; - margin: 16px 0; - border: 1px solid #e0e0e0; -} - -#preview-content pre code { - background: none; - padding: 0; -} - -#preview-content blockquote { - border-left: 4px solid #667eea; - margin: 16px 0; - padding-left: 16px; - color: #666; - font-style: italic; -} - -#preview-content ul, -#preview-content ol { - padding-left: 20px; - margin: 16px 0; -} - -#preview-content li { - margin: 4px 0; -} - -#preview-content a { - color: #667eea; - text-decoration: none; -} - -#preview-content a:hover { - text-decoration: underline; -} - -#preview-content hr { - border: none; - height: 1px; - background: #e0e0e0; - margin: 20px 0; -} - -.empty-preview { - color: #86868b; - font-style: italic; - text-align: center; - margin-top: 50px; -} - -@media (max-width: 768px) { - .markdown-container { - flex-direction: column; - } - - .markdown-input { - border-right: none; - border-bottom: 1px solid #e0e0e0; - } - - #markdown-input, - #preview-content { - height: 300px; - } -} -`; - -const markdownEditorStyle = document.createElement('style'); -style.textContent = markdownStyles; -document.head.appendChild(markdownEditorStyle); \ No newline at end of file diff --git a/src/renderer/js/tools/number-base.js b/src/renderer/js/tools/number-base.js deleted file mode 100644 index 5caa052d..00000000 --- a/src/renderer/js/tools/number-base.js +++ /dev/null @@ -1,224 +0,0 @@ -class NumberBaseConverter { - constructor() { - this.init(); - } - - init() { - const inputs = document.querySelectorAll( - '#decimal-input, #binary-input, #octal-input, #hex-input' - ); - const clearBtn = document.getElementById('clear-bases'); - - inputs.forEach((input) => { - input.addEventListener('input', (e) => this.convertFromInput(e.target)); - }); - - if (clearBtn) { - clearBtn.addEventListener('click', () => this.clearAll()); - } - } - - convertFromInput(sourceInput) { - const value = sourceInput.value.trim(); - if (!value) { - this.clearOtherInputs(sourceInput.id); - return; - } - - try { - let decimalValue; - - switch (sourceInput.id) { - case 'decimal-input': - decimalValue = this.parseDecimal(value); - break; - case 'binary-input': - decimalValue = this.parseBinary(value); - break; - case 'octal-input': - decimalValue = this.parseOctal(value); - break; - case 'hex-input': - decimalValue = this.parseHex(value); - break; - default: - return; - } - - if (decimalValue === null) { - this.showError(sourceInput.id, 'Invalid format'); - return; - } - - this.updateAllFields(decimalValue, sourceInput.id); - this.clearError(sourceInput.id); - } catch (error) { - this.showError(sourceInput.id, error.message); - } - } - - parseDecimal(value) { - const num = parseInt(value, 10); - if (isNaN(num) || num < 0) return null; - return num; - } - - parseBinary(value) { - if (!/^[01]+$/.test(value)) return null; - return parseInt(value, 2); - } - - parseOctal(value) { - if (!/^[0-7]+$/.test(value)) return null; - return parseInt(value, 8); - } - - parseHex(value) { - const cleaned = value.replace(/^0x/i, ''); - if (!/^[0-9a-f]+$/i.test(cleaned)) return null; - return parseInt(cleaned, 16); - } - - updateAllFields(decimalValue, sourceInputId) { - if (sourceInputId !== 'decimal-input') { - document.getElementById('decimal-input').value = decimalValue.toString(); - } - - if (sourceInputId !== 'binary-input') { - document.getElementById('binary-input').value = decimalValue.toString(2); - } - - if (sourceInputId !== 'octal-input') { - document.getElementById('octal-input').value = decimalValue.toString(8); - } - - if (sourceInputId !== 'hex-input') { - document.getElementById('hex-input').value = decimalValue - .toString(16) - .toUpperCase(); - } - } - - clearOtherInputs(sourceInputId) { - const inputs = [ - 'decimal-input', - 'binary-input', - 'octal-input', - 'hex-input', - ]; - inputs.forEach((inputId) => { - if (inputId !== sourceInputId) { - document.getElementById(inputId).value = ''; - } - }); - } - - showError(inputId, message) { - const input = document.getElementById(inputId); - input.style.borderColor = '#dc3545'; - input.title = message; - - let errorSpan = input.parentNode.querySelector('.error-message'); - if (!errorSpan) { - errorSpan = document.createElement('span'); - errorSpan.className = 'error-message'; - errorSpan.style.cssText = - 'color: #dc3545; font-size: 12px; display: block; margin-top: 5px;'; - input.parentNode.appendChild(errorSpan); - } - errorSpan.textContent = message; - } - - clearError(inputId) { - const input = document.getElementById(inputId); - input.style.borderColor = '#f0f0f0'; - input.title = ''; - - const errorSpan = input.parentNode.querySelector('.error-message'); - if (errorSpan) { - errorSpan.remove(); - } - } - - clearAll() { - const inputs = [ - 'decimal-input', - 'binary-input', - 'octal-input', - 'hex-input', - ]; - inputs.forEach((inputId) => { - document.getElementById(inputId).value = ''; - this.clearError(inputId); - }); - window.app?.showMessage('All fields cleared!', 'info'); - } - - copyValue(inputId) { - const input = document.getElementById(inputId); - if (input.value.trim()) { - navigator.clipboard.writeText(input.value).then(() => { - window.app?.showMessage('Value copied to clipboard!', 'success'); - }); - } - } -} - -window.NumberBaseConverter = new NumberBaseConverter(); - -const baseStyles = ` -.base-inputs { - display: grid; - gap: 20px; - margin-bottom: 20px; -} - -.base-input-group { - display: flex; - flex-direction: column; - gap: 8px; -} - -.base-input-group label { - font-weight: 500; - color: #1d1d1f; - font-size: 14px; -} - -.base-input-group input { - padding: 12px 15px; - border: 2px solid #f0f0f0; - border-radius: 8px; - font-family: 'Monaco', 'Consolas', monospace; - font-size: 14px; - transition: border-color 0.3s ease; -} - -.base-input-group input:focus { - outline: none; - border-color: #667eea; -} - -.base-input-group input:invalid { - border-color: #dc3545; -} - -@media (min-width: 768px) { - .base-inputs { - grid-template-columns: 1fr 1fr; - } -} - -.error-message { - animation: fadeIn 0.3s ease; -} - -@keyframes fadeIn { - from { opacity: 0; transform: translateY(-5px); } - to { opacity: 1; transform: translateY(0); } -} -`; - -const numberBaseStyle = document.createElement('style'); -numberBaseStyle.textContent = numberBaseStyles; -document.head.appendChild(numberBaseStyle); diff --git a/src/renderer/js/tools/password-generator.js b/src/renderer/js/tools/password-generator.js deleted file mode 100644 index 44489d5f..00000000 --- a/src/renderer/js/tools/password-generator.js +++ /dev/null @@ -1,472 +0,0 @@ -/** - * Password utilities for generating secure passwords and passphrases - * Browser-compatible version without require() - */ -class PasswordUtils { - static LOWERCASE = 'abcdefghijklmnopqrstuvwxyz'; - static UPPERCASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; - static NUMBERS = '0123456789'; - static SYMBOLS = '!@#$%^&*()_+-=[]{};\':"|,.<>?'; - static AMBIGUOUS = '0OIl1'; - - // Word list for passphrases (subset for testing) - static WORDS = [ - 'apple', - 'brave', - 'chair', - 'dream', - 'eagle', - 'flame', - 'grape', - 'house', - 'image', - 'judge', - 'knife', - 'lemon', - 'magic', - 'novel', - 'ocean', - 'piano', - 'queen', - 'river', - 'stone', - 'table', - 'unity', - 'value', - 'water', - 'youth', - 'zebra', - 'beach', - 'cloud', - 'dance', - 'earth', - 'field', - 'green', - 'happy', - 'light', - 'mouse', - 'night', - 'party', - 'quick', - 'smile', - 'trust', - 'voice', - ]; - - static generatePassword(options = {}) { - const { - length = 12, - includeLowercase = true, - includeUppercase = true, - includeNumbers = true, - includeSymbols = false, - excludeAmbiguous = false, - } = options; - - let charset = ''; - - // Build character set based on options - if (includeLowercase) charset += this.LOWERCASE; - if (includeUppercase) charset += this.UPPERCASE; - if (includeNumbers) charset += this.NUMBERS; - if (includeSymbols) charset += this.SYMBOLS; - - if (!charset) { - throw new Error('At least one character set must be selected'); - } - - // Remove ambiguous characters if requested - if (excludeAmbiguous) { - for (const char of this.AMBIGUOUS) { - charset = charset.replace(new RegExp(char, 'g'), ''); - } - } - - // Generate password - let password = ''; - for (let i = 0; i < length; i++) { - const randomIndex = Math.floor(Math.random() * charset.length); - password += charset[randomIndex]; - } - - return password; - } - - static generateMultiplePasswords(count, options = {}) { - const passwords = []; - for (let i = 0; i < count; i++) { - passwords.push(this.generatePassword(options)); - } - return passwords; - } - - static calculatePasswordStrength(password) { - if (!password) { - return { - score: 0, - strength: 'Very Weak', - feedback: ['Password is required'], - entropy: 0, - }; - } - - let score = 0; - let feedback = []; - - // Length check - if (password.length >= 12) score += 2; - else if (password.length >= 8) score += 1; - else feedback.push('Use at least 8 characters'); - - // Character variety checks - if (/[a-z]/.test(password)) score += 1; - else feedback.push('Add lowercase letters'); - - if (/[A-Z]/.test(password)) score += 1; - else feedback.push('Add uppercase letters'); - - if (/[0-9]/.test(password)) score += 1; - else feedback.push('Add numbers'); - - if (/[^a-zA-Z0-9]/.test(password)) score += 1; - else feedback.push('Add symbols'); - - // Common pattern penalties - if (/(.)\1{2,}/.test(password)) { - score -= 1; - feedback.push('Avoid repeated characters'); - } - - if ( - /123|234|345|456|567|678|789|abc|bcd|cde|def/.test(password.toLowerCase()) - ) { - score -= 1; - feedback.push('Avoid sequential characters'); - } - - // Calculate entropy - let charset = 0; - if (/[a-z]/.test(password)) charset += 26; - if (/[A-Z]/.test(password)) charset += 26; - if (/[0-9]/.test(password)) charset += 10; - if (/[^a-zA-Z0-9]/.test(password)) charset += 32; - - const entropy = Math.log2(Math.pow(charset, password.length)); - - // Determine strength label - let strength; - if (score < 1) strength = 'Very Weak'; - else if (score < 2) strength = 'Weak'; - else if (score < 4) strength = 'Fair'; - else if (score < 6) strength = 'Good'; - else strength = 'Strong'; - - return { - score: Math.max(0, score), - strength, - feedback, - entropy: Math.round(entropy), - }; - } - - static generatePassphrase(options = {}) { - const { - wordCount = 4, - separator = '-', - capitalize = false, - includeNumbers = false, - } = options; - - const selectedWords = []; - - // Select random words - for (let i = 0; i < wordCount; i++) { - const randomIndex = Math.floor(Math.random() * this.WORDS.length); - let word = this.WORDS[randomIndex]; - - if (capitalize) { - word = word.charAt(0).toUpperCase() + word.slice(1); - } - - selectedWords.push(word); - } - - let passphrase = selectedWords.join(separator); - - // Add numbers if requested - if (includeNumbers) { - const randomNum = Math.floor(Math.random() * 1000); - passphrase += randomNum; - } - - return passphrase; - } -} - -class PasswordGenerator { - constructor() { - this.init(); - } - - init() { - // Initialize UI event listeners - const generateBtn = document.getElementById('generate-password'); - const lengthSlider = document.getElementById('password-length'); - const lengthDisplay = document.getElementById('length-display'); - const copyBtn = document.getElementById('copy-password'); - const copyPassphraseBtn = document.getElementById('copy-passphrase'); - const regenerateBtn = document.getElementById('regenerate-password'); - const generateMultipleBtn = document.getElementById('generate-multiple'); - const passphraseBtn = document.getElementById('generate-passphrase'); - const passwordInput = document.getElementById('password-strength-input'); - - // Tab functionality - const tabButtons = document.querySelectorAll( - '#password-generator .tab-btn' - ); - tabButtons.forEach((button) => { - button.addEventListener('click', () => { - this.switchTab(button.dataset.tab); - }); - }); - - if (generateBtn) { - generateBtn.addEventListener('click', () => this.generatePassword()); - } - - if (lengthSlider) { - lengthSlider.addEventListener('input', (e) => { - lengthDisplay.textContent = e.target.value; - }); - } - - if (copyBtn) { - copyBtn.addEventListener('click', () => this.copyToClipboard()); - } - - if (copyPassphraseBtn) { - copyPassphraseBtn.addEventListener('click', () => - this.copyPassphraseToClipboard() - ); - } - - if (regenerateBtn) { - regenerateBtn.addEventListener('click', () => this.generatePassword()); - } - - if (generateMultipleBtn) { - generateMultipleBtn.addEventListener('click', () => - this.generateMultiplePasswords() - ); - } - - if (passphraseBtn) { - passphraseBtn.addEventListener('click', () => this.generatePassphrase()); - } - - if (passwordInput) { - passwordInput.addEventListener('input', (e) => - this.checkPasswordStrength(e.target.value, '2') - ); - } - } - - switchTab(tabName) { - // Remove active class from all tabs and content - document.querySelectorAll('#password-generator .tab-btn').forEach((btn) => { - btn.classList.remove('active'); - }); - document - .querySelectorAll('#password-generator .tab-content') - .forEach((content) => { - content.classList.remove('active'); - }); - - // Add active class to selected tab and content - document - .querySelector(`#password-generator [data-tab="${tabName}"]`) - .classList.add('active'); - document.getElementById(`${tabName}-tab`).classList.add('active'); - } - - generatePassword() { - try { - const options = this.getPasswordOptions(); - const password = PasswordUtils.generatePassword(options); - - this.displayPassword(password); - this.checkPasswordStrength(password); - - window.app?.showMessage('Password generated successfully!', 'success'); - } catch (error) { - window.app?.showMessage(error.message, 'error'); - } - } - - generateMultiplePasswords() { - try { - const options = this.getPasswordOptions(); - const count = - parseInt(document.getElementById('password-count').value) || 5; - const passwords = PasswordUtils.generateMultiplePasswords(count, options); - - const output = document.getElementById('multiple-passwords-output'); - if (output) { - output.value = passwords.join('\n'); - output.style.height = Math.min(passwords.length * 25, 200) + 'px'; - } - - window.app?.showMessage(`Generated ${count} passwords!`, 'success'); - } catch (error) { - window.app?.showMessage(error.message, 'error'); - } - } - - generatePassphrase() { - try { - const options = this.getPassphraseOptions(); - const passphrase = PasswordUtils.generatePassphrase(options); - - this.displayPassphrase(passphrase); - this.checkPasswordStrength(passphrase); - - window.app?.showMessage('Passphrase generated successfully!', 'success'); - } catch (error) { - window.app?.showMessage(error.message, 'error'); - } - } - - getPasswordOptions() { - return { - length: parseInt(document.getElementById('password-length').value) || 12, - includeLowercase: document.getElementById('include-lowercase').checked, - includeUppercase: document.getElementById('include-uppercase').checked, - includeNumbers: document.getElementById('include-numbers').checked, - includeSymbols: document.getElementById('include-symbols').checked, - excludeAmbiguous: document.getElementById('exclude-ambiguous').checked, - }; - } - - getPassphraseOptions() { - return { - wordCount: - parseInt(document.getElementById('passphrase-words').value) || 4, - separator: document.getElementById('passphrase-separator').value || '-', - capitalize: document.getElementById('passphrase-capitalize').checked, - includeNumbers: document.getElementById('passphrase-numbers').checked, - }; - } - - displayPassword(password) { - const output = document.getElementById('password-output'); - if (output) { - output.value = password; - output.style.color = this.getPasswordStrengthColor(password); - } - } - - displayPassphrase(passphrase) { - const output = document.getElementById('passphrase-output'); - if (output) { - output.value = passphrase; - output.style.color = this.getPasswordStrengthColor(passphrase); - } - } - - checkPasswordStrength(password, suffix = '') { - if (!password) return; - - const result = PasswordUtils.calculatePasswordStrength(password); - - // Update strength indicator - const strengthIndicator = document.getElementById( - 'strength-indicator' + (suffix ? '-' + suffix : '') - ); - const strengthText = document.getElementById( - 'strength-text' + (suffix ? '-' + suffix : '') - ); - const entropyText = document.getElementById( - 'entropy-text' + (suffix ? '-' + suffix : '') - ); - const feedbackList = document.getElementById( - 'strength-feedback' + (suffix ? '-' + suffix : '') - ); - - if (strengthIndicator) { - strengthIndicator.className = `strength-indicator ${result.strength - .toLowerCase() - .replace(' ', '-')}`; - strengthIndicator.style.width = `${(result.score / 6) * 100}%`; - } - - if (strengthText) { - strengthText.textContent = result.strength; - strengthText.className = `strength-text ${result.strength - .toLowerCase() - .replace(' ', '-')}`; - } - - if (entropyText) { - entropyText.textContent = `${result.entropy} bits`; - } - - if (feedbackList) { - feedbackList.innerHTML = ''; - result.feedback.forEach((feedback) => { - const li = document.createElement('li'); - li.textContent = feedback; - feedbackList.appendChild(li); - }); - } - } - - getPasswordStrengthColor(password) { - const result = PasswordUtils.calculatePasswordStrength(password); - const colorMap = { - 'Very Weak': '#ff4757', - Weak: '#ff6b81', - Fair: '#ffa502', - Good: '#2ed573', - Strong: '#1e90ff', - }; - return colorMap[result.strength] || '#666'; - } - - copyToClipboard() { - const output = document.getElementById('password-output'); - if (output && output.value) { - navigator.clipboard - .writeText(output.value) - .then(() => { - window.app?.showMessage('Password copied to clipboard!', 'success'); - }) - .catch(() => { - window.app?.showMessage('Failed to copy password', 'error'); - }); - } - } - - copyPassphraseToClipboard() { - const output = document.getElementById('passphrase-output'); - if (output && output.value) { - navigator.clipboard - .writeText(output.value) - .then(() => { - window.app?.showMessage('Passphrase copied to clipboard!', 'success'); - }) - .catch(() => { - window.app?.showMessage('Failed to copy passphrase', 'error'); - }); - } - } - - selectAllPasswords() { - const output = document.getElementById('multiple-passwords-output'); - if (output && output.value) { - output.select(); - output.setSelectionRange(0, 99999); - } - } -} - -window.PasswordGenerator = new PasswordGenerator(); diff --git a/src/renderer/js/tools/qr-generator.js b/src/renderer/js/tools/qr-generator.js deleted file mode 100644 index 46cdec19..00000000 --- a/src/renderer/js/tools/qr-generator.js +++ /dev/null @@ -1,382 +0,0 @@ -class QRGenerator { - constructor() { - this.init(); - } - - init() { - const generateBtn = document.getElementById('generate-qr'); - const downloadBtn = document.getElementById('download-qr'); - const textInput = document.getElementById('qr-text'); - - if (generateBtn) { - generateBtn.addEventListener('click', () => this.generateQR()); - } - - if (downloadBtn) { - downloadBtn.addEventListener('click', () => this.downloadQR()); - } - - if (textInput) { - textInput.addEventListener('input', () => this.onInputChange()); - } - } - - generateQR() { - const text = document.getElementById('qr-text').value.trim(); - const size = parseInt(document.getElementById('qr-size').value); - const errorLevel = document.getElementById('error-level').value; - - if (!text) { - window.app?.showMessage('Please enter text to generate QR code.', 'error'); - return; - } - - try { - this.createQRCode(text, size, errorLevel); - document.getElementById('download-qr').disabled = false; - window.app?.showMessage('QR code generated successfully!', 'success'); - } catch (error) { - window.app?.showMessage('Error generating QR code: ' + error.message, 'error'); - } - } - - createQRCode(text, size, errorLevel) { - const canvas = document.getElementById('qr-canvas'); - const ctx = canvas.getContext('2d'); - - canvas.width = size; - canvas.height = size; - - ctx.fillStyle = 'white'; - ctx.fillRect(0, 0, size, size); - - const qr = this.generateQRMatrix(text, errorLevel); - const moduleSize = Math.floor(size / qr.length); - const offset = (size - (qr.length * moduleSize)) / 2; - - ctx.fillStyle = 'black'; - for (let row = 0; row < qr.length; row++) { - for (let col = 0; col < qr[row].length; col++) { - if (qr[row][col]) { - ctx.fillRect( - offset + col * moduleSize, - offset + row * moduleSize, - moduleSize, - moduleSize - ); - } - } - } - - document.getElementById('qr-preview').style.display = 'block'; - } - - generateQRMatrix(text, errorLevel) { - const version = this.determineVersion(text); - const size = 17 + 4 * version; - const matrix = Array(size).fill().map(() => Array(size).fill(false)); - - this.addFinderPatterns(matrix, size); - this.addSeparators(matrix, size); - this.addDarkModule(matrix, version); - this.addTimingPatterns(matrix, size); - - if (version >= 2) { - this.addAlignmentPatterns(matrix, version); - } - - if (version >= 7) { - this.addVersionInfo(matrix, version); - } - - const data = this.encodeData(text, version, errorLevel); - this.addDataToMatrix(matrix, data); - - return matrix; - } - - determineVersion(text) { - const length = text.length; - if (length <= 17) return 1; - if (length <= 32) return 2; - if (length <= 53) return 3; - if (length <= 78) return 4; - return 5; - } - - addFinderPatterns(matrix, size) { - const pattern = [ - [1,1,1,1,1,1,1], - [1,0,0,0,0,0,1], - [1,0,1,1,1,0,1], - [1,0,1,1,1,0,1], - [1,0,1,1,1,0,1], - [1,0,0,0,0,0,1], - [1,1,1,1,1,1,1] - ]; - - const positions = [ - [0, 0], - [0, size - 7], - [size - 7, 0] - ]; - - positions.forEach(([startRow, startCol]) => { - for (let row = 0; row < 7; row++) { - for (let col = 0; col < 7; col++) { - matrix[startRow + row][startCol + col] = pattern[row][col] === 1; - } - } - }); - } - - addSeparators(matrix, size) { - for (let i = 0; i < 8; i++) { - matrix[7][i] = false; - matrix[i][7] = false; - matrix[7][size - 8 + i] = false; - matrix[i][size - 8] = false; - matrix[size - 8][i] = false; - matrix[size - 8 + i][7] = false; - } - } - - addDarkModule(matrix, version) { - const size = matrix.length; - matrix[4 * version + 9][8] = true; - } - - addTimingPatterns(matrix, size) { - for (let i = 8; i < size - 8; i++) { - matrix[6][i] = (i % 2) === 0; - matrix[i][6] = (i % 2) === 0; - } - } - - addAlignmentPatterns(matrix, version) { - const positions = this.getAlignmentPatternPositions(version); - - positions.forEach(pos => { - const [centerRow, centerCol] = pos; - const pattern = [ - [1,1,1,1,1], - [1,0,0,0,1], - [1,0,1,0,1], - [1,0,0,0,1], - [1,1,1,1,1] - ]; - - for (let row = 0; row < 5; row++) { - for (let col = 0; col < 5; col++) { - const matrixRow = centerRow - 2 + row; - const matrixCol = centerCol - 2 + col; - if (matrixRow >= 0 && matrixRow < matrix.length && - matrixCol >= 0 && matrixCol < matrix.length) { - matrix[matrixRow][matrixCol] = pattern[row][col] === 1; - } - } - } - }); - } - - getAlignmentPatternPositions(version) { - const positions = { - 2: [[6, 18]], - 3: [[6, 22]], - 4: [[6, 26]], - 5: [[6, 30]] - }; - return positions[version] || []; - } - - addVersionInfo() { - } - - encodeData(text, version, errorLevel) { - const mode = '0100'; - const charCount = text.length.toString(2).padStart(8, '0'); - - let data = mode + charCount; - - for (let i = 0; i < text.length; i++) { - data += text.charCodeAt(i).toString(2).padStart(8, '0'); - } - - data += '0000'; - - const capacities = { - 1: { L: 152, M: 128, Q: 104, H: 72 }, - 2: { L: 272, M: 224, Q: 176, H: 128 }, - 3: { L: 440, M: 352, Q: 272, H: 208 }, - 4: { L: 640, M: 512, Q: 384, H: 288 }, - 5: { L: 864, M: 688, Q: 496, H: 368 } - }; - - const capacity = capacities[version][errorLevel]; - - while (data.length < capacity) { - data += data.length % 16 < 8 ? '11101100' : '00010001'; - } - - return data.substring(0, capacity); - } - - addDataToMatrix(matrix, data) { - let bitIndex = 0; - let up = true; - const size = matrix.length; - - for (let col = size - 1; col > 0; col -= 2) { - if (col === 6) col--; - - for (let i = 0; i < size; i++) { - for (let c = 0; c < 2; c++) { - const currentCol = col - c; - const currentRow = up ? size - 1 - i : i; - - if (!this.isReserved(matrix, currentRow, currentCol, size)) { - if (bitIndex < data.length) { - matrix[currentRow][currentCol] = data[bitIndex] === '1'; - bitIndex++; - } - } - } - } - up = !up; - } - } - - isReserved(_, row, col, size) { - if (row < 9 && col < 9) return true; - if (row < 9 && col >= size - 8) return true; - if (row >= size - 8 && col < 9) return true; - if (row === 6 || col === 6) return true; - if (row === 4 * Math.floor((size - 17) / 4) + 9 && col === 8) return true; - - return false; - } - - downloadQR() { - const canvas = document.getElementById('qr-canvas'); - if (!canvas.width) { - window.app?.showMessage('Please generate a QR code first.', 'error'); - return; - } - - const link = document.createElement('a'); - link.download = 'qrcode.png'; - link.href = canvas.toDataURL(); - link.click(); - - window.app?.showMessage('QR code downloaded!', 'success'); - } - - onInputChange() { - document.getElementById('download-qr').disabled = true; - document.getElementById('qr-preview').style.display = 'none'; - } - - generateQRFromUrl(url) { - document.getElementById('qr-text').value = url; - this.generateQR(); - } -} - -window.QRGenerator = new QRGenerator(); - -const qrStyles = ` -#qr-text { - width: 100%; - min-height: 100px; - padding: 15px; - border: 2px solid #f0f0f0; - border-radius: 8px; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; - font-size: 14px; - line-height: 1.5; - resize: vertical; - margin-bottom: 20px; -} - -#qr-text:focus { - outline: none; - border-color: #667eea; -} - -.qr-options { - display: flex; - gap: 30px; - margin-bottom: 20px; - flex-wrap: wrap; -} - -.option-group { - display: flex; - flex-direction: column; - gap: 8px; -} - -.option-group label { - font-weight: 500; - color: #1d1d1f; - font-size: 14px; -} - -.option-group select { - padding: 8px 12px; - border: 2px solid #f0f0f0; - border-radius: 6px; - font-size: 14px; - min-width: 150px; -} - -.option-group select:focus { - outline: none; - border-color: #667eea; -} - -.qr-preview { - text-align: center; - margin-top: 30px; - padding: 20px; - background: #f8f9fa; - border-radius: 8px; - border: 1px solid #e0e0e0; -} - -#qr-canvas { - border: 1px solid #d0d0d0; - border-radius: 8px; - background: white; - max-width: 100%; - height: auto; -} - -.controls { - display: flex; - gap: 15px; - margin-bottom: 20px; - flex-wrap: wrap; -} - -#download-qr:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -@media (max-width: 768px) { - .qr-options { - flex-direction: column; - gap: 15px; - } - - .option-group select { - min-width: auto; - width: 100%; - } -} -`; - -const qrGeneratorStyle = document.createElement('style'); -style.textContent = qrStyles; -document.head.appendChild(qrGeneratorStyle); \ No newline at end of file diff --git a/src/renderer/js/tools/regex-generator.js b/src/renderer/js/tools/regex-generator.js deleted file mode 100644 index 89108004..00000000 --- a/src/renderer/js/tools/regex-generator.js +++ /dev/null @@ -1,503 +0,0 @@ -class RegexGenerator { - constructor() { - this.init(); - } - - init() { - const testBtn = document.getElementById('test-regex'); - const clearBtn = document.getElementById('clear-regex'); - const patternInput = document.getElementById('regex-pattern'); - const flagsInput = document.getElementById('regex-flags'); - const testInput = document.getElementById('test-string'); - - if (testBtn) { - testBtn.addEventListener('click', () => this.testRegex()); - } - - if (clearBtn) { - clearBtn.addEventListener('click', () => this.clearAll()); - } - - if (patternInput || flagsInput || testInput) { - [patternInput, flagsInput, testInput].forEach(input => { - if (input) { - input.addEventListener('input', () => this.clearResults()); - } - }); - } - } - - testRegex() { - const pattern = document.getElementById('regex-pattern').value; - const flags = document.getElementById('regex-flags').value; - const testString = document.getElementById('test-string').value; - - if (!pattern) { - window.app?.showMessage('Please enter a regex pattern.', 'error'); - return; - } - - if (!testString) { - window.app?.showMessage('Please enter text to test against.', 'error'); - return; - } - - try { - const regex = new RegExp(pattern, flags); - this.displayMatches(regex, testString); - this.displayExplanation(pattern, flags); - window.app?.showMessage('Regex tested successfully!', 'success'); - } catch (error) { - window.app?.showMessage('Invalid regex pattern: ' + error.message, 'error'); - this.clearResults(); - } - } - - displayMatches(regex, testString) { - const matchesContainer = document.getElementById('matches-list'); - const matchesSection = document.getElementById('regex-matches'); - const highlightedSection = document.getElementById('highlighted-section'); - const highlightedText = document.getElementById('highlighted-text'); - - const matches = []; - - if (regex.global) { - let match; - while ((match = regex.exec(testString)) !== null) { - matches.push({ - match: match[0], - index: match.index, - groups: match.slice(1) - }); - - if (match.index === regex.lastIndex) { - break; - } - } - } else { - const match = regex.exec(testString); - if (match) { - matches.push({ - match: match[0], - index: match.index, - groups: match.slice(1) - }); - } - } - - // Show the sections - matchesSection.style.display = 'block'; - highlightedSection.style.display = 'block'; - - if (matches.length === 0) { - matchesContainer.innerHTML = '

        No matches found

        '; - highlightedText.textContent = testString; - return; - } - - // Create highlighted text version - let highlightedHTML = ''; - let lastIndex = 0; - - matches.forEach(match => { - highlightedHTML += this.escapeHtml(testString.slice(lastIndex, match.index)); - highlightedHTML += `${this.escapeHtml(match.match)}`; - lastIndex = match.index + match.match.length; - }); - - highlightedHTML += this.escapeHtml(testString.slice(lastIndex)); - highlightedText.innerHTML = highlightedHTML; - - // Create matches list - let html = `

        ${matches.length} match${matches.length > 1 ? 'es' : ''} found

        `; - - matches.forEach((match, index) => { - html += ` -
        -
        Match ${index + 1} at position ${match.index}
        -
        ${this.escapeHtml(match.match)}
        - `; - - if (match.groups.length > 0) { - html += '
        '; - match.groups.forEach((group, groupIndex) => { - if (group !== undefined) { - html += `Group ${groupIndex + 1}: "${this.escapeHtml(group)}"`; - } - }); - html += '
        '; - } - - html += '
        '; - }); - - matchesContainer.innerHTML = html; - } - - - displayExplanation(pattern, flags) { - const explanationContainer = document.getElementById('explanation-text'); - const explanationSection = document.getElementById('regex-explanation'); - - // Show the explanation section - explanationSection.style.display = 'block'; - - let explanation = `
        `; - explanation += `Pattern: /${pattern}/${flags || ''}
        `; - explanation += `Flags: ${this.explainFlags(flags)}`; - explanation += `
        `; - - explanation += this.explainPattern(pattern); - - explanationContainer.innerHTML = explanation; - } - - explainFlags(flags) { - if (!flags) return 'None'; - - const flagExplanations = { - 'g': 'Global (find all matches)', - 'i': 'Case insensitive', - 'm': 'Multiline', - 's': 'Dot matches newlines', - 'u': 'Unicode', - 'y': 'Sticky' - }; - - return flags.split('').map(flag => flagExplanations[flag] || flag).join(', '); - } - - explainPattern(pattern) { - let result = '
        '; - - const tokens = this.tokenizePattern(pattern); - tokens.forEach(token => { - const explanation = this.getTokenExplanation(token); - result += `
        - ${this.escapeHtml(token)} - ${explanation} -
        `; - }); - - result += '
        '; - return result; - } - - tokenizePattern(pattern) { - const tokens = []; - let i = 0; - - while (i < pattern.length) { - const char = pattern[i]; - - if (char === '\\' && i + 1 < pattern.length) { - tokens.push(pattern.slice(i, i + 2)); - i += 2; - } else if (char === '[') { - let j = i + 1; - while (j < pattern.length && pattern[j] !== ']') { - if (pattern[j] === '\\') j++; - j++; - } - tokens.push(pattern.slice(i, j + 1)); - i = j + 1; - } else if (char === '(') { - let j = i + 1; - let depth = 1; - while (j < pattern.length && depth > 0) { - if (pattern[j] === '\\') { - j++; - } else if (pattern[j] === '(') { - depth++; - } else if (pattern[j] === ')') { - depth--; - } - j++; - } - tokens.push(pattern.slice(i, j)); - i = j; - } else { - tokens.push(char); - i++; - } - } - - return tokens; - } - - getTokenExplanation(token) { - const explanations = { - '.': 'Matches any character except newline', - '*': 'Matches zero or more of the preceding element', - '+': 'Matches one or more of the preceding element', - '?': 'Matches zero or one of the preceding element', - '^': 'Matches the start of a string', - '$': 'Matches the end of a string', - '|': 'Alternation - matches either expression before or after', - '\\d': 'Matches any digit (0-9)', - '\\D': 'Matches any non-digit', - '\\w': 'Matches any word character (a-z, A-Z, 0-9, _)', - '\\W': 'Matches any non-word character', - '\\s': 'Matches any whitespace character', - '\\S': 'Matches any non-whitespace character', - '\\b': 'Word boundary', - '\\B': 'Non-word boundary', - '\\n': 'Newline character', - '\\t': 'Tab character', - '\\r': 'Carriage return' - }; - - if (explanations[token]) { - return explanations[token]; - } - - if (token.startsWith('[') && token.endsWith(']')) { - return `Character class: matches any character in the set`; - } - - if (token.startsWith('(') && token.endsWith(')')) { - return `Capturing group`; - } - - if (token.startsWith('{') && token.endsWith('}')) { - return `Quantifier: specifies number of matches`; - } - - if (token.startsWith('\\')) { - return `Escaped character: ${token.slice(1)}`; - } - - return `Literal character: ${token}`; - } - - escapeHtml(text) { - const div = document.createElement('div'); - div.textContent = text; - return div.innerHTML; - } - - clearResults() { - document.getElementById('matches-list').innerHTML = ''; - document.getElementById('explanation-text').innerHTML = ''; - document.getElementById('highlighted-text').innerHTML = ''; - - // Hide the result sections - document.getElementById('regex-matches').style.display = 'none'; - document.getElementById('regex-explanation').style.display = 'none'; - document.getElementById('highlighted-section').style.display = 'none'; - } - - clearAll() { - document.getElementById('regex-pattern').value = ''; - document.getElementById('regex-flags').value = ''; - document.getElementById('test-string').value = ''; - this.clearResults(); - window.app?.showMessage('Regex cleared!', 'info'); - } -} - -window.RegexGenerator = new RegexGenerator(); - -const regexStyles = ` -.regex-input-group { - display: flex; - align-items: center; - border: 2px solid #f0f0f0; - border-radius: 8px; - overflow: hidden; - margin-bottom: 15px; -} - -.regex-delimiter { - background: #f8f9fa; - padding: 12px 8px; - color: #666; - font-family: 'Monaco', 'Consolas', monospace; - font-weight: bold; - font-size: 16px; -} - -#regex-pattern { - flex: 1; - border: none; - outline: none; - padding: 12px; - font-family: 'Monaco', 'Consolas', monospace; - font-size: 14px; -} - -#regex-flags { - border: none; - outline: none; - padding: 12px; - font-family: 'Monaco', 'Consolas', monospace; - font-size: 14px; - background: #fafafa; -} - -.regex-input-group:focus-within { - border-color: #667eea; -} - -.test-input label, -.regex-input label { - display: block; - font-weight: 500; - color: #1d1d1f; - margin-bottom: 8px; -} - -#test-string { - position: relative; - z-index: 2; - background: transparent; -} - -.regex-results { - margin-top: 30px; -} - -.regex-results h3 { - margin-top: 0; - margin-bottom: 15px; - color: #1d1d1f; -} - -.matches, -.explanation { - background: #f8f9fa; - border-radius: 8px; - padding: 20px; - margin: 20px 0; -} - -.no-matches { - color: #86868b; - font-style: italic; - margin: 0; -} - -.match-count { - color: #155724; - font-weight: 500; - margin: 0 0 15px 0; -} - -.match-item { - background: white; - border: 1px solid #e0e0e0; - border-radius: 6px; - margin: 10px 0; - padding: 15px; -} - -.match-header { - font-weight: 500; - color: #666; - font-size: 12px; - margin-bottom: 8px; -} - -.match-text { - font-family: 'Monaco', 'Consolas', monospace; - background: #e8f4fd; - padding: 8px 12px; - border-radius: 4px; - border-left: 3px solid #667eea; - word-break: break-all; -} - -.match-groups { - margin-top: 10px; - font-size: 14px; -} - -.group { - display: inline-block; - background: #f0f8ff; - padding: 2px 8px; - border-radius: 12px; - margin: 2px 5px 2px 0; - font-size: 12px; - color: #0066cc; - border: 1px solid #cce7ff; -} - -.regex-match { - background-color: #fff3cd; - border: 1px solid #ffeaa7; - border-radius: 2px; - padding: 1px 2px; -} - -.pattern-info { - background: white; - padding: 15px; - border-radius: 6px; - border: 1px solid #e0e0e0; - margin-bottom: 15px; - line-height: 1.5; -} - -.pattern-breakdown { - background: white; - border: 1px solid #e0e0e0; - border-radius: 6px; - padding: 15px; -} - -.token-explanation { - display: flex; - align-items: flex-start; - padding: 8px 0; - border-bottom: 1px solid #f0f0f0; -} - -.token-explanation:last-child { - border-bottom: none; -} - -.token { - background: #f4f4f4; - padding: 2px 6px; - border-radius: 3px; - font-family: 'Monaco', 'Consolas', monospace; - font-size: 13px; - margin-right: 15px; - min-width: 50px; - text-align: center; -} - -.token-desc { - color: #555; - flex: 1; -} - -.cheatsheet-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 10px; - margin-top: 15px; -} - -.cheat-item { - background: white; - padding: 8px 12px; - border-radius: 4px; - border: 1px solid #e0e0e0; - font-size: 13px; -} - -.cheat-item code { - background: #f4f4f4; - padding: 2px 4px; - border-radius: 2px; - font-family: 'Monaco', 'Consolas', monospace; - font-weight: bold; - color: #d73a49; -} -`; - -const regexGeneratorStyle = document.createElement('style'); -style.textContent = regexStyles; -document.head.appendChild(regexGeneratorStyle); \ No newline at end of file diff --git a/src/renderer/js/tools/sql-formatter.js b/src/renderer/js/tools/sql-formatter.js deleted file mode 100644 index c24e0a31..00000000 --- a/src/renderer/js/tools/sql-formatter.js +++ /dev/null @@ -1,301 +0,0 @@ -class SQLFormatter { - constructor() { - this.keywords = [ - 'SELECT', - 'FROM', - 'WHERE', - 'INSERT', - 'UPDATE', - 'DELETE', - 'CREATE', - 'DROP', - 'ALTER', - 'TABLE', - 'INDEX', - 'VIEW', - 'DATABASE', - 'SCHEMA', - 'PROCEDURE', - 'FUNCTION', - 'TRIGGER', - 'CONSTRAINT', - 'PRIMARY', - 'FOREIGN', - 'KEY', - 'REFERENCES', - 'UNIQUE', - 'NOT', - 'NULL', - 'DEFAULT', - 'CHECK', - 'INNER', - 'LEFT', - 'RIGHT', - 'FULL', - 'OUTER', - 'JOIN', - 'ON', - 'USING', - 'UNION', - 'ALL', - 'GROUP', - 'BY', - 'ORDER', - 'HAVING', - 'LIMIT', - 'OFFSET', - 'AS', - 'ASC', - 'DESC', - 'DISTINCT', - 'COUNT', - 'SUM', - 'AVG', - 'MIN', - 'MAX', - 'CASE', - 'WHEN', - 'THEN', - 'ELSE', - 'END', - 'IF', - 'EXISTS', - 'IN', - 'LIKE', - 'BETWEEN', - 'AND', - 'OR', - 'IS', - 'TRUE', - 'FALSE', - 'CAST', - 'CONVERT', - 'INT', - 'INTEGER', - 'VARCHAR', - 'CHAR', - 'TEXT', - 'DATE', - 'DATETIME', - 'TIMESTAMP', - 'DECIMAL', - 'FLOAT', - 'DOUBLE', - 'BOOLEAN', - 'BLOB', - 'CLOB', - ]; - this.init(); - } - - init() { - const formatBtn = document.getElementById('format-sql'); - const minifyBtn = document.getElementById('minify-sql'); - const clearBtn = document.getElementById('clear-sql'); - const inputTextarea = document.getElementById('sql-input'); - - if (formatBtn) { - formatBtn.addEventListener('click', () => this.formatSQL()); - } - - if (minifyBtn) { - minifyBtn.addEventListener('click', () => this.minifySQL()); - } - - if (clearBtn) { - clearBtn.addEventListener('click', () => this.clearAll()); - } - - if (inputTextarea) { - inputTextarea.addEventListener('input', () => this.clearOutput()); - } - } - - formatSQL() { - const input = document.getElementById('sql-input').value.trim(); - const output = document.getElementById('sql-output'); - const uppercaseKeywords = - document.getElementById('uppercase-keywords').checked; - const useTabs = document.getElementById('indent-tabs').checked; - - if (!input) { - window.app?.showMessage('Please enter SQL to format.', 'error'); - return; - } - - try { - const formatted = this.formatSQLQuery(input, { - uppercaseKeywords, - useTabs, - }); - output.textContent = formatted; - window.app?.showMessage('SQL formatted successfully!', 'success'); - } catch (error) { - window.app?.showMessage( - 'Error formatting SQL: ' + error.message, - 'error' - ); - } - } - - minifySQL() { - const input = document.getElementById('sql-input').value.trim(); - const output = document.getElementById('sql-output'); - - if (!input) { - window.app?.showMessage('Please enter SQL to minify.', 'error'); - return; - } - - try { - const minified = this.minifySQLQuery(input); - output.textContent = minified; - window.app?.showMessage('SQL minified successfully!', 'success'); - } catch (error) { - window.app?.showMessage('Error minifying SQL: ' + error.message, 'error'); - } - } - - formatSQLQuery(sql, options = {}) { - const { uppercaseKeywords = true, useTabs = true } = options; - const indent = useTabs ? '\t' : ' '; - - let formatted = sql; - let indentLevel = 0; - - formatted = formatted.replace(/\s+/g, ' ').trim(); - - if (uppercaseKeywords) { - this.keywords.forEach((keyword) => { - const regex = new RegExp('\\b' + keyword + '\\b', 'gi'); - formatted = formatted.replace(regex, keyword.toUpperCase()); - }); - } - - formatted = formatted.replace( - /\s*,\s*/g, - ',\n' + indent.repeat(indentLevel + 1) - ); - - formatted = formatted.replace(/\bSELECT\b/gi, '\nSELECT'); - formatted = formatted.replace(/\bFROM\b/gi, '\nFROM'); - formatted = formatted.replace(/\bWHERE\b/gi, '\nWHERE'); - formatted = formatted.replace(/\bINNER\s+JOIN\b/gi, '\nINNER JOIN'); - formatted = formatted.replace(/\bLEFT\s+JOIN\b/gi, '\nLEFT JOIN'); - formatted = formatted.replace(/\bRIGHT\s+JOIN\b/gi, '\nRIGHT JOIN'); - formatted = formatted.replace( - /\bFULL\s+OUTER\s+JOIN\b/gi, - '\nFULL OUTER JOIN' - ); - formatted = formatted.replace(/\bGROUP\s+BY\b/gi, '\nGROUP BY'); - formatted = formatted.replace(/\bORDER\s+BY\b/gi, '\nORDER BY'); - formatted = formatted.replace(/\bHAVING\b/gi, '\nHAVING'); - formatted = formatted.replace(/\bUNION\b/gi, '\nUNION'); - formatted = formatted.replace(/\bINSERT\s+INTO\b/gi, '\nINSERT INTO'); - formatted = formatted.replace(/\bUPDATE\b/gi, '\nUPDATE'); - formatted = formatted.replace(/\bSET\b/gi, '\nSET'); - formatted = formatted.replace(/\bDELETE\s+FROM\b/gi, '\nDELETE FROM'); - - formatted = formatted.replace(/\bAND\b/gi, '\n' + indent + 'AND'); - formatted = formatted.replace(/\bOR\b/gi, '\n' + indent + 'OR'); - - formatted = formatted.replace(/\(\s*/g, '(\n' + indent); - formatted = formatted.replace(/\s*\)/g, '\n)'); - - const lines = formatted.split('\n'); - let result = []; - let currentIndent = 0; - - for (let line of lines) { - line = line.trim(); - if (!line) continue; - - if ( - line.endsWith('(') || - line.match(/\b(SELECT|FROM|WHERE|JOIN|GROUP BY|ORDER BY|HAVING)\b/i) - ) { - result.push(indent.repeat(currentIndent) + line); - if (line.endsWith('(')) { - currentIndent++; - } - } else if (line === ')') { - currentIndent = Math.max(0, currentIndent - 1); - result.push(indent.repeat(currentIndent) + line); - } else if (line.startsWith('AND') || line.startsWith('OR')) { - result.push(indent.repeat(currentIndent + 1) + line); - } else { - result.push(indent.repeat(currentIndent) + line); - } - } - - return result - .join('\n') - .replace(/\n{3,}/g, '\n\n') - .trim(); - } - - minifySQLQuery(sql) { - return sql - .replace(/\s+/g, ' ') - .replace(/\s*,\s*/g, ',') - .replace(/\s*\(\s*/g, '(') - .replace(/\s*\)\s*/g, ')') - .replace(/\s*=\s*/g, '=') - .replace(/\s*<\s*/g, '<') - .replace(/\s*>\s*/g, '>') - .replace(/\s*;\s*/g, ';') - .trim(); - } - - clearAll() { - document.getElementById('sql-input').value = ''; - this.clearOutput(); - window.app?.showMessage('SQL cleared!', 'info'); - } - - clearOutput() { - document.getElementById('sql-output').textContent = ''; - } -} - -window.SQLFormatter = new SQLFormatter(); - -const sqlStyles = ` -.sql-options { - display: flex; - gap: 20px; - margin: 15px 0; - flex-wrap: wrap; -} - -.sql-options label { - display: flex; - align-items: center; - gap: 8px; - font-size: 14px; - color: #1d1d1f; - cursor: pointer; -} - -.sql-options input[type="checkbox"] { - margin: 0; -} - -#sql-output { - background-color: #f8f9fa; - border: 2px solid #f0f0f0; - border-radius: 8px; - padding: 15px; - font-family: 'Monaco', 'Consolas', monospace; - font-size: 13px; - line-height: 1.4; - white-space: pre; - overflow: auto; - max-height: 400px; - min-height: 200px; -} -`; - -const sqlFormatterStyle = document.createElement('style'); -sqlFormatterStyle.textContent = sqlFormatterStyles; -document.head.appendChild(sqlFormatterStyle); diff --git a/src/renderer/js/tools/text-compare.js b/src/renderer/js/tools/text-compare.js deleted file mode 100644 index 4520ba2f..00000000 --- a/src/renderer/js/tools/text-compare.js +++ /dev/null @@ -1,372 +0,0 @@ -class TextCompare { - constructor() { - this.init(); - } - - init() { - const compareBtn = document.getElementById('compare-texts'); - const clearBtn = document.getElementById('clear-comparison'); - - if (compareBtn) { - compareBtn.addEventListener('click', () => this.compareTexts()); - } - - if (clearBtn) { - clearBtn.addEventListener('click', () => this.clearComparison()); - } - } - - compareTexts() { - const text1 = document.getElementById('text1').value; - const text2 = document.getElementById('text2').value; - const caseSensitive = document.getElementById('case-sensitive').checked; - const ignoreWhitespace = document.getElementById('ignore-whitespace').checked; - const resultDiv = document.getElementById('comparison-result'); - - if (!text1.trim() && !text2.trim()) { - resultDiv.innerHTML = '
        Please enter text in both fields to compare.
        '; - return; - } - - if (!text1.trim() || !text2.trim()) { - resultDiv.innerHTML = '
        Please enter text in both fields to compare.
        '; - return; - } - - const options = { caseSensitive, ignoreWhitespace }; - const differences = this.getDifferences(text1, text2, options); - const stats = this.getComparisonStats(text1, text2, differences, options); - - if (differences.length === 0) { - resultDiv.innerHTML = ` -
        -

        Comparison Results

        -
        -
        - - ${stats.text1Length} characters -
        -
        - - ${stats.text2Length} characters -
        -
        - - ${stats.similarity}% -
        -
        - - Identical -
        -
        -
        -
        -

        Texts are identical!

        -

        No differences were found between the two texts.

        -
        - `; - } else { - resultDiv.innerHTML = ` -
        -

        Comparison Results

        -
        -
        - - ${stats.text1Length} characters -
        -
        - - ${stats.text2Length} characters -
        -
        - - ${stats.similarity}% -
        -
        - - ${differences.length} changes -
        -
        -
        -
        -
        -

        Text 1

        -
        ${this.highlightDifferences(text1, differences, 'left')}
        -
        -
        -

        Text 2

        -
        ${this.highlightDifferences(text2, differences, 'right')}
        -
        -
        - `; - } - - window.app?.showMessage('Text comparison completed!', 'success'); - } - - getDifferences(text1, text2, options = {}) { - let processedText1 = text1; - let processedText2 = text2; - - // Apply preprocessing based on options - if (!options.caseSensitive) { - processedText1 = processedText1.toLowerCase(); - processedText2 = processedText2.toLowerCase(); - } - - if (options.ignoreWhitespace) { - processedText1 = processedText1.replace(/\s+/g, ' ').trim(); - processedText2 = processedText2.replace(/\s+/g, ' ').trim(); - } - - const lines1 = processedText1.split('\n'); - const lines2 = processedText2.split('\n'); - const originalLines1 = text1.split('\n'); - const originalLines2 = text2.split('\n'); - const differences = []; - - const maxLines = Math.max(lines1.length, lines2.length); - - for (let i = 0; i < maxLines; i++) { - const line1 = lines1[i] || ''; - const line2 = lines2[i] || ''; - const originalLine1 = originalLines1[i] || ''; - const originalLine2 = originalLines2[i] || ''; - - if (line1 !== line2) { - differences.push({ - line: i, - text1: originalLine1, - text2: originalLine2, - type: this.getDifferenceType(originalLine1, originalLine2) - }); - } - } - - return differences; - } - - getDifferenceType(line1, line2) { - if (!line1) return 'added'; - if (!line2) return 'removed'; - return 'modified'; - } - - getComparisonStats(text1, text2, differences, options = {}) { - const text1Length = text1.length; - const text2Length = text2.length; - - let processedText1 = text1; - let processedText2 = text2; - - // Apply same preprocessing for similarity calculation - if (!options.caseSensitive) { - processedText1 = processedText1.toLowerCase(); - processedText2 = processedText2.toLowerCase(); - } - - if (options.ignoreWhitespace) { - processedText1 = processedText1.replace(/\s+/g, ' ').trim(); - processedText2 = processedText2.replace(/\s+/g, ' ').trim(); - } - - const similarity = this.calculateSimilarity(processedText1, processedText2); - - return { - text1Length, - text2Length, - similarity: Math.round(similarity * 100), - differences: differences.length - }; - } - - calculateSimilarity(text1, text2) { - const longer = text1.length > text2.length ? text1 : text2; - const shorter = text1.length > text2.length ? text2 : text1; - - if (longer.length === 0) { - return 1.0; - } - - const editDistance = this.levenshteinDistance(longer, shorter); - return (longer.length - editDistance) / longer.length; - } - - levenshteinDistance(str1, str2) { - const matrix = []; - - for (let i = 0; i <= str2.length; i++) { - matrix[i] = [i]; - } - - for (let j = 0; j <= str1.length; j++) { - matrix[0][j] = j; - } - - for (let i = 1; i <= str2.length; i++) { - for (let j = 1; j <= str1.length; j++) { - if (str2.charAt(i - 1) === str1.charAt(j - 1)) { - matrix[i][j] = matrix[i - 1][j - 1]; - } else { - matrix[i][j] = Math.min( - matrix[i - 1][j - 1] + 1, - matrix[i][j - 1] + 1, - matrix[i - 1][j] + 1 - ); - } - } - } - - return matrix[str2.length][str1.length]; - } - - highlightDifferences(text, differences, side) { - const lines = text.split('\n'); - const highlightedLines = []; - - for (let i = 0; i < lines.length; i++) { - const diff = differences.find(d => d.line === i); - if (diff) { - let className = ''; - let lineContent = ''; - - if (diff.type === 'added' && side === 'right') { - className = 'diff-added'; - lineContent = this.escapeHtml(lines[i] || ''); - } else if (diff.type === 'removed' && side === 'left') { - className = 'diff-removed'; - lineContent = this.escapeHtml(lines[i] || ''); - } else if (diff.type === 'modified') { - className = 'diff-modified'; - // For modified lines, highlight character-level differences - const currentLine = lines[i] || ''; - const otherLine = side === 'left' ? diff.text2 : diff.text1; - lineContent = this.highlightCharacterDifferences(currentLine, otherLine); - } - - const lineNumber = `${i + 1}`.padStart(3, ' '); - highlightedLines.push(`
        ${lineNumber}${lineContent}
        `); - } else { - const lineNumber = `${i + 1}`.padStart(3, ' '); - highlightedLines.push(`
        ${lineNumber}${this.escapeHtml(lines[i] || '')}
        `); - } - } - - return highlightedLines.join(''); - } - - highlightCharacterDifferences(currentLine, otherLine) { - if (!currentLine && !otherLine) return ''; - if (!currentLine) return this.escapeHtml(currentLine); - if (!otherLine) return this.escapeHtml(currentLine); - - // Use a more sophisticated approach to find the longest common subsequence - const matrix = this.buildDiffMatrix(currentLine, otherLine); - const diffs = this.extractDiffs(currentLine, otherLine, matrix); - - return this.renderCharacterDiffs(diffs); - } - - buildDiffMatrix(str1, str2) { - const matrix = []; - const len1 = str1.length; - const len2 = str2.length; - - // Initialize matrix - for (let i = 0; i <= len1; i++) { - matrix[i] = []; - for (let j = 0; j <= len2; j++) { - matrix[i][j] = 0; - } - } - - // Fill the matrix - for (let i = 1; i <= len1; i++) { - for (let j = 1; j <= len2; j++) { - if (str1[i - 1] === str2[j - 1]) { - matrix[i][j] = matrix[i - 1][j - 1] + 1; - } else { - matrix[i][j] = Math.max(matrix[i - 1][j], matrix[i][j - 1]); - } - } - } - - return matrix; - } - - extractDiffs(str1, str2, matrix) { - const diffs = []; - let i = str1.length; - let j = str2.length; - - while (i > 0 || j > 0) { - if (i > 0 && j > 0 && str1[i - 1] === str2[j - 1]) { - diffs.unshift({ type: 'equal', char: str1[i - 1] }); - i--; - j--; - } else if (j > 0 && (i === 0 || matrix[i][j - 1] >= matrix[i - 1][j])) { - diffs.unshift({ type: 'insert', char: str2[j - 1] }); - j--; - } else if (i > 0) { - diffs.unshift({ type: 'delete', char: str1[i - 1] }); - i--; - } - } - - return diffs; - } - - renderCharacterDiffs(diffs) { - const result = []; - let inDiffGroup = false; - let diffGroup = []; - - for (let i = 0; i < diffs.length; i++) { - const diff = diffs[i]; - - if (diff.type === 'equal') { - // If we were in a diff group, close it - if (inDiffGroup) { - if (diffGroup.length > 0) { - result.push(`${diffGroup.join('')}`); - } - diffGroup = []; - inDiffGroup = false; - } - result.push(this.escapeHtml(diff.char)); - } else { - // Start or continue a diff group - if (!inDiffGroup) { - inDiffGroup = true; - } - - if (diff.type === 'delete') { - diffGroup.push(this.escapeHtml(diff.char)); - } - // For 'insert' type, we don't add to current line (it belongs to the other line) - } - } - - // Close any remaining diff group - if (inDiffGroup && diffGroup.length > 0) { - result.push(`${diffGroup.join('')}`); - } - - return result.join(''); - } - - escapeHtml(text) { - const div = document.createElement('div'); - div.textContent = text; - return div.innerHTML; - } - - clearComparison() { - document.getElementById('text1').value = ''; - document.getElementById('text2').value = ''; - document.getElementById('comparison-result').innerHTML = ''; - window.app?.showMessage('Comparison cleared!', 'info'); - } -} - -window.TextCompare = new TextCompare(); \ No newline at end of file diff --git a/src/renderer/js/tools/timestamp.js b/src/renderer/js/tools/timestamp.js deleted file mode 100644 index 9ffa25b5..00000000 --- a/src/renderer/js/tools/timestamp.js +++ /dev/null @@ -1,219 +0,0 @@ -class TimestampConverter { - constructor() { - this.init(); - this.updateCurrentTime(); - this.startClock(); - } - - init() { - const tabButtons = document.querySelectorAll('#timestamp .tab-btn'); - const refreshBtn = document.getElementById('refresh-time'); - const convertTsBtn = document.getElementById('convert-ts-to-date'); - const convertDateBtn = document.getElementById('convert-date-to-ts'); - - tabButtons.forEach((button) => { - button.addEventListener('click', () => { - this.switchTab(button.dataset.tab); - }); - }); - - if (refreshBtn) { - refreshBtn.addEventListener('click', () => this.updateCurrentTime()); - } - - if (convertTsBtn) { - convertTsBtn.addEventListener('click', () => - this.convertTimestampToDate() - ); - } - - if (convertDateBtn) { - convertDateBtn.addEventListener('click', () => - this.convertDateToTimestamp() - ); - } - - const inputs = document.querySelectorAll('#timestamp-input, #date-input'); - inputs.forEach((input) => { - input.addEventListener('input', () => this.clearOutputs()); - }); - } - - startClock() { - this.clockInterval = setInterval(() => { - this.updateCurrentTime(); - }, 1000); - } - - updateCurrentTime() { - const now = new Date(); - const timestamp = Math.floor(now.getTime() / 1000); - const dateString = now.toLocaleString(); - - document.getElementById('current-timestamp').textContent = timestamp; - document.getElementById('current-date').textContent = dateString; - } - - switchTab(tabName) { - const container = document.getElementById('timestamp'); - - container.querySelectorAll('.tab-btn').forEach((btn) => { - btn.classList.remove('active'); - }); - container.querySelectorAll('.tab-content').forEach((content) => { - content.classList.remove('active'); - }); - - container.querySelector(`[data-tab="${tabName}"]`).classList.add('active'); - container.getElementById(`${tabName}-tab`).classList.add('active'); - - this.clearOutputs(); - } - - convertTimestampToDate() { - const input = document.getElementById('timestamp-input').value; - const output = document.getElementById('date-output'); - - if (!input.trim()) { - window.app?.showMessage('Please enter a timestamp.', 'error'); - return; - } - - try { - let timestamp = parseInt(input); - - if (timestamp.toString().length === 10) { - timestamp = timestamp * 1000; - } else if (timestamp.toString().length !== 13) { - throw new Error('Invalid timestamp format'); - } - - const date = new Date(timestamp); - - if (isNaN(date.getTime())) { - throw new Error('Invalid timestamp'); - } - - const result = ` -Local Time: ${date.toLocaleString()} -UTC Time: ${date.toUTCString()} -ISO String: ${date.toISOString()} -Date Only: ${date.toDateString()} -Time Only: ${date.toTimeString()} - -Timestamp (seconds): ${Math.floor(timestamp / 1000)} -Timestamp (milliseconds): ${timestamp} - `.trim(); - - output.value = result; - window.app?.showMessage('Timestamp converted successfully!', 'success'); - } catch (error) { - window.app?.showMessage('Error: ' + error.message, 'error'); - output.value = ''; - } - } - - convertDateToTimestamp() { - const input = document.getElementById('date-input').value; - const output = document.getElementById('timestamp-output'); - - if (!input.trim()) { - window.app?.showMessage('Please select a date and time.', 'error'); - return; - } - - try { - const date = new Date(input); - - if (isNaN(date.getTime())) { - throw new Error('Invalid date'); - } - - const timestamp = date.getTime(); - const timestampSeconds = Math.floor(timestamp / 1000); - - const result = ` -Date: ${date.toLocaleString()} -UTC: ${date.toUTCString()} -ISO: ${date.toISOString()} - -Timestamp (seconds): ${timestampSeconds} -Timestamp (milliseconds): ${timestamp} - `.trim(); - - output.value = result; - window.app?.showMessage('Date converted successfully!', 'success'); - } catch (error) { - window.app?.showMessage('Error: ' + error.message, 'error'); - output.value = ''; - } - } - - clearOutputs() { - document.getElementById('date-output').value = ''; - document.getElementById('timestamp-output').value = ''; - } - - destroy() { - if (this.clockInterval) { - clearInterval(this.clockInterval); - } - } -} - -window.TimestampConverter = new TimestampConverter(); - -const timestampStyles = ` -.timestamp-section { - background: #f8f9fa; - border-radius: 8px; - padding: 20px; - margin-bottom: 20px; -} - -.current-time { - display: flex; - align-items: center; - justify-content: space-between; - flex-wrap: wrap; - gap: 15px; -} - -.time-display { - display: flex; - flex-direction: column; - gap: 5px; -} - -.time-display strong { - font-size: 1.5rem; - color: #667eea; - font-family: 'Monaco', 'Consolas', monospace; -} - -.time-display span { - color: #86868b; - font-size: 0.9rem; -} - -#timestamp-input, -#date-input { - width: 100%; - padding: 10px 15px; - border: 2px solid #f0f0f0; - border-radius: 6px; - font-size: 14px; - margin-bottom: 15px; - transition: border-color 0.3s ease; -} - -#timestamp-input:focus, -#date-input:focus { - outline: none; - border-color: #667eea; -} -`; - -const timestampStyle = document.createElement('style'); -timestampStyle.textContent = timestampStyles; -document.head.appendChild(timestampStyle); diff --git a/src/renderer/js/tools/unit-converter.js b/src/renderer/js/tools/unit-converter.js deleted file mode 100644 index 714b3501..00000000 --- a/src/renderer/js/tools/unit-converter.js +++ /dev/null @@ -1,268 +0,0 @@ -/** - * Unit Converter Tool - * Converts between different units of measurement including: - * - Length (mm, cm, m, km, in, ft, yd, mi) - * - Weight (mg, g, kg, oz, lb, st, t) - * - Temperature (C, F, K) - * - Currency (USD, EUR, GBP, JPY, CAD, AUD) - */ - -class UnitConverter { - constructor() { - this.currentCategory = 'length'; - this.init(); - } - - init() { - // Set up event listeners - const categorySelect = document.getElementById('unit-category'); - const convertBtn = document.getElementById('convert-units'); - const swapBtn = document.getElementById('swap-units'); - const inputField = document.getElementById('unit-input'); - - if (categorySelect) { - categorySelect.addEventListener('change', () => this.onCategoryChange()); - } - - if (convertBtn) { - convertBtn.addEventListener('click', () => this.convertUnits()); - } - - if (swapBtn) { - swapBtn.addEventListener('click', () => this.swapUnits()); - } - - if (inputField) { - inputField.addEventListener('input', () => { - this.clearErrors(); - this.convertUnits(); - }); - inputField.addEventListener('keypress', (e) => { - if (e.key === 'Enter') { - this.convertUnits(); - } - }); - } - - // Initialize the form - this.initializeCategories(); - this.onCategoryChange(); - } - - initializeCategories() { - const categorySelect = document.getElementById('unit-category'); - if (!categorySelect) return; - - // Clear existing options - categorySelect.innerHTML = ''; - - // Add categories - const categories = this.getCategories(); - categories.forEach((category) => { - const option = document.createElement('option'); - option.value = category; - option.textContent = this.getCategoryName(category); - categorySelect.appendChild(option); - }); - - categorySelect.value = this.currentCategory; - } - - onCategoryChange() { - const categorySelect = document.getElementById('unit-category'); - if (!categorySelect) return; - - this.currentCategory = categorySelect.value; - this.populateUnitSelects(); - this.clearResults(); - this.clearErrors(); - - // Show currency disclaimer for currency conversions - this.showCurrencyDisclaimer(); - } - - populateUnitSelects() { - const fromSelect = document.getElementById('unit-from'); - const toSelect = document.getElementById('unit-to'); - - if (!fromSelect || !toSelect) return; - - const units = this.getUnitsForCategory(this.currentCategory); - const unitKeys = Object.keys(units); - - // Clear existing options - fromSelect.innerHTML = ''; - toSelect.innerHTML = ''; - - // Populate both selects - unitKeys.forEach((unitKey) => { - const fromOption = document.createElement('option'); - fromOption.value = unitKey; - fromOption.textContent = units[unitKey]; - fromSelect.appendChild(fromOption); - - const toOption = document.createElement('option'); - toOption.value = unitKey; - toOption.textContent = units[unitKey]; - toSelect.appendChild(toOption); - }); - - // Set default selections - if (unitKeys.length >= 2) { - fromSelect.value = unitKeys[0]; - toSelect.value = unitKeys[1]; - } - } - - convertUnits() { - const inputValue = document.getElementById('unit-input').value; - const fromUnit = document.getElementById('unit-from').value; - const toUnit = document.getElementById('unit-to').value; - const outputField = document.getElementById('unit-output'); - - if (!inputValue.trim()) { - this.clearResults(); - return; - } - - try { - const result = this.convert( - inputValue, - this.currentCategory, - fromUnit, - toUnit - ); - - if (outputField) { - outputField.value = result.toString(); - } - - this.clearErrors(); - this.updateConversionInfo(inputValue, fromUnit, toUnit, result); - } catch (error) { - this.showError(error.message); - this.clearResults(); - } - } - - swapUnits() { - const fromSelect = document.getElementById('unit-from'); - const toSelect = document.getElementById('unit-to'); - const inputField = document.getElementById('unit-input'); - const outputField = document.getElementById('unit-output'); - - if (!fromSelect || !toSelect) return; - - // Swap the unit selections - const tempValue = fromSelect.value; - fromSelect.value = toSelect.value; - toSelect.value = tempValue; - - // Swap the input/output values if they exist - if (inputField && outputField && inputField.value && outputField.value) { - const tempInput = inputField.value; - inputField.value = outputField.value; - outputField.value = tempInput; - } - - // Convert with new values - this.convertUnits(); - } - - updateConversionInfo(inputValue, fromUnit, toUnit, result) { - const infoDiv = document.getElementById('conversion-info'); - if (!infoDiv) return; - - const fromUnitName = this.getUnitsForCategory(this.currentCategory)[ - fromUnit - ]; - const toUnitName = this.getUnitsForCategory(this.currentCategory)[toUnit]; - - infoDiv.innerHTML = ` -
        - ${inputValue} ${fromUnitName} = - ${result} ${toUnitName} -
        - `; - infoDiv.style.display = 'block'; - } - - showCurrencyDisclaimer() { - const disclaimerDiv = document.getElementById('currency-disclaimer'); - if (!disclaimerDiv) return; - - if (this.currentCategory === 'currency') { - disclaimerDiv.style.display = 'block'; - } else { - disclaimerDiv.style.display = 'none'; - } - } - - clearResults() { - const outputField = document.getElementById('unit-output'); - const infoDiv = document.getElementById('conversion-info'); - - if (outputField) { - outputField.value = ''; - } - - if (infoDiv) { - infoDiv.style.display = 'none'; - } - } - - showError(message) { - const errorDiv = document.getElementById('unit-converter-error'); - if (errorDiv) { - errorDiv.textContent = message; - errorDiv.style.display = 'block'; - } - } - - clearErrors() { - const errorDiv = document.getElementById('unit-converter-error'); - if (errorDiv) { - errorDiv.style.display = 'none'; - } - } - - // Utility methods that delegate to UnitConverterUtils - convert(value, category, fromUnit, toUnit) { - // Check if we're in browser environment and need to use embedded utils - if (typeof UnitConverterUtils !== 'undefined') { - return UnitConverterUtils.convert(value, category, fromUnit, toUnit); - } - - // Fallback error if utils not available - throw new Error('Unit conversion utilities not available'); - } - - getUnitsForCategory(category) { - if (typeof UnitConverterUtils !== 'undefined') { - return UnitConverterUtils.getUnitsForCategory(category); - } - return {}; - } - - getCategories() { - if (typeof UnitConverterUtils !== 'undefined') { - return UnitConverterUtils.getCategories(); - } - return []; - } - - getCategoryName(category) { - if (typeof UnitConverterUtils !== 'undefined') { - return UnitConverterUtils.getCategoryName(category); - } - return category; - } -} - -// Global instance registration -window.UnitConverter = new UnitConverter(); - -// Export for Node.js testing -if (typeof module !== 'undefined' && module.exports) { - module.exports = UnitConverter; -} diff --git a/src/renderer/js/tools/url-encoder.js b/src/renderer/js/tools/url-encoder.js deleted file mode 100644 index 3e5fc5e9..00000000 --- a/src/renderer/js/tools/url-encoder.js +++ /dev/null @@ -1,183 +0,0 @@ -class URLEncoder { - constructor() { - this.init(); - } - - init() { - const tabButtons = document.querySelectorAll('#url-encoder .tab-btn'); - const encodeBtn = document.getElementById('url-encode-btn'); - const decodeBtn = document.getElementById('url-decode-btn'); - const copyEncodedBtn = document.getElementById('copy-encoded'); - const copyDecodedBtn = document.getElementById('copy-decoded'); - const clearEncodeBtn = document.getElementById('clear-encode'); - const clearDecodeBtn = document.getElementById('clear-decode'); - - tabButtons.forEach(button => { - button.addEventListener('click', () => { - this.switchTab(button.dataset.tab); - }); - }); - - if (encodeBtn) { - encodeBtn.addEventListener('click', () => this.encodeURL()); - } - - if (decodeBtn) { - decodeBtn.addEventListener('click', () => this.decodeURL()); - } - - if (copyEncodedBtn) { - copyEncodedBtn.addEventListener('click', () => this.copyToClipboard('url-encoded-output')); - } - - if (copyDecodedBtn) { - copyDecodedBtn.addEventListener('click', () => this.copyToClipboard('url-decoded-output')); - } - - if (clearEncodeBtn) { - clearEncodeBtn.addEventListener('click', () => this.clearEncode()); - } - - if (clearDecodeBtn) { - clearDecodeBtn.addEventListener('click', () => this.clearDecode()); - } - - // Add Enter key support - const encodeInput = document.getElementById('url-to-encode'); - const decodeInput = document.getElementById('url-to-decode'); - - if (encodeInput) { - encodeInput.addEventListener('keypress', (e) => { - if (e.key === 'Enter' && e.ctrlKey) { - this.encodeURL(); - } - }); - } - - if (decodeInput) { - decodeInput.addEventListener('keypress', (e) => { - if (e.key === 'Enter' && e.ctrlKey) { - this.decodeURL(); - } - }); - } - } - - switchTab(tabName) { - const encoder = document.getElementById('url-encoder'); - - encoder.querySelectorAll('.tab-btn').forEach(btn => { - btn.classList.remove('active'); - }); - encoder.querySelectorAll('.tab-content').forEach(content => { - content.classList.remove('active'); - }); - - encoder.querySelector(`[data-tab="${tabName}"]`).classList.add('active'); - document.getElementById(`${tabName}-tab`).classList.add('active'); - - this.clearOutputs(); - } - - encodeURL() { - const input = document.getElementById('url-to-encode').value; - const output = document.getElementById('url-encoded-output'); - - if (!input.trim()) { - window.app?.showMessage('Please enter URL or text to encode.', 'error'); - return; - } - - try { - // Use encodeURIComponent for full encoding - const encoded = encodeURIComponent(input); - output.value = encoded; - - // Show some stats - const originalLength = input.length; - const encodedLength = encoded.length; - const message = `URL encoded successfully! (${originalLength} → ${encodedLength} characters)`; - - window.app?.showMessage(message, 'success'); - this.selectOutput('url-encoded-output'); - } catch (error) { - window.app?.showMessage('Error encoding URL: ' + error.message, 'error'); - output.value = ''; - } - } - - decodeURL() { - const input = document.getElementById('url-to-decode').value; - const output = document.getElementById('url-decoded-output'); - - if (!input.trim()) { - window.app?.showMessage('Please enter encoded URL to decode.', 'error'); - return; - } - - try { - const decoded = decodeURIComponent(input); - output.value = decoded; - - // Show some stats - const originalLength = input.length; - const decodedLength = decoded.length; - const message = `URL decoded successfully! (${originalLength} → ${decodedLength} characters)`; - - window.app?.showMessage(message, 'success'); - this.selectOutput('url-decoded-output'); - } catch (error) { - window.app?.showMessage('Error decoding URL: Invalid URL encoding format', 'error'); - output.value = ''; - } - } - - selectOutput(outputId) { - const output = document.getElementById(outputId); - setTimeout(() => { - output.select(); - output.setSelectionRange(0, 99999); - }, 100); - } - - copyToClipboard(outputId) { - const output = document.getElementById(outputId); - - if (!output.value.trim()) { - window.app?.showMessage('Nothing to copy - please encode/decode some text first.', 'warning'); - return; - } - - try { - navigator.clipboard.writeText(output.value).then(() => { - window.app?.showMessage('Copied to clipboard!', 'success'); - }).catch(() => { - // Fallback for older browsers - output.select(); - document.execCommand('copy'); - window.app?.showMessage('Copied to clipboard!', 'success'); - }); - } catch (error) { - window.app?.showMessage('Failed to copy to clipboard.', 'error'); - } - } - - clearEncode() { - document.getElementById('url-to-encode').value = ''; - document.getElementById('url-encoded-output').value = ''; - window.app?.showMessage('Encoder cleared!', 'info'); - } - - clearDecode() { - document.getElementById('url-to-decode').value = ''; - document.getElementById('url-decoded-output').value = ''; - window.app?.showMessage('Decoder cleared!', 'info'); - } - - clearOutputs() { - document.getElementById('url-encoded-output').value = ''; - document.getElementById('url-decoded-output').value = ''; - } -} - -window.URLEncoder = new URLEncoder(); \ No newline at end of file diff --git a/src/renderer/js/tools/uuid-generator.js b/src/renderer/js/tools/uuid-generator.js deleted file mode 100644 index 888a1ec2..00000000 --- a/src/renderer/js/tools/uuid-generator.js +++ /dev/null @@ -1,226 +0,0 @@ -class UUIDGenerator { - constructor() { - this.init(); - } - - init() { - const generateBtn = document.getElementById('generate-uuid'); - const outputTextarea = document.getElementById('uuid-output'); - - if (generateBtn) { - generateBtn.addEventListener('click', () => this.generateUUIDs()); - } - - if (outputTextarea) { - outputTextarea.addEventListener('click', () => this.selectAllUUIDs()); - } - } - - generateUUIDs() { - const version = document.getElementById('uuid-version').value; - const count = parseInt(document.getElementById('uuid-count').value); - const output = document.getElementById('uuid-output'); - - if (count < 1 || count > 100) { - window.app?.showMessage('Please enter a count between 1 and 100.', 'error'); - return; - } - - const uuids = []; - - for (let i = 0; i < count; i++) { - let uuid = ''; - - if (version === '4') { - uuid = this.generateUUIDv4(); - } else if (version === '1') { - uuid = this.generateUUIDv1(); - } else if (version === '3') { - uuid = this.generateUUIDv3(); - } else if (version === '5') { - uuid = this.generateUUIDv5(); - } else if (version === '6') { - uuid = this.generateUUIDv6(); - } else if (version === '7') { - uuid = this.generateUUIDv7(); - } else if (version === 'ulid') { - uuid = this.generateULID(); - } - - uuids.push(uuid); - } - - output.value = uuids.join('\n'); - window.app?.showMessage(`Generated ${count} UUID${count > 1 ? 's' : ''}!`, 'success'); - - this.selectAllUUIDs(); - } - - generateUUIDv4() { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { - const r = Math.random() * 16 | 0; - const v = c == 'x' ? r : (r & 0x3 | 0x8); - return v.toString(16); - }); - } - - generateUUIDv1() { - const timestamp = Date.now(); - const timestampHex = timestamp.toString(16); - - const randomBytes = []; - for (let i = 0; i < 16; i++) { - randomBytes.push(Math.floor(Math.random() * 256).toString(16).padStart(2, '0')); - } - - const timeLow = timestampHex.padStart(8, '0').substring(0, 8); - const timeMid = timestampHex.padStart(8, '0').substring(0, 4); - const timeHi = '1' + timestampHex.padStart(8, '0').substring(0, 3); - - const clockSeq = randomBytes.slice(8, 10).join(''); - const node = randomBytes.slice(10, 16).join(''); - - return `${timeLow}-${timeMid}-${timeHi}-${clockSeq}-${node}`; - } - - generateUUIDv3() { - // UUID v3 using MD5 hash - simplified implementation - const namespace = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; // DNS namespace - const name = 'example.com'; // Default name - const hash = this.md5(namespace + name); - return this.formatUUIDFromHash(hash, 3); - } - - generateUUIDv5() { - // UUID v5 using SHA-1 hash - simplified implementation - const namespace = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; // DNS namespace - const name = 'example.com'; // Default name - const hash = this.sha1(namespace + name); - return this.formatUUIDFromHash(hash, 5); - } - - generateUUIDv6() { - // UUID v6 - Gregorian time, reordered for sorting - const timestamp = Date.now(); - const timestampHex = (timestamp + 0x01b21dd213814000).toString(16).padStart(24, '0'); - - const timeHiVer = '6' + timestampHex.substring(0, 3); - const timeMid = timestampHex.substring(3, 7); - const timeLow = timestampHex.substring(7, 15); - - const randomBytes = []; - for (let i = 0; i < 8; i++) { - randomBytes.push(Math.floor(Math.random() * 256).toString(16).padStart(2, '0')); - } - - const clockSeq = '8' + randomBytes[0].substring(1) + randomBytes[1]; - const node = randomBytes.slice(2, 8).join(''); - - return `${timeLow}-${timeMid}-${timeHiVer}-${clockSeq}-${node}`; - } - - generateUUIDv7() { - // UUID v7 - Random-based with Unix timestamp - const timestamp = Math.floor(Date.now() / 1000); - const timestampHex = timestamp.toString(16).padStart(12, '0'); - const randomHex = Array.from({length: 10}, () => - Math.floor(Math.random() * 16).toString(16) - ).join(''); - - const timeHiVer = '7' + timestampHex.substring(0, 3); - const timeMid = timestampHex.substring(3, 7); - const timeLow = timestampHex.substring(7, 12); - const randB = randomHex.substring(0, 4); - const clockSeq = '8' + randomHex.substring(4, 7); - const node = randomHex.substring(7, 18); - - return `${timeLow}-${timeMid}-${timeHiVer}-${clockSeq}${randB}-${node}`; - } - - generateULID() { - // ULID implementation (26 chars: 10 timestamp + 16 random) - const encoding = '0123456789ABCDEFGHJKMNPQRSTVWXYZ'; // Crockford's Base32 - - // Get current timestamp in milliseconds since Unix epoch - const timestamp = Date.now(); - - // Convert timestamp to base32 (first 10 characters) - let timestampEncoded = ''; - let remainingTime = timestamp; - - for (let i = 0; i < 10; i++) { - const remainder = remainingTime % 32; - timestampEncoded = encoding[remainder] + timestampEncoded; - remainingTime = Math.floor(remainingTime / 32); - } - - // Generate random part (16 characters) - let randomEncoded = ''; - const randomBytes = []; - for (let i = 0; i < 16; i++) { - randomBytes.push(Math.floor(Math.random() * 32)); - } - - for (const byte of randomBytes) { - randomEncoded += encoding[byte]; - } - - return timestampEncoded + randomEncoded; - } - - // Helper methods for hash functions (simplified) - md5(str) { - // Simplified MD5-like hash for demonstration - let hash = 0; - for (let i = 0; i < str.length; i++) { - const char = str.charCodeAt(i); - hash = ((hash << 5) - hash) + char; - hash = hash & hash; // Convert to 32bit integer - } - return Math.abs(hash).toString(16).padStart(32, '0'); - } - - sha1(str) { - // Simplified SHA-1-like hash for demonstration - let hash = 0; - for (let i = 0; i < str.length; i++) { - const char = str.charCodeAt(i); - hash = ((hash << 5) - hash) + char; - hash = hash & hash; - } - return Math.abs(hash).toString(16).padStart(40, '0'); - } - - formatUUIDFromHash(hash, version) { - // Format hash into UUID structure - const hex = hash.substring(0, 32); - const timeLow = hex.substring(0, 8); - const timeMid = hex.substring(8, 12); - const timeHiVer = version.toString() + hex.substring(13, 16); - const clockSeq = '8' + hex.substring(17, 20); - const node = hex.substring(20, 32); - - return `${timeLow}-${timeMid}-${timeHiVer}-${clockSeq}-${node}`; - } - - selectAllUUIDs() { - const output = document.getElementById('uuid-output'); - if (output.value.trim()) { - setTimeout(() => { - output.select(); - output.setSelectionRange(0, 99999); - }, 100); - } - } - - copyToClipboard() { - const output = document.getElementById('uuid-output'); - if (output.value.trim()) { - navigator.clipboard.writeText(output.value).then(() => { - window.app?.showMessage('UUIDs copied to clipboard!', 'success'); - }); - } - } -} - -window.UUIDGenerator = new UUIDGenerator(); \ No newline at end of file diff --git a/src/renderer/styles/grid.css b/src/renderer/styles/grid.css deleted file mode 100644 index 80e7db55..00000000 --- a/src/renderer/styles/grid.css +++ /dev/null @@ -1,1264 +0,0 @@ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -:root { - --primary-color: #5E72E4; - --primary-dark: #4C63D2; - --primary-light: #8896FF; - --secondary-color: #F5365C; - --success-color: #2DCE89; - --warning-color: #FB6340; - --info-color: #11CDEF; - --dark-color: #172B4D; - --gray-dark: #32325D; - --gray: #8898AA; - --gray-light: #E9ECEF; - --white: #FFFFFF; - --background: #F7F8FC; - --surface: #FFFFFF; - --border-color: #E3E8F0; - --text-primary: #32325D; - --text-secondary: #525F7F; - --text-muted: #8898AA; - --shadow-sm: 0 0 0.5rem rgba(0, 0, 0, 0.075); - --shadow: 0 0 2rem 0 rgba(136, 152, 170, 0.15); - --shadow-lg: 0 0 3rem rgba(0, 0, 0, 0.175); - --border-radius: 0.375rem; - --border-radius-lg: 0.5rem; - --border-radius-xl: 0.75rem; - --transition: all 0.15s ease; -} - -body { - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; - background-color: var(--background); - color: var(--text-primary); - height: 100vh; - overflow: hidden; - font-size: 0.9375rem; - line-height: 1.6; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.app-container { - display: flex; - height: 100vh; -} - -.sidebar { - width: 260px; - background: linear-gradient(180deg, #5E72E4 0%, #825EE4 100%); - color: white; - overflow-y: auto; - overflow-x: hidden; - box-shadow: 0 0 2rem 0 rgba(136, 152, 170, 0.15); - scrollbar-width: thin; - scrollbar-color: rgba(255,255,255,0.2) transparent; -} - -.sidebar::-webkit-scrollbar { - width: 6px; -} - -.sidebar::-webkit-scrollbar-track { - background: transparent; -} - -.sidebar::-webkit-scrollbar-thumb { - background-color: rgba(255,255,255,0.2); - border-radius: 3px; -} - -.sidebar::-webkit-scrollbar-thumb:hover { - background-color: rgba(255,255,255,0.3); -} - -.sidebar-header { - padding: 1.5rem; - border-bottom: 1px solid rgba(255,255,255,0.08); - background: rgba(0,0,0,0.1); -} - -.sidebar-header h1 { - font-size: 1.25rem; - font-weight: 700; - letter-spacing: -0.025em; - display: flex; - align-items: center; - gap: 0.75rem; -} - -.sidebar-header h1 i { - font-size: 1.125rem; - opacity: 0.9; -} - -.sidebar-subtitle { - font-size: 0.75rem; - opacity: 0.7; - text-transform: uppercase; - letter-spacing: 0.1em; - margin-top: 0.25rem; - margin-left: 2rem; -} - -.nav-menu { - list-style: none; - padding: 0.5rem 0; -} - -.nav-menu li { - margin: 0; -} - -.nav-link { - display: flex; - align-items: center; - padding: 0.75rem 1.5rem; - color: rgba(255,255,255,0.8); - text-decoration: none; - transition: var(--transition); - position: relative; - font-size: 0.875rem; - font-weight: 500; -} - -.nav-link:hover { - background-color: rgba(255,255,255,0.08); - color: white; -} - -.nav-link.active { - background-color: rgba(255,255,255,0.15); - color: white; -} - -.nav-link.active::before { - content: ''; - position: absolute; - left: 0; - top: 0; - bottom: 0; - width: 3px; - background: white; -} - -.nav-link i { - margin-right: 0.75rem; - width: 1.25rem; - text-align: center; - font-size: 0.875rem; - opacity: 0.9; -} - -.main-content { - flex: 1; - padding: 2rem; - overflow-y: auto; - background-color: var(--background); - scrollbar-width: thin; - scrollbar-color: var(--gray-light) transparent; -} - -.main-content::-webkit-scrollbar { - width: 8px; -} - -.main-content::-webkit-scrollbar-track { - background: transparent; -} - -.main-content::-webkit-scrollbar-thumb { - background-color: var(--gray-light); - border-radius: 4px; -} - -.main-content::-webkit-scrollbar-thumb:hover { - background-color: var(--gray); -} - -.tool-container { - display: none; - max-width: 1200px; - margin: 0 auto; - animation: fadeIn 0.3s ease; -} - -.tool-container.active { - display: block; -} - -@keyframes fadeIn { - from { - opacity: 0; - transform: translateY(10px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -.tool-container h2 { - margin-bottom: 2rem; - color: var(--text-primary); - font-size: 1.75rem; - font-weight: 700; - letter-spacing: -0.025em; - display: flex; - align-items: center; - gap: 0.75rem; -} - -.tool-container h2 i { - font-size: 1.5rem; - color: var(--primary-color); - background: linear-gradient(135deg, var(--primary-color), var(--primary-light)); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; -} - -.home-content { - padding: 2rem 0; -} - -.home-hero { - text-align: center; - margin-bottom: 3rem; - padding: 2rem 0; -} - -.home-hero h1 { - font-size: 3rem; - margin-bottom: 1rem; - color: var(--text-primary); - font-weight: 800; - letter-spacing: -0.03em; - background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-light) 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - line-height: 1.2; -} - -.home-hero p { - font-size: 1.25rem; - margin-bottom: 2rem; - color: var(--text-secondary); - max-width: 600px; - margin-left: auto; - margin-right: auto; - line-height: 1.6; -} - -.home-stats { - display: flex; - justify-content: center; - gap: 3rem; - margin-top: 2rem; - flex-wrap: wrap; -} - -.stat-item { - display: flex; - align-items: center; - gap: 0.5rem; - color: var(--text-secondary); - font-weight: 600; - font-size: 0.9375rem; -} - -.stat-item i { - color: var(--primary-color); - font-size: 1.125rem; -} - -.tools-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); - gap: 1.5rem; - margin-top: 2rem; -} - -.tool-card { - background: var(--surface); - padding: 1.75rem; - border-radius: var(--border-radius-xl); - box-shadow: var(--shadow-sm); - border: 1px solid var(--border-color); - cursor: pointer; - transition: var(--transition); - position: relative; - overflow: hidden; -} - -.tool-card::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 3px; - background: linear-gradient(90deg, var(--primary-color), var(--primary-light)); - transform: scaleX(0); - transition: transform 0.3s ease; -} - -.tool-card:hover { - transform: translateY(-4px); - box-shadow: var(--shadow); - border-color: var(--primary-color); -} - -.tool-card:hover::before { - transform: scaleX(1); -} - -.tool-icon { - width: 3.5rem; - height: 3.5rem; - background: linear-gradient(135deg, var(--primary-color), var(--primary-light)); - border-radius: var(--border-radius-lg); - display: flex; - align-items: center; - justify-content: center; - margin-bottom: 1rem; - transition: var(--transition); -} - -.tool-card:hover .tool-icon { - transform: scale(1.1) rotate(5deg); -} - -.tool-icon i { - font-size: 1.5rem; - color: white; -} - -.tool-badge { - position: absolute; - top: 1rem; - right: 1rem; - background: linear-gradient(135deg, var(--primary-color), var(--primary-light)); - color: white; - padding: 0.25rem 0.625rem; - border-radius: 1rem; - font-size: 0.625rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.05em; -} - -.tool-card h3 { - font-size: 1.125rem; - margin-bottom: 0.5rem; - color: var(--text-primary); - font-weight: 600; - letter-spacing: -0.01em; -} - -.tool-card p { - color: var(--text-muted); - line-height: 1.5; - font-size: 0.875rem; -} - -.tool-content { - background: var(--surface); - border-radius: var(--border-radius-xl); - padding: 2rem; - box-shadow: var(--shadow); - border: 1px solid var(--border-color); -} - -.input-section, -.output-section { - margin-bottom: 1.5rem; -} - -.input-section label, -.output-section label { - display: block; - margin-bottom: 0.5rem; - font-weight: 600; - color: var(--text-primary); - font-size: 0.875rem; - letter-spacing: 0.025em; - text-transform: uppercase; -} - -.input-section textarea, -.output-section textarea { - width: 100%; - min-height: 200px; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - resize: vertical; - background-color: var(--surface); - transition: var(--transition); - line-height: 1.6; - box-sizing: border-box; -} - -.input-section textarea:focus, -.output-section textarea:focus { - outline: none; - border-color: var(--primary-color); - background-color: var(--surface); - box-shadow: 0 0 0 3px rgba(94, 114, 228, 0.1); -} - -.output-section pre { - width: 100%; - min-height: 200px; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background-color: var(--background); - overflow: auto; - white-space: pre-wrap; - color: var(--text-primary); - line-height: 1.6; - margin: 0; - box-sizing: border-box; -} - -.controls { - display: flex; - gap: 0.75rem; - margin: 1.5rem 0; - flex-wrap: wrap; - align-items: center; -} - -.btn { - display: inline-block; - background: linear-gradient(135deg, var(--primary-color), var(--primary-dark)); - color: white; - border: none; - padding: 0.75rem 1.5rem; - border-radius: var(--border-radius); - cursor: pointer; - font-size: 0.875rem; - font-weight: 600; - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; - transition: var(--transition); - text-transform: uppercase; - letter-spacing: 0.025em; - position: relative; - overflow: hidden; - box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08); - white-space: nowrap; - line-height: 1.2; - text-align: center; - vertical-align: middle; -} - -.btn::before { - content: ''; - position: absolute; - top: 50%; - left: 50%; - width: 0; - height: 0; - border-radius: 50%; - background: rgba(255, 255, 255, 0.3); - transform: translate(-50%, -50%); - transition: width 0.6s ease, height 0.6s ease; -} - -.btn:hover::before { - width: 300px; - height: 300px; -} - -.btn:hover { - transform: translateY(-2px); - box-shadow: 0 7px 14px rgba(50, 50, 93, 0.1), 0 3px 6px rgba(0, 0, 0, 0.08); -} - -.btn:active { - transform: translateY(0); -} - -.btn-primary { - background: linear-gradient(135deg, var(--primary-color), var(--primary-dark)); -} - -.btn-secondary { - background: linear-gradient(135deg, var(--gray), var(--gray-dark)); -} - -.btn-info { - background: linear-gradient(135deg, var(--info-color), #0DA5C0); -} - -.btn-success { - background: linear-gradient(135deg, var(--success-color), #26B56E); -} - -.btn-warning { - background: linear-gradient(135deg, var(--warning-color), #FA441D); -} - -.btn-danger { - background: linear-gradient(135deg, var(--secondary-color), #EC0C38); -} - -.btn:disabled { - opacity: 0.5; - cursor: not-allowed; - transform: none; -} - -.btn:disabled:hover { - transform: none; - box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08); -} - -.compare-inputs { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 1.5rem; - margin-bottom: 1.5rem; -} - -.input-group { - display: flex; - flex-direction: column; -} - -.input-group label { - margin-bottom: 0.5rem; - font-weight: 600; - color: var(--text-primary); - font-size: 0.875rem; - letter-spacing: 0.025em; - text-transform: uppercase; -} - -.input-group input, -.input-group select, -.input-group textarea { - padding: 0.75rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - font-size: 0.9375rem; - transition: var(--transition); - background: var(--background); -} - -.input-group input:focus, -.input-group select:focus, -.input-group textarea:focus { - outline: none; - border-color: var(--primary-color); - background: var(--surface); - box-shadow: 0 0 0 3px rgba(94, 114, 228, 0.1); -} - -.case-options { - display: flex; - flex-wrap: wrap; - gap: 0.5rem; - margin: 1.5rem 0; -} - -.case-btn { - background: var(--surface); - border: 2px solid var(--border-color); - padding: 0.5rem 1rem; - border-radius: var(--border-radius); - cursor: pointer; - font-size: 0.875rem; - font-weight: 500; - transition: var(--transition); - color: var(--text-secondary); -} - -.case-btn:hover { - background: var(--primary-color); - color: white; - border-color: var(--primary-color); - transform: translateY(-2px); - box-shadow: var(--shadow-sm); -} - -.uuid-controls { - display: flex; - align-items: flex-end; - gap: 1rem; - margin-bottom: 1.5rem; - flex-wrap: wrap; -} - -.uuid-controls .control-group { - flex: 0 0 auto; -} - -.uuid-controls select, -.uuid-controls input { - min-width: 150px; -} - -.control-group { - display: flex; - flex-direction: column; - gap: 0.5rem; - min-width: 120px; -} - -.control-group label { - display: block; - font-weight: 600; - color: var(--text-primary); - font-size: 0.75rem; - letter-spacing: 0.025em; - text-transform: uppercase; - margin-bottom: 0.25rem; -} - -.converter-tabs { - display: flex; - margin-bottom: 1.5rem; - background: var(--background); - border-radius: var(--border-radius); - padding: 0.25rem; -} - -.tab-btn { - flex: 1; - background: transparent; - border: none; - padding: 0.625rem 1.25rem; - cursor: pointer; - font-size: 0.875rem; - font-weight: 600; - color: var(--text-muted); - border-radius: var(--border-radius); - transition: var(--transition); - text-transform: uppercase; - letter-spacing: 0.025em; -} - -.tab-btn:hover { - color: var(--text-secondary); -} - -.tab-btn.active { - background: var(--surface); - color: var(--primary-color); - box-shadow: var(--shadow-sm); -} - -.tab-content { - display: none; - animation: fadeIn 0.3s ease; -} - -.tab-content.active { - display: block; -} - -.tab-content textarea { - width: 100%; - min-height: 150px; - margin: 1rem 0; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - resize: vertical; - background: var(--surface); - transition: var(--transition); - box-sizing: border-box; - line-height: 1.6; -} - -.tab-content textarea:focus { - outline: none; - border-color: var(--primary-color); - background: var(--surface); - box-shadow: 0 0 0 3px rgba(94, 114, 228, 0.1); -} - -.tab-content .btn { - margin-top: 0.5rem; -} - -.jwt-sections { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: 1.5rem; - margin-top: 1.5rem; -} - -.jwt-section { - background: var(--background); - border-radius: var(--border-radius-lg); - padding: 1.5rem; - border: 1px solid var(--border-color); -} - -.jwt-section h3 { - margin-bottom: 1rem; - color: var(--text-primary); - font-size: 0.875rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.025em; -} - -.jwt-section pre { - background: var(--surface); - padding: 1rem; - border-radius: var(--border-radius); - border: 1px solid var(--border-color); - overflow: auto; - font-size: 0.75rem; - line-height: 1.5; - color: var(--text-primary); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; -} - -#comparison-result { - margin-top: 1.5rem; - padding: 1.5rem; - background: var(--background); - border-radius: var(--border-radius-lg); - min-height: 100px; - border: 1px solid var(--border-color); -} - -.diff-added { - background-color: rgba(45, 206, 137, 0.1); - color: var(--success-color); - padding: 0.125rem 0.25rem; - border-radius: 0.125rem; - font-weight: 500; -} - -.diff-removed { - background-color: rgba(245, 54, 92, 0.1); - color: var(--secondary-color); - padding: 0.125rem 0.25rem; - border-radius: 0.125rem; - text-decoration: line-through; - font-weight: 500; -} - -.error { - color: var(--secondary-color); - background-color: rgba(245, 54, 92, 0.1); - border: 1px solid rgba(245, 54, 92, 0.2); - padding: 0.75rem 1rem; - border-radius: var(--border-radius); - margin: 1rem 0; - font-size: 0.875rem; - font-weight: 500; - display: flex; - align-items: center; - gap: 0.5rem; -} - -.error::before { - content: '⚠️'; -} - -.success { - color: var(--success-color); - background-color: rgba(45, 206, 137, 0.1); - border: 1px solid rgba(45, 206, 137, 0.2); - padding: 0.75rem 1rem; - border-radius: var(--border-radius); - margin: 1rem 0; - font-size: 0.875rem; - font-weight: 500; - display: flex; - align-items: center; - gap: 0.5rem; -} - -.success::before { - content: '✓'; - display: inline-flex; - width: 1.25rem; - height: 1.25rem; - background: var(--success-color); - color: white; - border-radius: 50%; - align-items: center; - justify-content: center; - font-size: 0.75rem; -} - -/* Global form element styles */ -input[type="text"], -input[type="number"], -input[type="email"], -input[type="password"], -input[type="search"], -input[type="tel"], -input[type="url"], -input[type="date"], -input[type="datetime-local"], -input[type="month"], -input[type="time"], -input[type="week"], -select, -textarea { - width: 100%; - padding: 0.75rem 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - font-size: 0.9375rem; - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; - background-color: var(--surface); - color: var(--text-primary); - transition: var(--transition); - box-sizing: border-box; - line-height: 1.5; -} - -textarea { - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - resize: vertical; - min-height: 100px; -} - -input:focus, -select:focus, -textarea:focus { - outline: none; - border-color: var(--primary-color); - box-shadow: 0 0 0 3px rgba(94, 114, 228, 0.1); -} - -input::placeholder, -textarea::placeholder { - color: var(--text-muted); - opacity: 0.7; -} - -/* Select dropdown styling */ -select { - appearance: none; - background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238898AA' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: right 0.75rem center; - background-size: 1rem; - padding-right: 2.5rem; - cursor: pointer; -} - -input[type="checkbox"] { - width: 1.125rem; - height: 1.125rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - margin-right: 0.5rem; - cursor: pointer; - transition: var(--transition); -} - -input[type="checkbox"]:checked { - background: var(--primary-color); - border-color: var(--primary-color); -} - -input[type="color"] { - width: 3rem; - height: 3rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - cursor: pointer; - padding: 0.25rem; -} - -input[type="range"] { - appearance: none; - width: 100%; - height: 0.5rem; - background: var(--border-color); - border-radius: 0.25rem; - outline: none; - transition: var(--transition); -} - -input[type="range"]::-webkit-slider-thumb { - appearance: none; - width: 1.25rem; - height: 1.25rem; - background: var(--primary-color); - border-radius: 50%; - cursor: pointer; - box-shadow: var(--shadow-sm); - transition: var(--transition); -} - -input[type="range"]::-webkit-slider-thumb:hover { - transform: scale(1.1); - box-shadow: var(--shadow); -} - -/* Tooltips */ -[title] { - position: relative; -} - -[title]:hover::after { - content: attr(title); - position: absolute; - bottom: 100%; - left: 50%; - transform: translateX(-50%); - padding: 0.25rem 0.5rem; - background: var(--dark-color); - color: white; - font-size: 0.75rem; - border-radius: var(--border-radius); - white-space: nowrap; - z-index: 1000; - pointer-events: none; - margin-bottom: 0.25rem; -} - -/* Loading state */ -.loading { - position: relative; - pointer-events: none; - opacity: 0.7; -} - -.loading::after { - content: ''; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 1.5rem; - height: 1.5rem; - border: 2px solid var(--primary-color); - border-top-color: transparent; - border-radius: 50%; - animation: spin 0.6s linear infinite; -} - -@keyframes spin { - to { transform: translate(-50%, -50%) rotate(360deg); } -} - -/* Empty states */ -.empty-state { - text-align: center; - padding: 3rem 1.5rem; - color: var(--text-muted); -} - -.empty-state i { - font-size: 3rem; - margin-bottom: 1rem; - opacity: 0.5; -} - -.empty-state h3 { - color: var(--text-secondary); - margin-bottom: 0.5rem; -} - -.empty-state p { - font-size: 0.875rem; -} - -/* Badges */ -.badge { - display: inline-flex; - align-items: center; - padding: 0.25rem 0.625rem; - font-size: 0.75rem; - font-weight: 600; - border-radius: var(--border-radius); - background: var(--primary-color); - color: white; - text-transform: uppercase; - letter-spacing: 0.025em; -} - -.badge-secondary { - background: var(--gray); -} - -.badge-success { - background: var(--success-color); -} - -.badge-warning { - background: var(--warning-color); -} - -.badge-danger { - background: var(--secondary-color); -} - -.badge-info { - background: var(--info-color); -} - -/* Cards */ -.card { - background: var(--surface); - border-radius: var(--border-radius-lg); - box-shadow: var(--shadow-sm); - border: 1px solid var(--border-color); - overflow: hidden; -} - -.card-header { - padding: 1.25rem; - background: var(--background); - border-bottom: 1px solid var(--border-color); -} - -.card-body { - padding: 1.25rem; -} - -.card-footer { - padding: 1.25rem; - background: var(--background); - border-top: 1px solid var(--border-color); -} - -/* Margin Utilities */ -.m-2 { margin: 0.5rem !important; } -.m-4 { margin: 1rem !important; } -.m-6 { margin: 1.5rem !important; } -.m-8 { margin: 2rem !important; } - -.mt-2 { margin-top: 0.5rem !important; } -.mt-4 { margin-top: 1rem !important; } -.mt-6 { margin-top: 1.5rem !important; } -.mt-8 { margin-top: 2rem !important; } - -.mb-2 { margin-bottom: 0.5rem !important; } -.mb-4 { margin-bottom: 1rem !important; } -.mb-6 { margin-bottom: 1.5rem !important; } -.mb-8 { margin-bottom: 2rem !important; } - -.mr-2 { margin-right: 0.5rem !important; } -.mr-4 { margin-right: 1rem !important; } -.mr-6 { margin-right: 1.5rem !important; } -.mr-8 { margin-right: 2rem !important; } - -.ml-2 { margin-left: 0.5rem !important; } -.ml-4 { margin-left: 1rem !important; } -.ml-6 { margin-left: 1.5rem !important; } -.ml-8 { margin-left: 2rem !important; } - -/* Padding Utilities */ -.p-2 { padding: 0.5rem !important; } -.p-4 { padding: 1rem !important; } -.p-6 { padding: 1.5rem !important; } -.p-8 { padding: 2rem !important; } - -.pt-2 { padding-top: 0.5rem !important; } -.pt-4 { padding-top: 1rem !important; } -.pt-6 { padding-top: 1.5rem !important; } -.pt-8 { padding-top: 2rem !important; } - -.pb-2 { padding-bottom: 0.5rem !important; } -.pb-4 { padding-bottom: 1rem !important; } -.pb-6 { padding-bottom: 1.5rem !important; } -.pb-8 { padding-bottom: 2rem !important; } - -.pr-2 { padding-right: 0.5rem !important; } -.pr-4 { padding-right: 1rem !important; } -.pr-6 { padding-right: 1.5rem !important; } -.pr-8 { padding-right: 2rem !important; } - -.pl-2 { padding-left: 0.5rem !important; } -.pl-4 { padding-left: 1rem !important; } -.pl-6 { padding-left: 1.5rem !important; } -.pl-8 { padding-left: 2rem !important; } - -/* Button Sizing */ -.btn-sm { - padding: 0.5rem 1rem; - font-size: 0.75rem; -} - -.btn-md { - padding: 0.75rem 1.5rem; - font-size: 0.875rem; -} - -.btn-lg { - padding: 1rem 2rem; - font-size: 1rem; -} - -/* Alert styling */ -.alert { - position: relative; - padding: 1rem 1rem; - margin-bottom: 1rem; - border: 1px solid transparent; - border-radius: 0.25rem; -} - -.alert-heading { - color: inherit; -} - -.alert-link { - font-weight: 700; -} - -.alert-dismissible { - padding-right: 3rem; -} -.alert-dismissible .btn-close { - position: absolute; - top: 0; - right: 0; - z-index: 2; - padding: 1.25rem 1rem; -} - -.alert-primary { - color: #084298; - background-color: #cfe2ff; - border-color: #b6d4fe; -} -.alert-primary .alert-link { - color: #06357a; -} - -.alert-secondary { - color: #41464b; - background-color: #e2e3e5; - border-color: #d3d6d8; -} -.alert-secondary .alert-link { - color: #34383c; -} - -.alert-success { - color: #0f5132; - background-color: #d1e7dd; - border-color: #badbcc; -} -.alert-success .alert-link { - color: #0c4128; -} - -.alert-info { - color: #055160; - background-color: #cff4fc; - border-color: #b6effb; -} -.alert-info .alert-link { - color: #04414d; -} - -.alert-warning { - color: #664d03; - background-color: #fff3cd; - border-color: #ffecb5; -} -.alert-warning .alert-link { - color: #523e02; -} - -.alert-danger { - color: #842029; - background-color: #f8d7da; - border-color: #f5c2c7; -} -.alert-danger .alert-link { - color: #6a1a21; -} - -.alert-light { - color: #636464; - background-color: #fefefe; - border-color: #fdfdfe; -} -.alert-light .alert-link { - color: #4f5050; -} - -.alert-dark { - color: #141619; - background-color: #d3d3d4; - border-color: #bcbebf; -} -.alert-dark .alert-link { - color: #101214; -} - -/* Responsive Design */ -@media (max-width: 768px) { - .app-container { - flex-direction: column; - } - - .sidebar { - width: 100%; - height: auto; - max-height: 50vh; - } - - .sidebar-header h1 { - font-size: 1.125rem; - } - - .nav-menu { - padding: 0; - } - - .nav-link { - padding: 0.625rem 1.25rem; - font-size: 0.8125rem; - } - - .main-content { - padding: 1rem; - } - - .tool-container h2 { - font-size: 1.5rem; - } - - .home-content h1 { - font-size: 2rem; - } - - .tools-grid { - grid-template-columns: 1fr; - } - - .compare-inputs { - grid-template-columns: 1fr; - } - - .uuid-controls { - flex-direction: column; - align-items: stretch; - } - - .jwt-sections { - grid-template-columns: 1fr; - } -} \ No newline at end of file diff --git a/src/renderer/styles/main.css b/src/renderer/styles/main.css deleted file mode 100644 index b0983f7e..00000000 --- a/src/renderer/styles/main.css +++ /dev/null @@ -1,2652 +0,0 @@ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -:root { - --primary-color: #5e72e4; - --primary-dark: #4c63d2; - --primary-light: #8896ff; - --secondary-color: #f5365c; - --success-color: #2dce89; - --warning-color: #fb6340; - --info-color: #11cdef; - --dark-color: #172b4d; - --gray-dark: #32325d; - --gray: #8898aa; - --gray-light: #e9ecef; - --white: #ffffff; - --background: #f7f8fc; - --surface: #ffffff; - --border-color: #e3e8f0; - --text-primary: #32325d; - --text-secondary: #525f7f; - --text-muted: #8898aa; - --shadow-sm: 0 0 0.5rem rgba(0, 0, 0, 0.075); - --shadow: 0 0 2rem 0 rgba(136, 152, 170, 0.15); - --shadow-lg: 0 0 3rem rgba(0, 0, 0, 0.175); - --border-radius: 0.375rem; - --border-radius-lg: 0.5rem; - --border-radius-xl: 0.75rem; - --transition: all 0.15s ease; -} - -body { - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, - 'Helvetica Neue', Arial, sans-serif; - background-color: var(--background); - color: var(--text-primary); - height: 100vh; - overflow: hidden; - font-size: 0.9375rem; - line-height: 1.6; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.app-container { - display: flex; - height: 100vh; -} - -.sidebar { - width: 260px; - background: linear-gradient(180deg, #5e72e4 0%, #825ee4 100%); - color: white; - overflow-y: auto; - overflow-x: hidden; - box-shadow: 0 0 2rem 0 rgba(136, 152, 170, 0.15); - scrollbar-width: thin; - scrollbar-color: rgba(255, 255, 255, 0.2) transparent; -} - -.sidebar::-webkit-scrollbar { - width: 6px; -} - -.sidebar::-webkit-scrollbar-track { - background: transparent; -} - -.sidebar::-webkit-scrollbar-thumb { - background-color: rgba(255, 255, 255, 0.2); - border-radius: 3px; -} - -.sidebar::-webkit-scrollbar-thumb:hover { - background-color: rgba(255, 255, 255, 0.3); -} - -.sidebar-header { - padding: 1.5rem; - border-bottom: 1px solid rgba(255, 255, 255, 0.08); - background: rgba(0, 0, 0, 0.1); -} - -.sidebar-header h1 { - font-size: 1.25rem; - font-weight: 700; - letter-spacing: -0.025em; - display: flex; - align-items: center; - gap: 0.75rem; -} - -.sidebar-header h1 i { - font-size: 1.125rem; - opacity: 0.9; -} - -.sidebar-subtitle { - font-size: 0.75rem; - opacity: 0.7; - text-transform: uppercase; - letter-spacing: 0.1em; - margin-top: 0.25rem; - margin-left: 2rem; -} - -/* Menu Search Styles */ -.menu-search-container { - padding: 1rem 1.5rem; - border-bottom: 1px solid rgba(255, 255, 255, 0.08); -} - -.search-input-wrapper { - position: relative; - display: flex; - align-items: center; - background: rgba(255, 255, 255, 0.1); - border-radius: 8px; - transition: var(--transition); -} - -.search-input-wrapper:focus-within { - background: rgba(255, 255, 255, 0.15); -} - -.search-icon { - position: absolute; - left: 0.875rem; - color: rgba(255, 255, 255, 0.6); - font-size: 0.75rem; - pointer-events: none; -} - -.menu-search-input { - width: 100%; - padding: 0.625rem 2.25rem 0.625rem 2.25rem; - background: transparent; - border: none; - color: white; - font-size: 0.8125rem; - outline: none; -} - -.menu-search-input::placeholder { - color: rgba(255, 255, 255, 0.5); -} - -.clear-search-btn { - position: absolute; - right: 0.625rem; - background: none; - border: none; - color: rgba(255, 255, 255, 0.5); - cursor: pointer; - padding: 0.25rem; - border-radius: 4px; - transition: var(--transition); - opacity: 0; -} - -.clear-search-btn.visible { - opacity: 1; -} - -.clear-search-btn:hover { - color: rgba(255, 255, 255, 0.8); - background: rgba(255, 255, 255, 0.1); -} - -.search-results { - margin-top: 0.5rem; - max-height: 200px; - overflow-y: auto; - background: rgba(0, 0, 0, 0.2); - border-radius: 6px; -} - -.search-result-item { - padding: 0.625rem 0.875rem; - color: rgba(255, 255, 255, 0.9); - cursor: pointer; - transition: var(--transition); - font-size: 0.8125rem; - border-bottom: 1px solid rgba(255, 255, 255, 0.05); - display: flex; - align-items: center; - gap: 0.625rem; -} - -.search-result-item:last-child { - border-bottom: none; -} - -.search-result-item:hover { - background: rgba(255, 255, 255, 0.08); -} - -.search-result-item.highlighted { - background: rgba(255, 255, 255, 0.15); -} - -.search-result-item i { - font-size: 0.75rem; - width: 14px; - text-align: center; - opacity: 0.8; -} - -.search-result-item.no-results { - color: rgba(255, 255, 255, 0.5); - font-style: italic; - cursor: default; - justify-content: center; - padding: 0.75rem; -} - -.search-result-item.no-results:hover { - background: none; -} - -/* Menu Category Styles */ -.nav-menu-container { - padding: 0.5rem 0; -} - -.menu-category { - margin-bottom: 0.25rem; -} - -.category-header { - display: flex; - align-items: center; - padding: 0.5rem 1.5rem; - color: rgba(255, 255, 255, 0.9); - cursor: pointer; - user-select: none; - transition: var(--transition); - font-size: 0.875rem; - font-weight: 600; -} - -.category-header:hover { - background: rgba(255, 255, 255, 0.08); -} - -.category-chevron { - margin-right: 0.75rem; - font-size: 0.75rem; - transition: transform 0.2s ease; -} - -.category-header.expanded .category-chevron { - transform: rotate(90deg); -} - -.category-menu { - list-style: none; - padding: 0; - margin: 0; - max-height: 0; - overflow: hidden; - transition: max-height 0.3s ease; -} - -.category-menu.expanded { - max-height: 500px; -} - -.category-menu .nav-link { - padding-left: 3rem; - font-size: 0.8125rem; -} - -/* Hide menu items when search is active */ -.search-active .menu-category { - display: none; -} - -.search-active .nav-menu-container > .nav-menu { - display: block; -} - -.nav-menu { - list-style: none; - padding: 0.5rem 0; -} - -.nav-menu li { - margin: 0; -} - -.nav-link { - display: flex; - align-items: center; - padding: 0.75rem 1.5rem; - color: rgba(255, 255, 255, 0.8); - text-decoration: none; - transition: var(--transition); - position: relative; - font-size: 0.875rem; - font-weight: 500; -} - -.nav-link:hover { - background-color: rgba(255, 255, 255, 0.08); - color: white; -} - -.nav-link.active { - background-color: rgba(255, 255, 255, 0.15); - color: white; -} - -.nav-link.active::before { - content: ''; - position: absolute; - left: 0; - top: 0; - bottom: 0; - width: 3px; - background: white; -} - -.nav-link i { - margin-right: 0.75rem; - width: 1.25rem; - text-align: center; - font-size: 0.875rem; - opacity: 0.9; -} - -.main-content { - flex: 1; - padding: 2rem; - overflow-y: auto; - background-color: var(--background); - scrollbar-width: thin; - scrollbar-color: var(--gray-light) transparent; -} - -.main-content::-webkit-scrollbar { - width: 8px; -} - -.main-content::-webkit-scrollbar-track { - background: transparent; -} - -.main-content::-webkit-scrollbar-thumb { - background-color: var(--gray-light); - border-radius: 4px; -} - -.main-content::-webkit-scrollbar-thumb:hover { - background-color: var(--gray); -} - -.tool-container { - display: none; - max-width: 1200px; - margin: 0 auto; - animation: fadeIn 0.3s ease; -} - -.tool-container.active { - display: block; -} - -@keyframes fadeIn { - from { - opacity: 0; - transform: translateY(10px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -.tool-container h2 { - margin-bottom: 2rem; - color: var(--text-primary); - font-size: 1.75rem; - font-weight: 700; - letter-spacing: -0.025em; - display: flex; - align-items: center; - gap: 0.75rem; -} - -.tool-container h2 i { - font-size: 1.5rem; - color: var(--primary-color); - background: linear-gradient( - 135deg, - var(--primary-color), - var(--primary-light) - ); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; -} - -.home-content { - padding: 2rem 0; -} - -.home-hero { - text-align: center; - margin-bottom: 3rem; - padding: 2rem 0; -} - -.home-hero h1 { - font-size: 3rem; - margin-bottom: 1rem; - color: var(--text-primary); - font-weight: 800; - letter-spacing: -0.03em; - background: linear-gradient( - 135deg, - var(--primary-color) 0%, - var(--primary-light) 100% - ); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - line-height: 1.2; -} - -.home-hero p { - font-size: 1.25rem; - margin-bottom: 2rem; - color: var(--text-secondary); - max-width: 600px; - margin-left: auto; - margin-right: auto; - line-height: 1.6; -} - -.home-stats { - display: flex; - justify-content: center; - gap: 3rem; - margin-top: 2rem; - flex-wrap: wrap; -} - -.stat-item { - display: flex; - align-items: center; - gap: 0.5rem; - color: var(--text-secondary); - font-weight: 600; - font-size: 0.9375rem; -} - -.stat-item i { - color: var(--primary-color); - font-size: 1.125rem; -} - -.tools-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); - gap: 1.5rem; - margin-top: 2rem; -} - -.tool-card { - background: var(--surface); - padding: 1.75rem; - border-radius: var(--border-radius-xl); - box-shadow: var(--shadow-sm); - border: 1px solid var(--border-color); - cursor: pointer; - transition: var(--transition); - position: relative; - overflow: hidden; -} - -.tool-card::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 3px; - background: linear-gradient( - 90deg, - var(--primary-color), - var(--primary-light) - ); - transform: scaleX(0); - transition: transform 0.3s ease; -} - -.tool-card:hover { - transform: translateY(-4px); - box-shadow: var(--shadow); - border-color: var(--primary-color); -} - -.tool-card:hover::before { - transform: scaleX(1); -} - -.tool-icon { - width: 3.5rem; - height: 3.5rem; - background: linear-gradient( - 135deg, - var(--primary-color), - var(--primary-light) - ); - border-radius: var(--border-radius-lg); - display: flex; - align-items: center; - justify-content: center; - margin-bottom: 1rem; - transition: var(--transition); -} - -.tool-card:hover .tool-icon { - transform: scale(1.1) rotate(5deg); -} - -.tool-icon i { - font-size: 1.5rem; - color: white; -} - -.tool-badge { - position: absolute; - top: 1rem; - right: 1rem; - background: linear-gradient( - 135deg, - var(--primary-color), - var(--primary-light) - ); - color: white; - padding: 0.25rem 0.625rem; - border-radius: 1rem; - font-size: 0.625rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.05em; -} - -.tool-card h3 { - font-size: 1.125rem; - margin-bottom: 0.5rem; - color: var(--text-primary); - font-weight: 600; - letter-spacing: -0.01em; -} - -.tool-card p { - color: var(--text-muted); - line-height: 1.5; - font-size: 0.875rem; -} - -.tool-content { - background: var(--surface); - border-radius: var(--border-radius-xl); - padding: 2rem; - box-shadow: var(--shadow); - border: 1px solid var(--border-color); -} - -.input-section, -.output-section { - margin-bottom: 1.5rem; -} - -.input-section label, -.output-section label { - display: block; - margin-bottom: 0.5rem; - font-weight: 600; - color: var(--text-primary); - font-size: 0.875rem; - letter-spacing: 0.025em; - text-transform: uppercase; -} - -.input-section textarea, -.output-section textarea { - width: 100%; - min-height: 200px; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - resize: vertical; - background-color: var(--surface); - transition: var(--transition); - line-height: 1.6; - box-sizing: border-box; -} - -.input-section textarea:focus, -.output-section textarea:focus { - outline: none; - border-color: var(--primary-color); - background-color: var(--surface); - box-shadow: 0 0 0 3px rgba(94, 114, 228, 0.1); -} - -.output-section pre { - width: 100%; - min-height: 200px; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background-color: var(--background); - overflow: auto; - white-space: pre-wrap; - color: var(--text-primary); - line-height: 1.6; - margin: 0; - box-sizing: border-box; -} - -.controls { - display: flex; - gap: 0.75rem; - margin: 1.5rem 0; - flex-wrap: wrap; - align-items: center; -} - -.btn { - display: inline-block; - background: linear-gradient( - 135deg, - var(--primary-color), - var(--primary-dark) - ); - color: white; - border: none; - padding: 0.75rem 1.5rem; - border-radius: var(--border-radius); - cursor: pointer; - font-size: 0.875rem; - font-weight: 600; - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, - sans-serif; - transition: var(--transition); - text-transform: uppercase; - letter-spacing: 0.025em; - position: relative; - overflow: hidden; - box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08); - white-space: nowrap; - line-height: 1.2; - text-align: center; - vertical-align: middle; -} - -.btn::before { - content: ''; - position: absolute; - top: 50%; - left: 50%; - width: 0; - height: 0; - border-radius: 50%; - background: rgba(255, 255, 255, 0.3); - transform: translate(-50%, -50%); - transition: width 0.6s ease, height 0.6s ease; -} - -.btn:hover::before { - width: 300px; - height: 300px; -} - -.btn:hover { - transform: translateY(-2px); - box-shadow: 0 7px 14px rgba(50, 50, 93, 0.1), 0 3px 6px rgba(0, 0, 0, 0.08); -} - -.btn:active { - transform: translateY(0); -} - -.btn-primary { - background: linear-gradient( - 135deg, - var(--primary-color), - var(--primary-dark) - ); -} - -.btn-secondary { - background: linear-gradient(135deg, var(--gray), var(--gray-dark)); -} - -.btn-info { - background: linear-gradient(135deg, var(--info-color), #0da5c0); -} - -.btn-success { - background: linear-gradient(135deg, var(--success-color), #26b56e); -} - -.btn-warning { - background: linear-gradient(135deg, var(--warning-color), #fa441d); -} - -.btn-danger { - background: linear-gradient(135deg, var(--secondary-color), #ec0c38); -} - -.btn:disabled { - opacity: 0.5; - cursor: not-allowed; - transform: none; -} - -.btn:disabled:hover { - transform: none; - box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08); -} - -.compare-inputs { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 1.5rem; - margin-bottom: 1.5rem; -} - -.input-group { - display: flex; - flex-direction: column; -} - -.input-group label { - margin-bottom: 0.5rem; - font-weight: 600; - color: var(--text-primary); - font-size: 0.875rem; - letter-spacing: 0.025em; - text-transform: uppercase; -} - -.input-group input, -.input-group select, -.input-group textarea { - padding: 0.75rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - font-size: 0.9375rem; - transition: var(--transition); - background: var(--background); -} - -.input-group input:focus, -.input-group select:focus, -.input-group textarea:focus { - outline: none; - border-color: var(--primary-color); - background: var(--surface); - box-shadow: 0 0 0 3px rgba(94, 114, 228, 0.1); -} - -.case-options { - display: flex; - flex-wrap: wrap; - gap: 0.5rem; - margin: 1.5rem 0; -} - -.case-btn { - background: var(--surface); - border: 2px solid var(--border-color); - padding: 0.5rem 1rem; - border-radius: var(--border-radius); - cursor: pointer; - font-size: 0.875rem; - font-weight: 500; - transition: var(--transition); - color: var(--text-secondary); -} - -.case-btn:hover { - background: var(--primary-color); - color: white; - border-color: var(--primary-color); - transform: translateY(-2px); - box-shadow: var(--shadow-sm); -} - -.uuid-controls { - display: flex; - align-items: flex-end; - gap: 1rem; - margin-bottom: 1.5rem; - flex-wrap: wrap; -} - -.uuid-controls .control-group { - flex: 0 0 auto; -} - -.uuid-controls select, -.uuid-controls input { - min-width: 150px; -} - -.control-group { - display: flex; - flex-direction: column; - gap: 0.5rem; - min-width: 120px; -} - -.control-group label { - display: block; - font-weight: 600; - color: var(--text-primary); - font-size: 0.75rem; - letter-spacing: 0.025em; - text-transform: uppercase; - margin-bottom: 0.25rem; -} - -.converter-tabs { - display: flex; - margin-bottom: 1.5rem; - background: var(--background); - border-radius: var(--border-radius); - padding: 0.25rem; -} - -.tab-btn { - flex: 1; - background: transparent; - border: none; - padding: 0.625rem 1.25rem; - cursor: pointer; - font-size: 0.875rem; - font-weight: 600; - color: var(--text-muted); - border-radius: var(--border-radius); - transition: var(--transition); - text-transform: uppercase; - letter-spacing: 0.025em; -} - -.tab-btn:hover { - color: var(--text-secondary); -} - -.tab-btn.active { - background: var(--surface); - color: var(--primary-color); - box-shadow: var(--shadow-sm); -} - -.tab-content { - display: none; - animation: fadeIn 0.3s ease; -} - -.tab-content.active { - display: block; -} - -.tab-content textarea { - width: 100%; - min-height: 150px; - margin: 1rem 0; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - resize: vertical; - background: var(--surface); - transition: var(--transition); - box-sizing: border-box; - line-height: 1.6; -} - -.tab-content textarea:focus { - outline: none; - border-color: var(--primary-color); - background: var(--surface); - box-shadow: 0 0 0 3px rgba(94, 114, 228, 0.1); -} - -.tab-content .btn { - margin-top: 0.5rem; -} - -.jwt-sections { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: 1.5rem; - margin-top: 1.5rem; -} - -.jwt-section { - background: var(--background); - border-radius: var(--border-radius-lg); - padding: 1.5rem; - border: 1px solid var(--border-color); -} - -.jwt-section h3 { - margin-bottom: 1rem; - color: var(--text-primary); - font-size: 0.875rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.025em; -} - -.jwt-section pre { - background: var(--surface); - padding: 1rem; - border-radius: var(--border-radius); - border: 1px solid var(--border-color); - overflow: auto; - font-size: 0.75rem; - line-height: 1.5; - color: var(--text-primary); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; -} - -#comparison-result { - margin-top: 1.5rem; - padding: 1.5rem; - background: var(--background); - border-radius: var(--border-radius-lg); - min-height: 100px; - border: 1px solid var(--border-color); -} - -.diff-added { - background-color: rgba(45, 206, 137, 0.1); - color: var(--success-color); - padding: 0.125rem 0.25rem; - border-radius: 0.125rem; - font-weight: 500; -} - -.diff-removed { - background-color: rgba(245, 54, 92, 0.1); - color: var(--secondary-color); - padding: 0.125rem 0.25rem; - border-radius: 0.125rem; - text-decoration: line-through; - font-weight: 500; -} - -.error { - color: var(--secondary-color); - background-color: rgba(245, 54, 92, 0.1); - border: 1px solid rgba(245, 54, 92, 0.2); - padding: 0.75rem 1rem; - border-radius: var(--border-radius); - margin: 1rem 0; - font-size: 0.875rem; - font-weight: 500; - display: flex; - align-items: center; - gap: 0.5rem; -} - -.error::before { - content: '⚠️'; -} - -.success { - color: var(--success-color); - background-color: rgba(45, 206, 137, 0.1); - border: 1px solid rgba(45, 206, 137, 0.2); - padding: 0.75rem 1rem; - border-radius: var(--border-radius); - margin: 1rem 0; - font-size: 0.875rem; - font-weight: 500; - display: flex; - align-items: center; - gap: 0.5rem; -} - -.success::before { - content: '✓'; - display: inline-flex; - width: 1.25rem; - height: 1.25rem; - background: var(--success-color); - color: white; - border-radius: 50%; - align-items: center; - justify-content: center; - font-size: 0.75rem; -} - -/* Global form element styles */ -input[type='text'], -input[type='number'], -input[type='email'], -input[type='password'], -input[type='search'], -input[type='tel'], -input[type='url'], -input[type='date'], -input[type='datetime-local'], -input[type='month'], -input[type='time'], -input[type='week'], -select, -textarea { - width: 100%; - padding: 0.75rem 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - font-size: 0.9375rem; - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, - sans-serif; - background-color: var(--surface); - color: var(--text-primary); - transition: var(--transition); - box-sizing: border-box; - line-height: 1.5; -} - -textarea { - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - resize: vertical; - min-height: 100px; -} - -input:focus, -select:focus, -textarea:focus { - outline: none; - border-color: var(--primary-color); - box-shadow: 0 0 0 3px rgba(94, 114, 228, 0.1); -} - -input::placeholder, -textarea::placeholder { - color: var(--text-muted); - opacity: 0.7; -} - -/* Select dropdown styling */ -select { - appearance: none; - background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238898AA' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: right 0.75rem center; - background-size: 1rem; - padding-right: 2.5rem; - cursor: pointer; -} - -input[type='checkbox'] { - width: 1.125rem; - height: 1.125rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - margin-right: 0.5rem; - cursor: pointer; - transition: var(--transition); -} - -input[type='checkbox']:checked { - background: var(--primary-color); - border-color: var(--primary-color); -} - -input[type='color'] { - width: 3rem; - height: 3rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - cursor: pointer; - padding: 0.25rem; -} - -input[type='range'] { - appearance: none; - width: 100%; - height: 0.5rem; - background: var(--border-color); - border-radius: 0.25rem; - outline: none; - transition: var(--transition); -} - -input[type='range']::-webkit-slider-thumb { - appearance: none; - width: 1.25rem; - height: 1.25rem; - background: var(--primary-color); - border-radius: 50%; - cursor: pointer; - box-shadow: var(--shadow-sm); - transition: var(--transition); -} - -input[type='range']::-webkit-slider-thumb:hover { - transform: scale(1.1); - box-shadow: var(--shadow); -} - -/* Tooltips */ -[title] { - position: relative; -} - -[title]:hover::after { - content: attr(title); - position: absolute; - bottom: 100%; - left: 50%; - transform: translateX(-50%); - padding: 0.25rem 0.5rem; - background: var(--dark-color); - color: white; - font-size: 0.75rem; - border-radius: var(--border-radius); - white-space: nowrap; - z-index: 1000; - pointer-events: none; - margin-bottom: 0.25rem; -} - -/* Loading state */ -.loading { - position: relative; - pointer-events: none; - opacity: 0.7; -} - -.loading::after { - content: ''; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 1.5rem; - height: 1.5rem; - border: 2px solid var(--primary-color); - border-top-color: transparent; - border-radius: 50%; - animation: spin 0.6s linear infinite; -} - -@keyframes spin { - to { - transform: translate(-50%, -50%) rotate(360deg); - } -} - -/* Empty states */ -.empty-state { - text-align: center; - padding: 3rem 1.5rem; - color: var(--text-muted); -} - -.empty-state i { - font-size: 3rem; - margin-bottom: 1rem; - opacity: 0.5; -} - -.empty-state h3 { - color: var(--text-secondary); - margin-bottom: 0.5rem; -} - -.empty-state p { - font-size: 0.875rem; -} - -/* Badges */ -.badge { - display: inline-flex; - align-items: center; - padding: 0.25rem 0.625rem; - font-size: 0.75rem; - font-weight: 600; - border-radius: var(--border-radius); - background: var(--primary-color); - color: white; - text-transform: uppercase; - letter-spacing: 0.025em; -} - -.badge-secondary { - background: var(--gray); -} - -.badge-success { - background: var(--success-color); -} - -.badge-warning { - background: var(--warning-color); -} - -.badge-danger { - background: var(--secondary-color); -} - -.badge-info { - background: var(--info-color); -} - -/* Cards */ -.card { - background: var(--surface); - border-radius: var(--border-radius-lg); - box-shadow: var(--shadow-sm); - border: 1px solid var(--border-color); - overflow: hidden; -} - -.card-header { - padding: 1.25rem; - background: var(--background); - border-bottom: 1px solid var(--border-color); -} - -.card-body { - padding: 1.25rem; -} - -.card-footer { - padding: 1.25rem; - background: var(--background); - border-top: 1px solid var(--border-color); -} - -/* Responsive Design */ -@media (max-width: 768px) { - .app-container { - flex-direction: column; - } - - .sidebar { - width: 100%; - height: auto; - max-height: 50vh; - } - - .sidebar-header h1 { - font-size: 1.125rem; - } - - .nav-menu { - padding: 0; - } - - .nav-link { - padding: 0.625rem 1.25rem; - font-size: 0.8125rem; - } - - .main-content { - padding: 1rem; - } - - .tool-container h2 { - font-size: 1.5rem; - } - - .home-content h1 { - font-size: 2rem; - } - - .tools-grid { - grid-template-columns: 1fr; - } - - .compare-inputs { - grid-template-columns: 1fr; - } - - .uuid-controls { - flex-direction: column; - align-items: stretch; - } - - .jwt-sections { - grid-template-columns: 1fr; - } -} - -/* Password Generator Styles */ -.password-tabs { - display: flex; - gap: 8px; - margin-bottom: 20px; - border-bottom: 2px solid var(--border-color); - padding-bottom: 0; -} - -.password-tabs .tab-btn { - background: none; - border: none; - padding: 12px 20px; - border-radius: 8px 8px 0 0; - cursor: pointer; - font-weight: 500; - color: var(--text-secondary); - border-bottom: 3px solid transparent; - transition: var(--transition); -} - -.password-tabs .tab-btn:hover { - background-color: var(--gray-light); - color: var(--text-primary); -} - -.password-tabs .tab-btn.active { - color: var(--primary-color); - border-bottom-color: var(--primary-color); - background-color: rgba(94, 114, 228, 0.1); -} - -.password-options { - display: flex; - flex-direction: column; - gap: 20px; - margin-bottom: 20px; -} - -.checkbox-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 15px; - padding: 20px; - background-color: var(--background); - border-radius: var(--border-radius); - border: 1px solid var(--border-color); -} - -.checkbox-label { - display: flex; - align-items: center; - gap: 10px; - cursor: pointer; - font-size: 0.9rem; - color: var(--text-primary); - transition: var(--transition); -} - -.checkbox-label:hover { - color: var(--primary-color); -} - -.checkbox-label input[type='checkbox'] { - width: 18px; - height: 18px; - accent-color: var(--primary-color); - cursor: pointer; -} - -.button-group { - display: flex; - gap: 10px; - flex-wrap: wrap; -} - -.strength-analysis { - margin-top: 20px; - padding: 20px; - background-color: var(--surface); - border-radius: var(--border-radius); - border: 1px solid var(--border-color); -} - -.strength-bar { - width: 100%; - height: 8px; - background-color: var(--gray-light); - border-radius: 4px; - overflow: hidden; - margin-bottom: 10px; -} - -.strength-indicator { - height: 100%; - transition: all 0.3s ease; - border-radius: 4px; -} - -.strength-indicator.very-weak { - background-color: #ff4757; -} - -.strength-indicator.weak { - background-color: #ff6b81; -} - -.strength-indicator.fair { - background-color: #ffa502; -} - -.strength-indicator.good { - background-color: #2ed573; -} - -.strength-indicator.strong { - background-color: #1e90ff; -} - -.strength-info { - display: flex; - justify-content: space-between; - margin-bottom: 15px; - font-size: 0.9rem; - color: var(--text-secondary); -} - -.strength-text { - font-weight: 600; -} - -.strength-text.very-weak { - color: #ff4757; -} - -.strength-text.weak { - color: #ff6b81; -} - -.strength-text.fair { - color: #ffa502; -} - -.strength-text.good { - color: #2ed573; -} - -.strength-text.strong { - color: #1e90ff; -} - -.strength-feedback { - list-style: none; - padding: 0; -} - -.strength-feedback li { - padding: 5px 0; - font-size: 0.85rem; - color: var(--warning-color); - position: relative; - padding-left: 20px; -} - -.strength-feedback li:before { - content: '⚠'; - position: absolute; - left: 0; - color: var(--warning-color); -} - -#password-output, -#multiple-passwords-output { - font-family: 'Monaco', 'Consolas', monospace; - font-weight: 500; - font-size: 16px; - letter-spacing: 1px; -} - -#password-strength-input { - min-height: 100px; - font-family: 'Monaco', 'Consolas', monospace; -} - -/* Margin Utilities */ -.m-2 { margin: 0.5rem !important; } -.m-4 { margin: 1rem !important; } -.m-6 { margin: 1.5rem !important; } -.m-8 { margin: 2rem !important; } - -.mt-2 { margin-top: 0.5rem !important; } -.mt-4 { margin-top: 1rem !important; } -.mt-6 { margin-top: 1.5rem !important; } -.mt-8 { margin-top: 2rem !important; } - -.mb-2 { margin-bottom: 0.5rem !important; } -.mb-4 { margin-bottom: 1rem !important; } -.mb-6 { margin-bottom: 1.5rem !important; } -.mb-8 { margin-bottom: 2rem !important; } - -.mr-2 { margin-right: 0.5rem !important; } -.mr-4 { margin-right: 1rem !important; } -.mr-6 { margin-right: 1.5rem !important; } -.mr-8 { margin-right: 2rem !important; } - -.ml-2 { margin-left: 0.5rem !important; } -.ml-4 { margin-left: 1rem !important; } -.ml-6 { margin-left: 1.5rem !important; } -.ml-8 { margin-left: 2rem !important; } - -/* Padding Utilities */ -.p-2 { padding: 0.5rem !important; } -.p-4 { padding: 1rem !important; } -.p-6 { padding: 1.5rem !important; } -.p-8 { padding: 2rem !important; } - -.pt-2 { padding-top: 0.5rem !important; } -.pt-4 { padding-top: 1rem !important; } -.pt-6 { padding-top: 1.5rem !important; } -.pt-8 { padding-top: 2rem !important; } - -.pb-2 { padding-bottom: 0.5rem !important; } -.pb-4 { padding-bottom: 1rem !important; } -.pb-6 { padding-bottom: 1.5rem !important; } -.pb-8 { padding-bottom: 2rem !important; } - -.pr-2 { padding-right: 0.5rem !important; } -.pr-4 { padding-right: 1rem !important; } -.pr-6 { padding-right: 1.5rem !important; } -.pr-8 { padding-right: 2rem !important; } - -.pl-2 { padding-left: 0.5rem !important; } -.pl-4 { padding-left: 1rem !important; } -.pl-6 { padding-left: 1.5rem !important; } -.pl-8 { padding-left: 2rem !important; } - -/* Button Sizing */ -.btn-sm { - padding: 0.5rem 1rem; - font-size: 0.75rem; -} - -.btn-md { - padding: 0.75rem 1.5rem; - font-size: 0.875rem; -} - -.btn-lg { - padding: 1rem 2rem; - font-size: 1rem; -} - -/* Alert styling */ -.alert { - position: relative; - padding: 1rem 1rem; - margin-bottom: 1rem; - border: 1px solid transparent; - border-radius: 0.25rem; -} - -.alert-heading { - color: inherit; -} - -.alert-link { - font-weight: 700; -} - -.alert-dismissible { - padding-right: 3rem; -} -.alert-dismissible .btn-close { - position: absolute; - top: 0; - right: 0; - z-index: 2; - padding: 1.25rem 1rem; -} - -.alert-primary { - color: #084298; - background-color: #cfe2ff; - border-color: #b6d4fe; -} -.alert-primary .alert-link { - color: #06357a; -} - -.alert-secondary { - color: #41464b; - background-color: #e2e3e5; - border-color: #d3d6d8; -} -.alert-secondary .alert-link { - color: #34383c; -} - -.alert-success { - color: #0f5132; - background-color: #d1e7dd; - border-color: #badbcc; -} -.alert-success .alert-link { - color: #0c4128; -} - -.alert-info { - color: #055160; - background-color: #cff4fc; - border-color: #b6effb; -} -.alert-info .alert-link { - color: #04414d; -} - -.alert-warning { - color: #664d03; - background-color: #fff3cd; - border-color: #ffecb5; -} -.alert-warning .alert-link { - color: #523e02; -} - -.alert-danger { - color: #842029; - background-color: #f8d7da; - border-color: #f5c2c7; -} -.alert-danger .alert-link { - color: #6a1a21; -} - -.alert-light { - color: #636464; - background-color: #fefefe; - border-color: #fdfdfe; -} -.alert-light .alert-link { - color: #4f5050; -} - -.alert-dark { - color: #141619; - background-color: #d3d3d4; - border-color: #bcbebf; -} -.alert-dark .alert-link { - color: #101214; -} - -/* Responsive adjustments for password generator */ -@media (max-width: 768px) { - .checkbox-grid { - grid-template-columns: 1fr; - gap: 12px; - } - - .button-group { - flex-direction: column; - } - - .strength-info { - flex-direction: column; - gap: 8px; - } - - .password-tabs { - flex-wrap: wrap; - } -} - -/* API Response Formatter Styles */ -.input-controls { - display: flex; - align-items: baseline; - gap: 10px; - margin-bottom: 10px; -} - -.input-controls label { - font-weight: 500; - color: var(--text-secondary); - font-size: 0.8rem; -} - -.input-controls select { - padding: 8px 12px; - border: 1px solid var(--border-color); - border-radius: var(--border-radius); - background-color: var(--white); - color: var(--text-primary); - font-size: 0.875rem; - transition: var(--transition); - max-width: 120px; - width: auto; -} - -.input-controls select:focus { - outline: none; - border-color: var(--primary-color); - box-shadow: 0 0 0 2px rgba(94, 114, 228, 0.1); -} - -.search-controls { - display: flex; - align-items: center; - gap: 10px; - margin-bottom: 15px; - padding: 10px; - background-color: var(--gray-light); - border-radius: var(--border-radius); -} - -.search-input-group { - display: flex; - align-items: center; - gap: 5px; - flex: 1; -} - -.search-input-group input { - flex: 1; - padding: 8px 12px; - border: 1px solid var(--border-color); - border-radius: var(--border-radius); - font-size: 0.875rem; -} - -.search-input-group .btn { - padding: 8px; - min-width: auto; -} - -.search-stats { - font-size: 0.875rem; - color: var(--text-muted); - white-space: nowrap; -} - -.tree-output { - background-color: var(--white); - border: 1px solid var(--border-color); - border-radius: var(--border-radius); - padding: 15px; - max-height: 500px; - overflow-y: auto; - font-family: 'Monaco', 'Consolas', 'Ubuntu Mono', monospace; - font-size: 0.875rem; - line-height: 1.5; -} - -.response-info { - display: flex; - flex-wrap: wrap; - gap: 20px; - padding: 10px; - background-color: var(--gray-light); - border-radius: var(--border-radius); - margin-bottom: 15px; - font-size: 0.875rem; -} - -.info-row { - display: flex; - gap: 5px; -} - -.info-label { - font-weight: 600; - color: var(--text-secondary); -} - -.info-value { - color: var(--text-primary); - font-family: 'Monaco', 'Consolas', monospace; -} - -.tree-container { - position: relative; -} - -.tree-node { - position: relative; - margin: 2px 0; -} - -.tree-toggle { - display: inline-block; - cursor: pointer; - padding: 2px 4px; - margin-right: 4px; - color: var(--text-muted); - transition: var(--transition); - user-select: none; - width: 16px; - text-align: center; -} - -.tree-toggle:hover { - color: var(--primary-color); - background-color: rgba(94, 114, 228, 0.1); - border-radius: 2px; -} - -.tree-toggle i { - font-size: 0.75rem; -} - -.tree-children { - margin-left: 20px; - border-left: 1px solid var(--border-color); - padding-left: 10px; -} - -.tree-item { - margin: 2px 0; - line-height: 1.4; -} - -.tree-key { - color: #0451a5; - font-weight: 500; -} - -.tree-colon { - color: var(--text-muted); - margin: 0 4px; -} - -.tree-comma { - color: var(--text-muted); -} - -.tree-bracket { - color: var(--text-muted); - font-weight: 500; -} - -.tree-array-bracket { - color: #795e26; -} - -.tree-object-bracket { - color: #795e26; -} - -.tree-count { - color: var(--text-muted); - font-size: 0.8rem; - font-style: italic; - margin-left: 5px; -} - -.tree-index { - color: #0451a5; - font-weight: 500; - margin-right: 5px; -} - -.tree-value { - display: inline; -} - -.tree-string { - color: #a31515; -} - -.tree-number { - color: #098658; -} - -.tree-boolean { - color: #0000ff; - font-weight: 500; -} - -.tree-null { - color: #0000ff; - font-style: italic; -} - -.tree-undefined { - color: #808080; - font-style: italic; -} - -.tree-unknown { - color: var(--text-muted); -} - -.search-highlight { - background-color: #ffeb3b; - color: #000; - padding: 1px 2px; - border-radius: 2px; -} - -.search-current { - background-color: #ff9800; - color: #fff; - padding: 1px 2px; - border-radius: 2px; - box-shadow: 0 0 3px rgba(255, 152, 0, 0.5); -} - -.validation-success { - color: var(--success-color); - padding: 12px; - background-color: rgba(45, 206, 137, 0.1); - border-radius: var(--border-radius); - border-left: 4px solid var(--success-color); -} - -.validation-error { - color: var(--secondary-color); - padding: 12px; - background-color: rgba(245, 54, 92, 0.1); - border-radius: var(--border-radius); - border-left: 4px solid var(--secondary-color); -} - -.validation-success h3, -.validation-error h3 { - margin-bottom: 6px; - font-size: 1.05rem; -} - -.json-info { - margin-top: 8px; -} - -.json-info p { - margin: 2px 0; - line-height: 1.3; - font-size: 0.9rem; -} - -/* Responsive adjustments for API Response Formatter */ -@media (max-width: 768px) { - .search-controls { - flex-direction: column; - align-items: stretch; - } - - .search-input-group { - justify-content: stretch; - } - - .response-info { - flex-direction: column; - gap: 10px; - } - - .tree-children { - margin-left: 15px; - padding-left: 8px; - } - - .controls { - flex-wrap: wrap; - gap: 8px; - } - - .controls .btn { - flex: 1; - min-width: 80px; - padding: 0.4rem 0.6rem; - font-size: 0.7rem; - } -} - -/* Regex Generator Styles */ -.regex-input { - margin-bottom: 1.5rem; -} - -.regex-input label { - display: block; - margin-bottom: 0.5rem; - font-weight: 600; - color: var(--text-primary); - font-size: 0.875rem; - letter-spacing: 0.025em; - text-transform: uppercase; -} - -.regex-input-group { - display: flex; - align-items: center; - gap: 0.25rem; - background: var(--surface); - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - padding: 0.5rem; - transition: var(--transition); -} - -.regex-input-group:focus-within { - border-color: var(--primary-color); - box-shadow: 0 0 0 3px rgba(94, 114, 228, 0.1); -} - -.regex-delimiter { - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 1.125rem; - font-weight: 600; - color: var(--text-secondary); - user-select: none; -} - -.regex-input-group input[type="text"] { - border: none; - background: transparent; - padding: 0.25rem 0.5rem; - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.9375rem; - color: var(--text-primary); - outline: none; - transition: var(--transition); -} - -.regex-input-group input[type="text"]:focus { - background: rgba(94, 114, 228, 0.05); - border-radius: 0.25rem; - box-shadow: none; -} - -#regex-pattern { - flex: 1; - min-width: 200px; -} - -#regex-flags { - width: 80px !important; - text-align: center; - font-weight: 500; -} - -#regex-flags::placeholder { - font-size: 0.8rem; - color: var(--text-muted); -} - -.test-input { - margin-bottom: 1.5rem; -} - -.test-input label { - display: block; - margin-bottom: 0.5rem; - font-weight: 600; - color: var(--text-primary); - font-size: 0.875rem; - letter-spacing: 0.025em; - text-transform: uppercase; -} - -/* Regex Results Layout */ -.regex-results-container { - margin-top: 1.5rem; - display: grid; - grid-template-columns: 1fr 280px; - gap: 1.5rem; - align-items: start; -} - -.regex-main-results { - display: flex; - flex-direction: column; - gap: 1.5rem; -} - -.regex-sidebar { - position: sticky; - top: 1rem; -} - -/* Highlighted Text Section */ -.highlighted-text-section { - background: var(--surface); - border-radius: var(--border-radius-lg); - padding: 1.5rem; - border: 1px solid var(--border-color); -} - -.highlighted-text-section h3 { - margin: 0 0 1rem 0; - color: var(--text-primary); - font-size: 1rem; - font-weight: 600; -} - -.highlighted-text-container { - background: var(--background); - border: 1px solid var(--border-color); - border-radius: var(--border-radius); - padding: 1rem; - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - line-height: 1.6; - white-space: pre-wrap; - word-wrap: break-word; - max-height: 200px; - overflow-y: auto; -} - -.highlighted-text mark { - background-color: rgba(94, 114, 228, 0.2); - color: var(--primary-color); - border-radius: 2px; - padding: 1px 2px; - font-weight: 500; -} - -/* Matches Section */ -.matches-section { - background: var(--surface); - border-radius: var(--border-radius-lg); - padding: 1.5rem; - border: 1px solid var(--border-color); -} - -.matches-section h3 { - margin: 0 0 1rem 0; - color: var(--text-primary); - font-size: 1rem; - font-weight: 600; -} - -.match-count { - color: var(--success-color); - font-weight: 600; - margin-bottom: 1rem; - padding: 0.5rem 1rem; - background: rgba(45, 206, 137, 0.1); - border-radius: var(--border-radius); - border-left: 3px solid var(--success-color); -} - -.no-matches { - color: var(--text-muted); - font-style: italic; - text-align: center; - padding: 2rem; - background: var(--background); - border-radius: var(--border-radius); -} - -.match-item { - background: var(--background); - border: 1px solid var(--border-color); - border-radius: var(--border-radius); - padding: 1rem; - margin-bottom: 0.75rem; - transition: var(--transition); -} - -.match-item:hover { - border-color: var(--primary-color); - box-shadow: 0 2px 8px rgba(94, 114, 228, 0.1); -} - -.match-header { - font-size: 0.75rem; - font-weight: 600; - color: var(--text-secondary); - margin-bottom: 0.5rem; - text-transform: uppercase; - letter-spacing: 0.05em; -} - -.match-text { - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - background: var(--primary-color); - color: white; - padding: 0.5rem 0.75rem; - border-radius: var(--border-radius); - font-weight: 500; - word-break: break-all; - font-size: 0.875rem; -} - -.match-groups { - margin-top: 0.75rem; - display: flex; - flex-wrap: wrap; - gap: 0.5rem; - align-items: center; -} - -.match-groups::before { - content: 'Groups:'; - font-size: 0.75rem; - font-weight: 600; - color: var(--text-secondary); - margin-right: 0.25rem; -} - -.group { - background: var(--info-color); - color: white; - padding: 0.25rem 0.5rem; - border-radius: 1rem; - font-size: 0.75rem; - font-weight: 500; - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; -} - -/* Pattern Explanation Section */ -.explanation-section { - background: var(--surface); - border-radius: var(--border-radius-lg); - padding: 1.5rem; - border: 1px solid var(--border-color); -} - -.explanation-section h3 { - margin: 0 0 1rem 0; - color: var(--text-primary); - font-size: 1rem; - font-weight: 600; -} - -.pattern-info { - background: var(--background); - padding: 1rem; - border-radius: var(--border-radius); - margin-bottom: 1rem; - border-left: 3px solid var(--primary-color); -} - -.pattern-info strong { - color: var(--text-primary); -} - -.pattern-info code { - background: var(--primary-color); - color: white; - padding: 0.25rem 0.5rem; - border-radius: 0.25rem; - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; -} - -.pattern-breakdown { - background: var(--background); - border-radius: var(--border-radius); - overflow: hidden; -} - -.token-explanation { - display: flex; - align-items: center; - padding: 0.75rem 1rem; - border-bottom: 1px solid var(--border-color); - transition: var(--transition); -} - -.token-explanation:last-child { - border-bottom: none; -} - -.token-explanation:hover { - background: rgba(94, 114, 228, 0.05); -} - -.token { - background: var(--primary-color); - color: white; - padding: 0.25rem 0.5rem; - border-radius: 0.25rem; - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.75rem; - font-weight: 600; - min-width: 60px; - text-align: center; - margin-right: 1rem; -} - -.token-desc { - color: var(--text-secondary); - font-size: 0.875rem; - flex: 1; -} - -/* Quick Reference Sidebar */ -.regex-cheatsheet { - background: var(--surface); - border-radius: var(--border-radius-lg); - padding: 1.5rem; - border: 1px solid var(--border-color); - box-shadow: var(--shadow-sm); -} - -.regex-cheatsheet h3 { - margin: 0 0 1rem 0; - color: var(--text-primary); - font-size: 1rem; - font-weight: 600; -} - -.cheatsheet-grid { - display: flex; - flex-direction: column; - gap: 0.5rem; -} - -.cheat-item { - background: var(--background); - padding: 0.5rem 0.75rem; - border-radius: var(--border-radius); - border: 1px solid var(--border-color); - font-size: 0.8125rem; - transition: var(--transition); -} - -.cheat-item:hover { - border-color: var(--primary-color); - background: rgba(94, 114, 228, 0.05); -} - -.cheat-item code { - background: var(--gray-dark); - color: white; - padding: 0.125rem 0.375rem; - border-radius: 0.25rem; - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.75rem; - font-weight: 600; - margin-right: 0.5rem; -} - -/* Responsive design for regex generator */ -@media (max-width: 768px) { - .regex-input-group { - flex-wrap: wrap; - } - - #regex-pattern { - min-width: 150px; - } - - #regex-flags { - width: 60px !important; - } - - .regex-results-container { - grid-template-columns: 1fr; - gap: 1rem; - } - - .regex-sidebar { - position: static; - order: -1; - } - - .cheatsheet-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); - gap: 0.5rem; - } -} - -/* Text Compare Styles */ -.compare-options { - display: flex; - justify-content: space-between; - align-items: center; - margin: 1.5rem 0; - padding: 1rem; - background: var(--background); - border-radius: var(--border-radius-lg); - border: 1px solid var(--border-color); -} - -.compare-controls { - display: flex; - gap: 0.75rem; -} - -.compare-settings { - display: flex; - gap: 1.5rem; - align-items: center; -} - -.checkbox-label { - display: flex; - align-items: center; - gap: 0.5rem; - font-size: 0.875rem; - font-weight: 500; - color: var(--text-primary); - cursor: pointer; - user-select: none; -} - -.checkbox-label input[type="checkbox"] { - width: 1rem; - height: 1rem; - accent-color: var(--primary-color); - cursor: pointer; -} - -/* Comparison Results */ -.comparison-stats { - margin-bottom: 1.5rem; - padding: 1.5rem; - background: var(--surface); - border-radius: var(--border-radius-lg); - border: 1px solid var(--border-color); - box-shadow: var(--shadow-sm); -} - -.comparison-stats h3 { - margin: 0 0 1rem 0; - color: var(--text-primary); - font-size: 1.125rem; - font-weight: 600; - display: flex; - align-items: center; - gap: 0.5rem; -} - -.comparison-stats h3::before { - content: '📊'; - font-size: 1.25rem; -} - -.stats-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 1rem; - margin-top: 1rem; -} - -.stat { - display: flex; - flex-direction: column; - gap: 0.25rem; - padding: 1rem; - background: var(--background); - border-radius: var(--border-radius); - border: 1px solid var(--border-color); - transition: var(--transition); -} - -.stat:hover { - border-color: var(--primary-color); - box-shadow: 0 2px 8px rgba(94, 114, 228, 0.1); -} - -.stat label { - font-size: 0.75rem; - font-weight: 600; - color: var(--text-secondary); - text-transform: uppercase; - letter-spacing: 0.05em; -} - -.stat span { - font-size: 1.125rem; - font-weight: 600; - color: var(--text-primary); -} - -.stat.similarity span { - color: var(--success-color); -} - -.stat.differences span { - color: var(--warning-color); -} - -/* Diff View */ -.diff-view { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 1.5rem; - margin-top: 1.5rem; -} - -.diff-column { - background: var(--surface); - border-radius: var(--border-radius-lg); - border: 1px solid var(--border-color); - overflow: hidden; - box-shadow: var(--shadow-sm); -} - -.diff-column h4 { - margin: 0; - padding: 1rem; - background: var(--background); - color: var(--text-primary); - font-size: 0.875rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.05em; - border-bottom: 1px solid var(--border-color); - display: flex; - align-items: center; - gap: 0.5rem; -} - -.diff-column:first-child h4::before { - content: '📄'; -} - -.diff-column:last-child h4::before { - content: '📄'; -} - -.diff-content { - background: var(--white); - max-height: 400px; - overflow-y: auto; - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.8125rem; - line-height: 1.5; -} - -.diff-line { - padding: 0.5rem 1rem 0.5rem 3rem; - border-bottom: 1px solid var(--border-color); - white-space: pre-wrap; - word-wrap: break-word; - position: relative; - transition: var(--transition); -} - -.line-number { - position: absolute; - left: 0.5rem; - top: 0.5rem; - font-size: 0.75rem; - color: var(--text-muted); - font-weight: 500; - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - user-select: none; -} - -.diff-line:hover { - background: var(--background); -} - -.diff-line:last-child { - border-bottom: none; -} - -.diff-line.diff-added { - background: rgba(45, 206, 137, 0.1); - border-left: 3px solid var(--success-color); - color: var(--success-color); -} - -.diff-line.diff-added::before { - content: '+'; - position: absolute; - left: 0.25rem; - font-weight: bold; -} - -.diff-line.diff-removed { - background: rgba(245, 54, 92, 0.1); - border-left: 3px solid var(--secondary-color); - color: var(--secondary-color); -} - -.diff-line.diff-removed::before { - content: '-'; - position: absolute; - left: 0.25rem; - font-weight: bold; -} - -.diff-line.diff-modified { - background: rgba(251, 99, 64, 0.1); - border-left: 3px solid var(--warning-color); - color: var(--warning-color); -} - -.diff-line.diff-modified::before { - content: '~'; - position: absolute; - left: 0.25rem; - font-weight: bold; -} - -/* Character-level diff highlighting */ -.char-diff { - background: rgba(255, 255, 255, 0.8); - padding: 0.125rem 0.25rem; - border-radius: 0.25rem; - font-weight: 600; - border: 1px solid currentColor; - box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.5); -} - -.no-differences { - text-align: center; - padding: 3rem 2rem; - color: var(--text-muted); - background: var(--background); - border-radius: var(--border-radius-lg); - border: 1px solid var(--border-color); -} - -.no-differences::before { - content: '✅'; - display: block; - font-size: 3rem; - margin-bottom: 1rem; -} - -.no-differences h3 { - color: var(--success-color); - margin-bottom: 0.5rem; -} - -/* Responsive design for text compare */ -@media (max-width: 768px) { - .compare-options { - flex-direction: column; - gap: 1rem; - align-items: stretch; - } - - .compare-settings { - justify-content: center; - } - - .stats-grid { - grid-template-columns: 1fr; - } - - .diff-view { - grid-template-columns: 1fr; - } - - .diff-content { - max-height: 250px; - } -} diff --git a/src/renderer/styles/tool-fixes.css b/src/renderer/styles/tool-fixes.css deleted file mode 100644 index d14c4047..00000000 --- a/src/renderer/styles/tool-fixes.css +++ /dev/null @@ -1,754 +0,0 @@ -/* Tool-specific UI fixes for consistent styling */ - -/* JSON Viewer specific */ -#json-viewer .input-section { - margin-bottom: 1.5rem; -} - -#json-viewer .output-section { - margin-top: 1.5rem; -} - -#json-viewer #json-input { - width: 100%; - min-height: 250px; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--surface); - resize: vertical; - box-sizing: border-box; -} - -#json-viewer #json-output { - width: 100%; - min-height: 300px; - max-height: 500px; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - background: var(--background); - overflow: auto; - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - line-height: 1.6; - white-space: pre; - margin: 0; - box-sizing: border-box; -} - -/* Text Compare specific */ -#text-compare .compare-inputs { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 1.5rem; - margin-bottom: 1.5rem; -} - -#text-compare textarea { - width: 100%; - min-height: 200px; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--surface); - resize: vertical; - box-sizing: border-box; -} - -/* Case Converter specific */ -#case-converter #case-input, -#case-converter #case-output { - width: 100%; - min-height: 150px; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--surface); - resize: vertical; - box-sizing: border-box; - margin-bottom: 1rem; -} - -#case-converter #case-output { - background: var(--background); -} - -/* UUID Generator specific */ -#uuid-generator .uuid-controls { - display: flex; - align-items: flex-end; - gap: 1rem; - margin-bottom: 1.5rem; - padding: 1.5rem; - background: var(--background); - border-radius: var(--border-radius-lg); -} - -#uuid-generator .uuid-controls input, -#uuid-generator .uuid-controls select { - height: 42px; - box-sizing: border-box; - padding: 10px 12px; -} - -#uuid-generator #generate-uuid { - align-self: flex-end; - margin-bottom: 0; - height: 42px; - padding: 10px 20px; - box-sizing: border-box; - line-height: 1.2; -} - - -#uuid-generator #uuid-output { - width: 100%; - min-height: 200px; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--background); - resize: vertical; - box-sizing: border-box; - line-height: 1.8; -} - -/* Base64 Converter specific */ -#base64-converter textarea { - width: 100%; - min-height: 150px; - padding: 1rem; - margin: 0.75rem 0; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--surface); - resize: vertical; - box-sizing: border-box; -} - -#base64-converter textarea[readonly] { - background: var(--background); -} - -/* JWT Decoder specific */ -#jwt-decoder #jwt-input { - width: 100%; - min-height: 120px; - padding: 1rem; - margin-bottom: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--surface); - resize: vertical; - box-sizing: border-box; -} - -/* JSON to TypeScript specific */ -#json-to-ts #json-to-ts-input { - width: 100%; - min-height: 200px; - padding: 1rem; - margin-bottom: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--surface); - resize: vertical; - box-sizing: border-box; -} - -#json-to-ts #typescript-output { - width: 100%; - min-height: 300px; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - background: var(--background); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - line-height: 1.6; - overflow: auto; - white-space: pre; - margin: 0; - box-sizing: border-box; -} - -/* Hash Generator specific */ -#hash-generator #hash-input { - width: 100%; - min-height: 120px; - padding: 1rem; - margin-bottom: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--surface); - resize: vertical; - box-sizing: border-box; -} - -#hash-generator .hash-result textarea { - width: 100%; - height: 60px; - padding: 0.75rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.75rem; - background: var(--background); - resize: none; - box-sizing: border-box; -} - -/* URL Encoder specific */ -#url-encoder textarea { - width: 100%; - min-height: 120px; - padding: 1rem; - margin: 0.75rem 0; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--surface); - resize: vertical; - box-sizing: border-box; -} - -#url-encoder textarea[readonly] { - background: var(--background); -} - -/* Timestamp Converter specific */ -#timestamp input[type='number'], -#timestamp input[type='datetime-local'] { - width: 100%; - padding: 0.75rem 1rem; - margin-bottom: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - font-size: 0.9375rem; - background: var(--surface); - box-sizing: border-box; -} - -#timestamp textarea { - width: 100%; - min-height: 150px; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--background); - resize: vertical; - box-sizing: border-box; -} - -/* Lorem Generator specific */ -#lorem-generator .lorem-controls { - display: flex; - align-items: flex-end; - gap: 1rem; - padding: 1.5rem; - background: var(--background); - border-radius: var(--border-radius-lg); - margin-bottom: 1.5rem; -} - -#lorem-generator #lorem-output { - width: 100%; - min-height: 300px; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; - font-size: 0.9375rem; - background: var(--background); - resize: vertical; - box-sizing: border-box; - line-height: 1.8; -} - -/* SQL Formatter specific */ -#sql-formatter #sql-input { - width: 100%; - min-height: 200px; - padding: 1rem; - margin-bottom: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--surface); - resize: vertical; - box-sizing: border-box; -} - -#sql-formatter #sql-output { - width: 100%; - min-height: 300px; - max-height: 500px; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - background: var(--background); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - line-height: 1.6; - overflow: auto; - white-space: pre; - margin: 0; - box-sizing: border-box; -} - -/* Number Base Converter specific */ -#number-base .base-input-group input { - width: 100%; - padding: 0.75rem 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.9375rem; - background: var(--surface); - box-sizing: border-box; -} - -/* CSV JSON Converter specific */ -#csv-json textarea, -#csv-json pre { - width: 100%; - min-height: 200px; - padding: 1rem; - margin: 0.75rem 0; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--surface); - resize: vertical; - box-sizing: border-box; -} - -#csv-json pre { - background: var(--background); - overflow: auto; - white-space: pre; -} - -/* QR Generator specific */ -#qr-generator #qr-text { - width: 100%; - min-height: 100px; - padding: 1rem; - margin-bottom: 1.5rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; - font-size: 0.9375rem; - background: var(--surface); - resize: vertical; - box-sizing: border-box; -} - -/* Color Palette specific */ -#color-palette .color-input-container { - display: flex; - align-items: center; - gap: 1rem; -} - -#color-palette #base-color { - width: 60px; - height: 40px; - padding: 0; - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - cursor: pointer; -} - -#color-palette #base-color-hex { - flex: 0 0 150px; - padding: 0.75rem 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.9375rem; - background: var(--surface); - text-transform: uppercase; -} - -/* Markdown Editor specific */ -#markdown-editor #markdown-input { - width: 100%; - height: 400px; - padding: 1.5rem; - border: none; - border-right: 1px solid var(--border-color); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--surface); - resize: none; - box-sizing: border-box; - line-height: 1.8; -} - -/* Cron Calculator specific */ -#cron-calculator .cron-field input { - width: 100%; - padding: 0.625rem 0.875rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--surface); - box-sizing: border-box; -} - -#cron-calculator #cron-expression { - width: 100%; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 1.125rem; - font-weight: 600; - text-align: center; - background: var(--background); - box-sizing: border-box; -} - -/* Regex Generator specific */ -#regex-generator #regex-pattern { - flex: 1; - padding: 0.75rem 1rem; - border: none; - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.9375rem; - background: transparent; -} - -#regex-generator #regex-flags { - width: 80px; - padding: 0.75rem 0.5rem; - border: none; - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--background); -} - -#regex-generator #test-string { - width: 100%; - min-height: 150px; - padding: 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius-lg); - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--surface); - resize: vertical; - box-sizing: border-box; -} - -/* Code Playground specific */ -#code-playground #code-input { - width: 100%; - height: 500px; - padding: 1.5rem; - border: none; - font-family: 'JetBrains Mono', 'Monaco', 'Consolas', monospace; - font-size: 0.875rem; - background: var(--surface); - resize: none; - box-sizing: border-box; - line-height: 1.6; -} - -/* Image Converter specific */ -#image-converter .file-drop-zone { - border: 2px dashed var(--border-color); - border-radius: var(--border-radius-lg); - padding: 3rem 2rem; - text-align: center; - cursor: pointer; - transition: var(--transition); - background: var(--background); -} - -#image-converter .file-drop-zone:hover { - border-color: var(--primary-color); - background: var(--surface); -} - -/* Global fixes for all tools */ -.tool-content { - padding: 1.5rem; -} - -.controls { - display: flex; - gap: 0.75rem; - margin: 1rem 0; - flex-wrap: wrap; - align-items: center; -} - -.controls .btn { - margin: 0; -} - -/* Fix for all labels */ -label { - display: block; - margin-bottom: 0.5rem; - font-weight: 600; - color: var(--text-primary); - font-size: 0.875rem; -} - -/* Ensure consistent spacing */ -.input-section, -.output-section { - margin-bottom: 1.5rem; -} - -.input-section:last-child, -.output-section:last-child { - margin-bottom: 0; -} - -/* Fix checkbox alignment */ -input[type='checkbox'] { - width: 1.125rem; - height: 1.125rem; - margin-right: 0.5rem; - vertical-align: middle; - cursor: pointer; -} - -label input[type='checkbox'] { - margin-right: 0.5rem; -} - -/* Responsive fixes */ -@media (max-width: 768px) { - .compare-inputs { - grid-template-columns: 1fr !important; - } - - .uuid-controls, - .lorem-controls { - flex-direction: column; - align-items: stretch; - } - - .control-group { - width: 100%; - } - - .controls { - flex-direction: column; - align-items: stretch; - } - - .controls .btn { - width: 100%; - } -} - -/* Unit Converter specific */ -#unit-converter .converter-controls { - display: flex; - flex-direction: column; - gap: 1.5rem; -} - -#unit-converter .category-selector { - display: flex; - flex-direction: column; - gap: 0.5rem; -} - -#unit-converter .category-selector label { - font-weight: 600; - color: var(--text-primary); -} - -#unit-converter .conversion-row { - display: grid; - grid-template-columns: 1fr auto 1fr; - gap: 1rem; - align-items: end; -} - -#unit-converter .conversion-input, -#unit-converter .conversion-output { - display: flex; - flex-direction: column; - gap: 0.5rem; -} - -#unit-converter .conversion-input label, -#unit-converter .conversion-output label { - font-weight: 600; - color: var(--text-primary); -} - -#unit-converter .input-group { - display: flex; - gap: 0.5rem; -} - -#unit-converter .input-group input { - flex: 2; -} - -#unit-converter .input-group select { - flex: 1; - min-width: 120px; -} - -#unit-converter .swap-button-container { - display: flex; - align-items: center; - justify-content: center; - margin-bottom: 1.5rem; -} - -#unit-converter .swap-btn { - padding: 0.75rem; - border-radius: 50%; - background: var(--accent); - color: white; - border: none; - cursor: pointer; - transition: all 0.2s ease; - width: 3rem; - height: 3rem; - display: flex; - align-items: center; - justify-content: center; -} - -#unit-converter .swap-btn:hover { - background: var(--accent-hover); - transform: rotate(180deg); -} - -#unit-converter .converter-actions { - text-align: center; -} - -#unit-converter .conversion-info { - margin-top: 1.5rem; - padding: 1rem; - background: var(--surface); - border: 1px solid var(--border-color); - border-radius: var(--border-radius); -} - -#unit-converter .conversion-summary { - text-align: center; - font-size: 1.1rem; - color: var(--text-primary); -} - -#unit-converter .disclaimer { - margin-top: 1rem; - padding: 1rem; - background: #fff3cd; - border: 1px solid #ffeaa7; - border-radius: var(--border-radius); - color: #856404; - display: flex; - align-items: center; - gap: 0.5rem; -} - -#unit-converter .disclaimer i { - color: #f39c12; -} - -/* Responsive design for unit converter */ -@media (max-width: 768px) { - #unit-converter .conversion-row { - grid-template-columns: 1fr; - gap: 1.5rem; - } - - #unit-converter .swap-button-container { - order: 2; - margin-bottom: 0; - } - - #unit-converter .conversion-output { - order: 3; - } - - #unit-converter .input-group { - flex-direction: column; - } - - #unit-converter .input-group input, - #unit-converter .input-group select { - flex: 1; - } -} - -/* Date Difference specific styles */ -#date-difference .input-container { - margin-bottom: 1rem; -} - -/* Ensure date and time inputs are fully clickable */ -#date-difference input[type="date"], -#date-difference input[type="time"] { - cursor: pointer; - width: 100%; - padding: 0.75rem 1rem; - border: 2px solid var(--border-color); - border-radius: var(--border-radius); - font-size: 0.9375rem; - background-color: var(--surface); - color: var(--text-primary); - transition: var(--transition); - box-sizing: border-box; - line-height: 1.5; -} - -#date-difference input[type="date"]:focus, -#date-difference input[type="time"]:focus { - outline: none; - border-color: var(--primary-color); - box-shadow: 0 0 0 3px rgba(94, 114, 228, 0.1); -} - -#date-difference input[type="date"]::-webkit-calendar-picker-indicator, -#date-difference input[type="time"]::-webkit-calendar-picker-indicator { - cursor: pointer; - padding: 0.25rem; - border-radius: var(--border-radius); - opacity: 0.7; - transition: var(--transition); -} - -#date-difference input[type="date"]::-webkit-calendar-picker-indicator:hover, -#date-difference input[type="time"]::-webkit-calendar-picker-indicator:hover { - opacity: 1; - background-color: rgba(94, 114, 228, 0.1); -} diff --git a/src/utils/api-formatter-utils.js b/src/utils/api-formatter-utils.js deleted file mode 100644 index ab6efc0b..00000000 --- a/src/utils/api-formatter-utils.js +++ /dev/null @@ -1,372 +0,0 @@ -/** - * Utility class for API response formatting with tree view functionality - */ -class APIFormatterUtils { - static parseResponse(input, responseType = 'json') { - if (!input || !input.trim()) { - throw new Error('Input cannot be empty'); - } - - const trimmedInput = input.trim(); - - try { - switch (responseType.toLowerCase()) { - case 'json': - return JSON.parse(trimmedInput); - case 'graphql': - // GraphQL responses are JSON format - const parsed = JSON.parse(trimmedInput); - this.validateGraphQLResponse(parsed); - return parsed; - default: - throw new Error('Unsupported response type'); - } - } catch (error) { - if ( - error.message.includes('Unexpected token') || - error.message.includes('Expected') - ) { - throw new Error( - `Invalid ${responseType.toUpperCase()} format: ${error.message}` - ); - } - throw error; - } - } - - static validateGraphQLResponse(response) { - // GraphQL response should have data and/or errors fields - if (typeof response !== 'object' || response === null) { - throw new Error('GraphQL response must be an object'); - } - - if ( - !response.hasOwnProperty('data') && - !response.hasOwnProperty('errors') - ) { - throw new Error( - 'GraphQL response must contain either "data" or "errors" field' - ); - } - } - - static generateTreeHTML(data, path = '', level = 0) { - if (data === null) { - return `null`; - } - - if (typeof data === 'undefined') { - return `undefined`; - } - - if (typeof data === 'string') { - const escaped = this.escapeHtml(data); - return `"${escaped}"`; - } - - if (typeof data === 'number') { - return `${data}`; - } - - if (typeof data === 'boolean') { - return `${data}`; - } - - if (Array.isArray(data)) { - return this.generateArrayHTML(data, path, level); - } - - if (typeof data === 'object') { - return this.generateObjectHTML(data, path, level); - } - - return `${String(data)}`; - } - - static generateArrayHTML(array, path, level) { - if (array.length === 0) { - return `[]`; - } - - const itemId = `array_${path.replace( - /[^a-zA-Z0-9]/g, - '_' - )}_${level}_${Date.now()}`; - const isCollapsible = array.length > 0; - - let html = `
        `; - - if (isCollapsible) { - html += ` - - - - `; - } - - html += `[`; - html += `${array.length} item${ - array.length !== 1 ? 's' : '' - }`; - - if (isCollapsible) { - html += `
        `; - - array.forEach((item, index) => { - const itemPath = `${path}[${index}]`; - html += ` -
        - ${index}: - ${this.generateTreeHTML(item, itemPath, level + 1)} -
        - `; - }); - - html += `
        `; - } - - html += `]`; - html += `
        `; - - return html; - } - - static generateObjectHTML(obj, path, level) { - const keys = Object.keys(obj); - - if (keys.length === 0) { - return `{}`; - } - - const itemId = `object_${path.replace( - /[^a-zA-Z0-9]/g, - '_' - )}_${level}_${Date.now()}`; - const isCollapsible = keys.length > 0; - - let html = `
        `; - - if (isCollapsible) { - html += ` - - - - `; - } - - html += `{`; - html += `${keys.length} key${ - keys.length !== 1 ? 's' : '' - }`; - - if (isCollapsible) { - html += `
        `; - - keys.forEach((key, index) => { - const keyPath = path ? `${path}.${key}` : key; - const isLast = index === keys.length - 1; - - html += ` -
        - "${this.escapeHtml(key)}" - : - ${this.generateTreeHTML(obj[key], keyPath, level + 1)} - ${!isLast ? ',' : ''} -
        - `; - }); - - html += `
        `; - } - - html += `}`; - html += `
        `; - - return html; - } - - static escapeHtml(text) { - try { - if (typeof document !== 'undefined' && document.createElement) { - const div = document.createElement('div'); - if (div && typeof div.textContent !== 'undefined') { - div.textContent = text; - return div.innerHTML; - } - } - } catch (e) { - // Fall through to manual escaping - } - - // Fallback for testing environments without DOM or when DOM fails - return text - .replace(/&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') - .replace(/'/g, '''); - } - - static getResponseInfo(data) { - const jsonString = JSON.stringify(data); - return { - type: Array.isArray(data) ? 'Array' : typeof data, - size: this.formatBytes(new Blob([jsonString]).size), - keys: this.countKeys(data), - depth: this.getMaxDepth(data), - charactersCount: jsonString.length, - }; - } - - static countKeys(obj) { - if (typeof obj !== 'object' || obj === null) { - return 0; - } - - if (Array.isArray(obj)) { - return obj.length; - } - - let count = 0; - for (let key in obj) { - if (obj.hasOwnProperty(key)) { - count++; - if (typeof obj[key] === 'object' && obj[key] !== null) { - count += this.countKeys(obj[key]); - } - } - } - return count; - } - - static getMaxDepth(obj, depth = 0) { - if (typeof obj !== 'object' || obj === null) { - return depth; - } - - let maxDepth = depth; - - if (Array.isArray(obj)) { - for (let item of obj) { - maxDepth = Math.max(maxDepth, this.getMaxDepth(item, depth + 1)); - } - } else { - for (let key in obj) { - if (obj.hasOwnProperty(key)) { - maxDepth = Math.max(maxDepth, this.getMaxDepth(obj[key], depth + 1)); - } - } - } - - return maxDepth; - } - - static formatBytes(bytes) { - if (bytes === 0) return '0 B'; - - const k = 1024; - const sizes = ['B', 'KB', 'MB', 'GB']; - const i = Math.floor(Math.log(bytes) / Math.log(k)); - - return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; - } - - static searchInData(data, searchTerm, path = '') { - const results = []; - - if (!searchTerm || !searchTerm.trim()) { - return results; - } - - const term = searchTerm.toLowerCase(); - - if (typeof data === 'string' && data.toLowerCase().includes(term)) { - results.push({ - path: path || 'root', - type: 'value', - value: data, - match: 'content', - }); - } - - if (typeof data === 'object' && data !== null) { - if (Array.isArray(data)) { - data.forEach((item, index) => { - const itemPath = path ? `${path}[${index}]` : `[${index}]`; - results.push(...this.searchInData(item, searchTerm, itemPath)); - }); - } else { - for (let key in data) { - if (data.hasOwnProperty(key)) { - const keyPath = path ? `${path}.${key}` : key; - - // Check if key matches - if (key.toLowerCase().includes(term)) { - results.push({ - path: keyPath, - type: 'key', - value: key, - match: 'key', - }); - } - - // Search in value - results.push(...this.searchInData(data[key], searchTerm, keyPath)); - } - } - } - } - - return results; - } - - static highlightSearchResults(html, searchTerm) { - if (!searchTerm || !searchTerm.trim()) { - return html; - } - - // Escape regex special characters and HTML entities - const term = this.escapeHtml(searchTerm).replace( - /[.*+?^${}()|[\]\\]/g, - '\\$&' - ); - const regex = new RegExp(`(${term})`, 'gi'); - - return html.replace(regex, '$1'); - } - - static expandToPath(path) { - // Generate selectors to expand all nodes in the path - const pathParts = path.split(/[\.\[\]]/g).filter((part) => part !== ''); - const selectors = []; - - let currentPath = ''; - pathParts.forEach((part, index) => { - if (index === 0) { - currentPath = part; - } else { - currentPath += pathParts[index - 1].match(/^\d+$/) - ? `[${part}]` - : `.${part}`; - } - - const elementId = `object_${currentPath.replace( - /[^a-zA-Z0-9]/g, - '_' - )}_${index}`; - selectors.push(`#${elementId}`); - }); - - return selectors; - } -} - -// Export for testing -if (typeof module !== 'undefined' && module.exports) { - module.exports = APIFormatterUtils; -} - -// Export for browser -if (typeof window !== 'undefined') { - window.APIFormatterUtils = APIFormatterUtils; -} diff --git a/src/utils/base64-utils.js b/src/utils/base64-utils.js deleted file mode 100644 index 056c3cc7..00000000 --- a/src/utils/base64-utils.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Base64 utilities for testing - extracted from Base64Converter - */ - -class Base64Utils { - static encodeText(text) { - if (!text || !text.trim()) { - throw new Error('Please enter text to encode.'); - } - - try { - return btoa(unescape(encodeURIComponent(text))); - } catch (error) { - throw new Error('Error encoding text: ' + error.message); - } - } - - static decodeText(base64) { - if (!base64 || !base64.trim()) { - throw new Error('Please enter Base64 to decode.'); - } - - if (!this.isValidBase64(base64.trim())) { - throw new Error('Invalid Base64 format'); - } - - try { - return decodeURIComponent(escape(atob(base64.trim()))); - } catch (error) { - throw new Error( - 'Error decoding Base64: Invalid format or corrupted data' - ); - } - } - - static isValidBase64(str) { - if (!str || str.trim() === '') return false; - - try { - return btoa(atob(str)) === str; - } catch (err) { - return false; - } - } -} - -module.exports = Base64Utils; diff --git a/src/utils/lorem-utils.js b/src/utils/lorem-utils.js deleted file mode 100644 index 7c3bbe23..00000000 --- a/src/utils/lorem-utils.js +++ /dev/null @@ -1,211 +0,0 @@ -/** - * Lorem utilities for generating lorem ipsum text - */ - -class LoremUtils { - static LOREM_WORDS = [ - 'lorem', - 'ipsum', - 'dolor', - 'sit', - 'amet', - 'consectetur', - 'adipiscing', - 'elit', - 'sed', - 'do', - 'eiusmod', - 'tempor', - 'incididunt', - 'ut', - 'labore', - 'et', - 'dolore', - 'magna', - 'aliqua', - 'enim', - 'ad', - 'minim', - 'veniam', - 'quis', - 'nostrud', - 'exercitation', - 'ullamco', - 'laboris', - 'nisi', - 'aliquip', - 'ex', - 'ea', - 'commodo', - 'consequat', - 'duis', - 'aute', - 'irure', - 'in', - 'reprehenderit', - 'voluptate', - 'velit', - 'esse', - 'cillum', - 'fugiat', - 'nulla', - 'pariatur', - 'excepteur', - 'sint', - 'occaecat', - 'cupidatat', - 'non', - 'proident', - 'sunt', - 'culpa', - 'qui', - 'officia', - 'deserunt', - 'mollit', - 'anim', - 'id', - 'est', - 'laborum', - 'at', - 'vero', - 'eos', - 'accusamus', - 'accusantium', - 'doloremque', - 'laudantium', - 'totam', - 'rem', - 'aperiam', - 'eaque', - 'ipsa', - 'quae', - 'ab', - 'illo', - 'inventore', - 'veritatis', - 'et', - 'quasi', - 'architecto', - 'beatae', - 'vitae', - 'dicta', - 'sunt', - 'explicabo', - 'nemo', - 'ipsam', - 'voluptatem', - 'quia', - 'voluptas', - 'aspernatur', - 'aut', - 'odit', - 'fugit', - 'sed', - 'quia', - 'consequuntur', - 'magni', - 'dolores', - 'ratione', - 'sequi', - 'nesciunt', - 'neque', - 'porro', - 'quisquam', - 'dolorem', - 'adipisci', - 'numquam', - 'eius', - 'modi', - 'tempora', - 'incidunt', - 'magnam', - 'quaerat', - 'voluptatem', - 'laudantium', - 'doloremque', - 'laudantium', - ]; - - static generateWords(count) { - if (count < 1) { - throw new Error('Word count must be at least 1'); - } - - const words = []; - for (let i = 0; i < count; i++) { - const word = - this.LOREM_WORDS[Math.floor(Math.random() * this.LOREM_WORDS.length)]; - words.push(word); - } - return words.join(' '); - } - - static generateSentences(count) { - if (count < 1) { - throw new Error('Sentence count must be at least 1'); - } - - const sentences = []; - for (let i = 0; i < count; i++) { - const wordCount = this.randomBetween(8, 20); - const words = this.generateWords(wordCount).split(' '); - - words[0] = this.capitalizeFirst(words[0]); - - let sentence = words.join(' '); - - if (Math.random() < 0.1) { - sentence += '!'; - } else if (Math.random() < 0.1) { - sentence += '?'; - } else { - sentence += '.'; - } - - sentences.push(sentence); - } - return sentences.join(' '); - } - - static generateParagraphs(count) { - if (count < 1) { - throw new Error('Paragraph count must be at least 1'); - } - - const paragraphs = []; - for (let i = 0; i < count; i++) { - const sentenceCount = this.randomBetween(3, 7); - const sentences = this.generateSentences(sentenceCount); - paragraphs.push(sentences); - } - return paragraphs.join('\n\n'); - } - - static generateLorem(type = 'paragraphs', count = 1) { - if (count < 1 || count > 50) { - throw new Error('Count must be between 1 and 50'); - } - - switch (type) { - case 'paragraphs': - return this.generateParagraphs(count); - case 'sentences': - return this.generateSentences(count); - case 'words': - return this.generateWords(count); - default: - return this.generateParagraphs(count); - } - } - - static randomBetween(min, max) { - return Math.floor(Math.random() * (max - min + 1)) + min; - } - - static capitalizeFirst(str) { - if (!str) return str; - return str.charAt(0).toUpperCase() + str.slice(1); - } -} - -module.exports = LoremUtils; diff --git a/src/utils/password-utils.js b/src/utils/password-utils.js deleted file mode 100644 index b8a79f20..00000000 --- a/src/utils/password-utils.js +++ /dev/null @@ -1,206 +0,0 @@ -/** - * Password utilities for generating secure passwords and passphrases - */ - -class PasswordUtils { - static LOWERCASE = 'abcdefghijklmnopqrstuvwxyz'; - static UPPERCASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; - static NUMBERS = '0123456789'; - static SYMBOLS = '!@#$%^&*()_+-=[]{};\':"|,.<>?'; - static AMBIGUOUS = '0OIl1'; - - // Word list for passphrases (subset for testing) - static WORDS = [ - 'apple', - 'brave', - 'chair', - 'dream', - 'eagle', - 'flame', - 'grape', - 'house', - 'image', - 'judge', - 'knife', - 'lemon', - 'magic', - 'novel', - 'ocean', - 'piano', - 'queen', - 'river', - 'stone', - 'table', - 'unity', - 'value', - 'water', - 'youth', - 'zebra', - 'beach', - 'cloud', - 'dance', - 'earth', - 'field', - 'green', - 'happy', - 'light', - 'mouse', - 'night', - 'party', - 'quick', - 'smile', - 'trust', - 'voice', - ]; - - static generatePassword(options = {}) { - const { - length = 12, - includeLowercase = true, - includeUppercase = true, - includeNumbers = true, - includeSymbols = false, - excludeAmbiguous = false, - } = options; - - let charset = ''; - - // Build character set based on options - if (includeLowercase) charset += this.LOWERCASE; - if (includeUppercase) charset += this.UPPERCASE; - if (includeNumbers) charset += this.NUMBERS; - if (includeSymbols) charset += this.SYMBOLS; - - if (!charset) { - throw new Error('At least one character set must be selected'); - } - - // Remove ambiguous characters if requested - if (excludeAmbiguous) { - for (const char of this.AMBIGUOUS) { - charset = charset.replace(new RegExp(char, 'g'), ''); - } - } - - // Generate password - let password = ''; - for (let i = 0; i < length; i++) { - const randomIndex = Math.floor(Math.random() * charset.length); - password += charset[randomIndex]; - } - - return password; - } - - static generateMultiplePasswords(count, options = {}) { - const passwords = []; - for (let i = 0; i < count; i++) { - passwords.push(this.generatePassword(options)); - } - return passwords; - } - - static calculatePasswordStrength(password) { - if (!password) { - return { - score: 0, - strength: 'Very Weak', - feedback: ['Password is required'], - entropy: 0, - }; - } - - let score = 0; - let feedback = []; - - // Length check - if (password.length >= 12) score += 2; - else if (password.length >= 8) score += 1; - else feedback.push('Use at least 8 characters'); - - // Character variety checks - if (/[a-z]/.test(password)) score += 1; - else feedback.push('Add lowercase letters'); - - if (/[A-Z]/.test(password)) score += 1; - else feedback.push('Add uppercase letters'); - - if (/[0-9]/.test(password)) score += 1; - else feedback.push('Add numbers'); - - if (/[^a-zA-Z0-9]/.test(password)) score += 1; - else feedback.push('Add symbols'); - - // Common pattern penalties - if (/(.)\1{2,}/.test(password)) { - score -= 1; - feedback.push('Avoid repeated characters'); - } - - if ( - /123|234|345|456|567|678|789|abc|bcd|cde|def/.test(password.toLowerCase()) - ) { - score -= 1; - feedback.push('Avoid sequential characters'); - } - - // Calculate entropy - let charset = 0; - if (/[a-z]/.test(password)) charset += 26; - if (/[A-Z]/.test(password)) charset += 26; - if (/[0-9]/.test(password)) charset += 10; - if (/[^a-zA-Z0-9]/.test(password)) charset += 32; - - const entropy = Math.log2(Math.pow(charset, password.length)); - - // Determine strength label - let strength; - if (score < 1) strength = 'Very Weak'; - else if (score < 2) strength = 'Weak'; - else if (score < 4) strength = 'Fair'; - else if (score < 6) strength = 'Good'; - else strength = 'Strong'; - - return { - score: Math.max(0, score), - strength, - feedback, - entropy: Math.round(entropy), - }; - } - - static generatePassphrase(options = {}) { - const { - wordCount = 4, - separator = '-', - capitalize = false, - includeNumbers = false, - } = options; - - const selectedWords = []; - - // Select random words - for (let i = 0; i < wordCount; i++) { - const randomIndex = Math.floor(Math.random() * this.WORDS.length); - let word = this.WORDS[randomIndex]; - - if (capitalize) { - word = word.charAt(0).toUpperCase() + word.slice(1); - } - - selectedWords.push(word); - } - - let passphrase = selectedWords.join(separator); - - // Add numbers if requested - if (includeNumbers) { - const randomNum = Math.floor(Math.random() * 1000); - passphrase += randomNum; - } - - return passphrase; - } -} - -module.exports = PasswordUtils; diff --git a/src/utils/unit-converter-utils.js b/src/utils/unit-converter-utils.js deleted file mode 100644 index 0b3f2ca3..00000000 --- a/src/utils/unit-converter-utils.js +++ /dev/null @@ -1,258 +0,0 @@ -/** - * Unit conversion utilities with comprehensive conversion support - * Supports Length, Weight, Temperature, and Currency conversions - */ - -class UnitConverterUtils { - // Length conversions (all to meters as base) - static LENGTH_CONVERSIONS = { - mm: 0.001, - cm: 0.01, - m: 1, - km: 1000, - in: 0.0254, - ft: 0.3048, - yd: 0.9144, - mi: 1609.344, - }; - - // Weight conversions (all to grams as base) - static WEIGHT_CONVERSIONS = { - mg: 0.001, - g: 1, - kg: 1000, - oz: 28.3495, - lb: 453.592, - st: 6350.29, - t: 1000000, - }; - - // Currency rates (static rates for offline use - USD as base) - static CURRENCY_RATES = { - USD: 1, - EUR: 0.85, - GBP: 0.73, - JPY: 110, - CAD: 1.25, - AUD: 1.35, - }; - - static UNIT_CATEGORIES = { - length: { - name: 'Length', - units: { - mm: 'Millimeters', - cm: 'Centimeters', - m: 'Meters', - km: 'Kilometers', - in: 'Inches', - ft: 'Feet', - yd: 'Yards', - mi: 'Miles', - }, - }, - weight: { - name: 'Weight', - units: { - mg: 'Milligrams', - g: 'Grams', - kg: 'Kilograms', - oz: 'Ounces', - lb: 'Pounds', - st: 'Stones', - t: 'Metric Tons', - }, - }, - temperature: { - name: 'Temperature', - units: { - C: 'Celsius', - F: 'Fahrenheit', - K: 'Kelvin', - }, - }, - currency: { - name: 'Currency', - units: { - USD: 'US Dollar', - EUR: 'Euro', - GBP: 'British Pound', - JPY: 'Japanese Yen', - CAD: 'Canadian Dollar', - AUD: 'Australian Dollar', - }, - }, - }; - - /** - * Convert length units - */ - static convertLength(value, fromUnit, toUnit) { - if ( - !this.LENGTH_CONVERSIONS[fromUnit] || - !this.LENGTH_CONVERSIONS[toUnit] - ) { - throw new Error('Invalid length unit'); - } - - // Convert to base unit (meters) then to target unit - const meters = value * this.LENGTH_CONVERSIONS[fromUnit]; - return meters / this.LENGTH_CONVERSIONS[toUnit]; - } - - /** - * Convert weight units - */ - static convertWeight(value, fromUnit, toUnit) { - if ( - !this.WEIGHT_CONVERSIONS[fromUnit] || - !this.WEIGHT_CONVERSIONS[toUnit] - ) { - throw new Error('Invalid weight unit'); - } - - // Convert to base unit (grams) then to target unit - const grams = value * this.WEIGHT_CONVERSIONS[fromUnit]; - return grams / this.WEIGHT_CONVERSIONS[toUnit]; - } - - /** - * Convert temperature units - */ - static convertTemperature(value, fromUnit, toUnit) { - if (fromUnit === toUnit) return value; - - let celsius; - - // Convert to Celsius first - switch (fromUnit) { - case 'C': - celsius = value; - break; - case 'F': - celsius = ((value - 32) * 5) / 9; - break; - case 'K': - if (value < 0) { - throw new Error('Kelvin cannot be negative'); - } - celsius = value - 273.15; - break; - default: - throw new Error('Invalid temperature unit'); - } - - // Convert from Celsius to target unit - switch (toUnit) { - case 'C': - return celsius; - case 'F': - return (celsius * 9) / 5 + 32; - case 'K': - const kelvin = celsius + 273.15; - if (kelvin < 0) { - throw new Error('Temperature below absolute zero'); - } - return kelvin; - default: - throw new Error('Invalid temperature unit'); - } - } - - /** - * Convert currency units - */ - static convertCurrency(value, fromUnit, toUnit) { - if (!this.CURRENCY_RATES[fromUnit] || !this.CURRENCY_RATES[toUnit]) { - throw new Error('Invalid currency unit'); - } - - // Convert to base currency (USD) then to target currency - const usd = value / this.CURRENCY_RATES[fromUnit]; - return usd * this.CURRENCY_RATES[toUnit]; - } - - /** - * Main conversion method that routes to appropriate converter - */ - static convert(value, category, fromUnit, toUnit) { - // Validate input - if (value === '' || value === null || value === undefined) { - throw new Error('Please enter a value to convert'); - } - - const numValue = parseFloat(value); - if (isNaN(numValue)) { - throw new Error('Please enter a valid number'); - } - - if (!isFinite(numValue)) { - throw new Error('Number is too large'); - } - - // Check for negative values where inappropriate - if (category === 'weight' && numValue < 0) { - throw new Error('Weight cannot be negative'); - } - - if (category === 'length' && numValue < 0) { - throw new Error('Length cannot be negative'); - } - - let result; - switch (category) { - case 'length': - result = this.convertLength(numValue, fromUnit, toUnit); - break; - case 'weight': - result = this.convertWeight(numValue, fromUnit, toUnit); - break; - case 'temperature': - result = this.convertTemperature(numValue, fromUnit, toUnit); - break; - case 'currency': - result = this.convertCurrency(numValue, fromUnit, toUnit); - break; - default: - throw new Error('Invalid conversion category'); - } - - // Round to reasonable precision - if (category === 'currency') { - return Math.round(result * 100) / 100; // 2 decimal places for currency - } else { - return Math.round(result * 1000000) / 1000000; // 6 decimal places for others - } - } - - /** - * Get units for a category - */ - static getUnitsForCategory(category) { - return this.UNIT_CATEGORIES[category]?.units || {}; - } - - /** - * Get all categories - */ - static getCategories() { - return Object.keys(this.UNIT_CATEGORIES); - } - - /** - * Get category display name - */ - static getCategoryName(category) { - return this.UNIT_CATEGORIES[category]?.name || category; - } -} - -// Export for Node.js testing -if (typeof module !== 'undefined' && module.exports) { - module.exports = UnitConverterUtils; -} - -// Export for browser -if (typeof window !== 'undefined') { - window.UnitConverterUtils = UnitConverterUtils; -} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 00000000..5dc5008e --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1,9 @@ +/// + +interface ImportMetaEnv { + readonly VITE_APP_TITLE: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/tailwind.config.ts b/tailwind.config.ts new file mode 100644 index 00000000..baf4c920 --- /dev/null +++ b/tailwind.config.ts @@ -0,0 +1,87 @@ +import type { Config } from "tailwindcss"; + +export default { + darkMode: ["class"], + content: ["./pages/**/*.{ts,tsx}", "./components/**/*.{ts,tsx}", "./app/**/*.{ts,tsx}", "./src/**/*.{ts,tsx}"], + prefix: "", + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, + extend: { + fontFamily: { + sans: ['Inter', 'system-ui', 'sans-serif'], + mono: ['JetBrains Mono', 'monospace'], + }, + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + sidebar: { + DEFAULT: "hsl(var(--sidebar-background))", + foreground: "hsl(var(--sidebar-foreground))", + primary: "hsl(var(--sidebar-primary))", + "primary-foreground": "hsl(var(--sidebar-primary-foreground))", + accent: "hsl(var(--sidebar-accent))", + "accent-foreground": "hsl(var(--sidebar-accent-foreground))", + border: "hsl(var(--sidebar-border))", + ring: "hsl(var(--sidebar-ring))", + }, + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: "0" }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + }, + }, + }, + plugins: [require("tailwindcss-animate")], +} satisfies Config; diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 00000000..3add82f5 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "types": ["vitest/globals"], + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": false, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitAny": false, + "noFallthroughCasesInSwitch": false, + + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..25187730 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,16 @@ +{ + "files": [], + "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + }, + "noImplicitAny": false, + "noUnusedParameters": false, + "skipLibCheck": true, + "allowJs": true, + "noUnusedLocals": false, + "strictNullChecks": false + } +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 00000000..3133162c --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 00000000..c6578542 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,25 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react-swc"; +import path from "path"; + +// https://vitejs.dev/config/ +export default defineConfig(() => ({ + server: { + host: "::", + port: 8080, + hmr: { + overlay: false, + }, + }, + plugins: [react()], + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, + base: "./", + build: { + outDir: "dist", + emptyOutDir: true, + }, +})); diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 00000000..fefe05a9 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from "vitest/config"; +import react from "@vitejs/plugin-react-swc"; +import path from "path"; + +export default defineConfig({ + plugins: [react()], + test: { + environment: "jsdom", + globals: true, + setupFiles: ["./src/test/setup.ts"], + include: ["src/**/*.{test,spec}.{ts,tsx}"], + }, + resolve: { + alias: { "@": path.resolve(__dirname, "./src") }, + }, +});