From deb56d9a23da6d95545c0a86fc9080a04d64b4a2 Mon Sep 17 00:00:00 2001 From: Tomas Dvorak Date: Wed, 16 Sep 2026 19:59:53 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20phase=205=20distribution=20=E2=80=94=20?= =?UTF-8?q?tauri=20shell,=20pwa,=20desktop=20release=20artifacts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - apps/desktop: Tauri 2 thin shell; connect screen stores the deployment URL, webview renders the remote console, tray with Show/Change Server/ Quit, close-to-tray, single-instance - frontend: vite-plugin-pwa generates manifest + Workbox SW (shell precache, /api /auth /mailpit NetworkOnly), install banner on beforeinstallprompt, rasterized PWA icons - release.yml: desktop bundle matrix (linux/macos/windows) attached to GitHub Releases - workspace 0.5.0; Dockerfiles copy the desktop workspace manifest Authored By: TDvorak --- .github/workflows/release.yml | 38 +- .gitignore | 6 + CHANGELOG.md | 7 + README.md | 15 +- ROADMAP.md | 27 +- apps/auth/Dockerfile | 1 + apps/auth/package.json | 2 +- apps/cli/package.json | 4 +- apps/desktop/README.md | 31 + apps/desktop/package.json | 15 + apps/desktop/src-tauri/Cargo.lock | 5071 +++++++++++++++++ apps/desktop/src-tauri/Cargo.toml | 19 + apps/desktop/src-tauri/build.rs | 3 + .../src-tauri/capabilities/default.json | 7 + apps/desktop/src-tauri/icons/128x128.png | Bin 0 -> 3950 bytes apps/desktop/src-tauri/icons/128x128@2x.png | Bin 0 -> 9569 bytes apps/desktop/src-tauri/icons/32x32.png | Bin 0 -> 1042 bytes apps/desktop/src-tauri/icons/64x64.png | Bin 0 -> 1822 bytes .../src-tauri/icons/Square107x107Logo.png | Bin 0 -> 3807 bytes .../src-tauri/icons/Square142x142Logo.png | Bin 0 -> 4982 bytes .../src-tauri/icons/Square150x150Logo.png | Bin 0 -> 5337 bytes .../src-tauri/icons/Square284x284Logo.png | Bin 0 -> 10931 bytes .../src-tauri/icons/Square30x30Logo.png | Bin 0 -> 961 bytes .../src-tauri/icons/Square310x310Logo.png | Bin 0 -> 11928 bytes .../src-tauri/icons/Square44x44Logo.png | Bin 0 -> 1395 bytes .../src-tauri/icons/Square71x71Logo.png | Bin 0 -> 2308 bytes .../src-tauri/icons/Square89x89Logo.png | Bin 0 -> 2882 bytes apps/desktop/src-tauri/icons/StoreLogo.png | Bin 0 -> 1670 bytes apps/desktop/src-tauri/icons/icon.icns | Bin 0 -> 98183 bytes apps/desktop/src-tauri/icons/icon.ico | Bin 0 -> 16700 bytes apps/desktop/src-tauri/icons/icon.png | Bin 0 -> 21017 bytes apps/desktop/src-tauri/src/lib.rs | 125 + apps/desktop/src-tauri/src/main.rs | 5 + apps/desktop/src-tauri/tauri.conf.json | 40 + apps/desktop/ui/icon.svg | 8 + apps/desktop/ui/index.html | 84 + apps/desktop/ui/style.css | 101 + apps/frontend/Dockerfile | 1 + apps/frontend/index.html | 5 + apps/frontend/package.json | 7 +- apps/frontend/public/apple-touch-icon.png | Bin 0 -> 4054 bytes apps/frontend/public/icon-maskable.svg | 8 + apps/frontend/public/maskable-512x512.png | Bin 0 -> 6313 bytes apps/frontend/public/pwa-192x192.png | Bin 0 -> 4264 bytes apps/frontend/public/pwa-512x512.png | Bin 0 -> 12548 bytes apps/frontend/src/App.tsx | 2 + .../src/components/PwaInstallBanner.tsx | 58 + apps/frontend/src/components/index.ts | 1 + apps/frontend/vite.config.ts | 51 +- apps/mcp/package.json | 4 +- package-lock.json | 4058 ++++++++++++- package.json | 2 +- packages/api-client/package.json | 2 +- packages/client/package.json | 2 +- packages/shared-types/package.json | 2 +- 55 files changed, 9657 insertions(+), 155 deletions(-) create mode 100644 apps/desktop/README.md create mode 100644 apps/desktop/package.json create mode 100644 apps/desktop/src-tauri/Cargo.lock create mode 100644 apps/desktop/src-tauri/Cargo.toml create mode 100644 apps/desktop/src-tauri/build.rs create mode 100644 apps/desktop/src-tauri/capabilities/default.json create mode 100644 apps/desktop/src-tauri/icons/128x128.png create mode 100644 apps/desktop/src-tauri/icons/128x128@2x.png create mode 100644 apps/desktop/src-tauri/icons/32x32.png create mode 100644 apps/desktop/src-tauri/icons/64x64.png create mode 100644 apps/desktop/src-tauri/icons/Square107x107Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square142x142Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square150x150Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square284x284Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square30x30Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square310x310Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square44x44Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square71x71Logo.png create mode 100644 apps/desktop/src-tauri/icons/Square89x89Logo.png create mode 100644 apps/desktop/src-tauri/icons/StoreLogo.png create mode 100644 apps/desktop/src-tauri/icons/icon.icns create mode 100644 apps/desktop/src-tauri/icons/icon.ico create mode 100644 apps/desktop/src-tauri/icons/icon.png create mode 100644 apps/desktop/src-tauri/src/lib.rs create mode 100644 apps/desktop/src-tauri/src/main.rs create mode 100644 apps/desktop/src-tauri/tauri.conf.json create mode 100644 apps/desktop/ui/icon.svg create mode 100644 apps/desktop/ui/index.html create mode 100644 apps/desktop/ui/style.css create mode 100644 apps/frontend/public/apple-touch-icon.png create mode 100644 apps/frontend/public/icon-maskable.svg create mode 100644 apps/frontend/public/maskable-512x512.png create mode 100644 apps/frontend/public/pwa-192x192.png create mode 100644 apps/frontend/public/pwa-512x512.png create mode 100644 apps/frontend/src/components/PwaInstallBanner.tsx diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ad735a2..54aed78 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -84,6 +84,42 @@ jobs: path: dist-release/ if-no-files-found: error + desktop: + name: Desktop bundle (${{ matrix.name }}) + needs: verify + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - { os: ubuntu-22.04, name: linux } + - { os: macos-latest, name: macos } + - { os: windows-latest, name: windows } + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "22" + - run: npm ci + - name: Install Linux webview dependencies + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev patchelf + - name: Build Tauri bundles + run: npm run bundle --workspace @primora/desktop + - uses: actions/upload-artifact@v4 + with: + name: desktop-${{ matrix.name }} + path: | + apps/desktop/src-tauri/target/release/bundle/**/*.AppImage + apps/desktop/src-tauri/target/release/bundle/**/*.deb + apps/desktop/src-tauri/target/release/bundle/**/*.rpm + apps/desktop/src-tauri/target/release/bundle/**/*.dmg + apps/desktop/src-tauri/target/release/bundle/**/*.msi + apps/desktop/src-tauri/target/release/bundle/**/*.exe + if-no-files-found: error + npm-packages: name: Pack npm tarballs needs: verify @@ -108,7 +144,7 @@ jobs: release: name: GitHub Release - needs: [images, cli-binaries, npm-packages] + needs: [images, cli-binaries, desktop, npm-packages] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/.gitignore b/.gitignore index d59ebe4..4b81b82 100644 --- a/.gitignore +++ b/.gitignore @@ -18,8 +18,14 @@ bin # Build artifacts apps/frontend/dist +apps/frontend/dev-dist apps/auth/dist packages/api-client/generated +dist-release + +# Rust / Tauri +apps/desktop/src-tauri/target +apps/desktop/src-tauri/gen/schemas # Runtime data infra/data diff --git a/CHANGELOG.md b/CHANGELOG.md index 130df1e..03fc17b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,15 @@ All notable changes to Primora. Format follows [Keep a Changelog](https://keepac ## [Unreleased] +## [0.5.0] - 2026-09-16 + ### Added +- **Desktop app** (`apps/desktop`) — Tauri 2 thin shell for Linux/Windows/macOS. First run shows a connect screen asking for the deployment URL (validated, stored in `~/.config/dev.tdvorak.primora/config.json`); the webview then renders the same SolidJS bundle the server serves. System-tray icon (Show / Change Server / Quit), close-to-tray, single-instance. No embedded backend or database — the self-hosted model is preserved. +- **PWA support** — `vite-plugin-pwa` generates a Workbox service worker and `manifest.webmanifest` in every frontend build. The app shell (JS/CSS/icons/index.html) is precached; `/api`, `/auth`, and `/mailpit` are `NetworkOnly` and excluded from the SPA navigation fallback; Google Fonts assets are cached for a year. Installability icons (192/512/maskable + apple-touch-icon) rasterized from the existing SVG mark. +- **Install prompt** — `PwaInstallBanner` captures `beforeinstallprompt` and offers an in-app install action inside the shell; dismissal persists in `localStorage`. +- **Desktop release artifacts** — `release.yml` gains a `desktop` job (ubuntu/macos/windows matrix) producing AppImage/deb/rpm, dmg, and msi/nsis bundles, attached to the GitHub Release alongside the existing images and CLI binaries. + - **Connector framework** — `core.integrations` (migration 00005) stores per-project external services with type, base URL, `has_credentials` flag, health status/`last_health_at`. Credentials are AES-256-GCM encrypted at rest (`PRIMORA_ENCRYPTION_KEY`, hex/base64, 32 bytes; dev fallback outside production) and are never serialized to the client. Endpoints under `/projects/:id/integrations`: list, create, delete, `POST …/test` (5s health check against the base URL with stored credentials). - **Rybbit connector** — `GET …/integrations/:id/analytics` proxies a self-hosted Rybbit instance server-side (`/api/organizations` site discovery, `/api/sites/:site/overview`, time series, top pages/referrers) and returns a normalized shape. The API key never leaves the server; read-only, no tracking proxy. Site selection via `?site=` or the integration's configured `site_id`. - **Outbound webhooks** — `core.webhooks` + `core.webhook_deliveries`. Endpoints: list/create/update/delete under `/projects/:id/webhooks`, `GET …/deliveries`, `POST …/test`. Events: `issue.created` (new error fingerprint on ingest), `deploy.marker` (`POST …/deploy-markers`, records version/ref/environment/note in the audit log), `webhook.test`. HTTPS required for public targets; plain HTTP allowed for private/self-hosted sinks. Deliveries are signed `X-Primora-Signature: sha256=` and retried by an in-process dispatcher (buffered queue, 3 attempts, quadratic backoff, 10s timeout, crash recovery on boot). Generated secrets are returned exactly once. diff --git a/README.md b/README.md index 934bb27..161e83b 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Browser ──▶ Nginx ──▶ Frontend (SolidJS + Vite) - **Auth** — email/password plus optional GitHub, Google, Discord, and Microsoft OAuth via Better Auth. JWTs minted by the auth service are verified by the Go API against JWKS. - **Storage** — S3-style buckets and objects backed by your local filesystem, with public/private visibility and downloadable URLs. - **Collections** — schema-flexible JSON documents stored in Postgres JSONB. -- **API keys** — `pk_live_`/`pk_test_` credentials with prefixes; secrets are shown once. +- **API keys** — `prm__` credentials; secrets are shown once. - **Audit log** — every mutating request recorded with actor, resource, request ID, and timestamp; CSV/JSON export from the dashboard. - **Generated client** — the TypeScript client is generated from `apps/backend/openapi/openapi.yaml`, so the API contract is the source of truth. - **Demo mode** — a fully client-side workspace (`?demo=true` or `VITE_DEMO_MODE=true`) for trying the UI without a backend. @@ -77,6 +77,17 @@ node apps/cli/dist/cli.js login # or: npx primora login once published Supports session sign-in (`primora login`) and API-key mode (`primora login --api-key prm_…` or `PRIMORA_API_KEY`). Context lives in `~/.config/primora/config.json`; `primora use` picks org + project interactively. Commands: `orgs`, `projects`, `buckets`, `objects` (list/upload/download/rm), `keys`, `audit list --follow`. Every command accepts `--json`. +## Desktop & phone + +- **Desktop** — `apps/desktop` is a Tauri 2 shell (Linux/Windows/macOS). First + run asks for your deployment URL, then renders the same dashboard in a + webview with a system-tray presence. Nothing is bundled; your server does the + work. See [apps/desktop/README.md](apps/desktop/README.md). +- **Phone / PWA** — the dashboard ships a web manifest and service worker. + Open your deployment in a mobile browser and "Add to Home Screen"; the shell + is precached, API traffic always goes to the network. Chromium desktop + browsers get an in-app install banner. + ## Quality gate ```bash @@ -94,6 +105,8 @@ apps/ auth/ Better Auth on Hono (sessions, JWT, OAuth, mail) frontend/ SolidJS + Tailwind dashboard cli/ `primora` CLI — login, context, projects, buckets, objects, keys, audit + mcp/ `@primora/mcp` — MCP stdio server exposing `primora_*` tools + desktop/ Tauri 2 shell — connects to a deployment URL, tray presence packages/ api-client/ OpenAPI-generated TypeScript client (do not hand-edit) shared-types/ diff --git a/ROADMAP.md b/ROADMAP.md index 1f5472a..1145be2 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -99,18 +99,23 @@ IMS (`~/Desktop/PROG+HTML/IMS`) is discontinued and folded in — same stack (`X-Primora-Signature`), in-process dispatcher with backoff retries, HTTPS for public targets (HTTP allowed for private/self-hosted sinks). -## Phase 5 — Distribution +## Phase 5 — Distribution ✅ -- **Desktop app** — Tauri 2 shell (Linux/Windows/macOS). Thin client: asks for - the deployment URL on first run, renders the same SolidJS bundle, keeps a - system-tray presence. No embedded stack — self-hosted model preserved. -- **Phone** — PWA (manifest, service worker, install prompt) first; native - shells via Capacitor only if push notifications become a requirement. -- **Versioning** — `v0.x` minor-per-phase until API surface stabilizes, - `v1.0.0` when Phase 3 lands. Every release: GitHub Release notes + - tagged images + CLI binaries. -- **Docs site** — README stays canonical; a docs/ folder or site once the API - settles. +- ~~**Desktop app**~~ — `apps/desktop`, a Tauri 2 shell (Linux/Windows/macOS). + Thin client: asks for the deployment URL on first run, renders the same + SolidJS bundle, keeps a system-tray presence (Show / Change Server / Quit, + close-to-tray, single-instance). No embedded stack — self-hosted model + preserved. +- ~~**Phone**~~ — PWA shipped: `manifest.webmanifest` + Workbox service worker + precache the shell (`/api`, `/auth`, `/mailpit` stay `NetworkOnly`), plus an + in-app install banner on `beforeinstallprompt`. Native shells via Capacitor + remain deferred until push notifications are a real requirement. +- ~~**Versioning**~~ — `v0.x` minor-per-phase until the API surface stabilizes. + Release pipeline (Phase 1) now also ships desktop bundles: tag → GitHub + Release notes + ghcr.io images + CLI/MCP binaries + desktop installers. +- **Docs site** — deferred on purpose. README stays canonical; the OpenAPI + contract is the machine-readable source. The API still changes every phase — + a docs site now would document a moving target. Revisit when `v1.0.0` lands. --- diff --git a/apps/auth/Dockerfile b/apps/auth/Dockerfile index 26ad03b..daa845e 100644 --- a/apps/auth/Dockerfile +++ b/apps/auth/Dockerfile @@ -4,6 +4,7 @@ WORKDIR /workspace COPY package.json package-lock.json tsconfig.base.json ./ COPY apps/auth/package.json ./apps/auth/package.json COPY apps/cli/package.json ./apps/cli/package.json +COPY apps/desktop/package.json ./apps/desktop/package.json COPY apps/frontend/package.json ./apps/frontend/package.json COPY apps/mcp/package.json ./apps/mcp/package.json COPY packages/api-client/package.json ./packages/api-client/package.json diff --git a/apps/auth/package.json b/apps/auth/package.json index 2e60007..c7e1057 100644 --- a/apps/auth/package.json +++ b/apps/auth/package.json @@ -1,6 +1,6 @@ { "name": "@primora/auth", - "version": "0.4.0", + "version": "0.5.0", "private": true, "type": "module", "scripts": { diff --git a/apps/cli/package.json b/apps/cli/package.json index f4462db..ab34e7e 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -1,6 +1,6 @@ { "name": "@primora/cli", - "version": "0.4.0", + "version": "0.5.0", "description": "Primora command-line client", "type": "module", "bin": { @@ -23,7 +23,7 @@ "picocolors": "^1.1.1" }, "devDependencies": { - "@primora/api-client": "0.4.0", + "@primora/api-client": "0.5.0", "@types/node": "^24.0.0", "esbuild": "^0.27.4", "typescript": "^5.9.2" diff --git a/apps/desktop/README.md b/apps/desktop/README.md new file mode 100644 index 0000000..240afd4 --- /dev/null +++ b/apps/desktop/README.md @@ -0,0 +1,31 @@ +# @primora/desktop + +Tauri 2 shell around a self-hosted Primora deployment. On first run it asks for +the deployment URL; after that the webview renders the same SolidJS console the +server serves. Nothing is embedded — no backend, no database. The self-hosted +model is preserved. + +## Prerequisites + +- Rust (rustup) and Node.js. +- Linux webview deps: + `sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev` + +## Run + +```bash +npm run dev --workspace @primora/desktop # dev window (debug build) +npm run bundle --workspace @primora/desktop # release bundles → src-tauri/target/release/bundle +``` + +## Notes + +- Config lives at `~/.config/dev.tdvorak.primora/config.json` — one field, `server_url`. +- System tray: **Show Primora**, **Change Server…** (clears the URL, back to the + connect screen), **Quit**. Closing the window hides to the tray; a second + launch focuses the existing window (single-instance). +- The connect screen only checks that the host answers; if the URL turns out not + to be a Primora deployment, use the tray's Change Server. +- macOS blocks plain-HTTP loads to non-localhost hosts (ATS). Use HTTPS, or + `http://localhost` for a local deployment. +- Deep links / push notifications: deliberately omitted — nothing needs them yet. diff --git a/apps/desktop/package.json b/apps/desktop/package.json new file mode 100644 index 0000000..80bd8df --- /dev/null +++ b/apps/desktop/package.json @@ -0,0 +1,15 @@ +{ + "name": "@primora/desktop", + "version": "0.5.0", + "private": true, + "description": "Primora desktop shell — thin Tauri client for a self-hosted deployment", + "scripts": { + "tauri": "tauri", + "dev": "tauri dev", + "bundle": "tauri build", + "check": "cargo check --manifest-path src-tauri/Cargo.toml" + }, + "devDependencies": { + "@tauri-apps/cli": "^2.11.4" + } +} diff --git a/apps/desktop/src-tauri/Cargo.lock b/apps/desktop/src-tauri/Cargo.lock new file mode 100644 index 0000000..7ae49ad --- /dev/null +++ b/apps/desktop/src-tauri/Cargo.lock @@ -0,0 +1,5071 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aho-corasick" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android_system_properties" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-lock" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "async-signal" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "atk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" +dependencies = [ + "serde_core", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "blocking" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a70e4329df6cb94385eed412ec92375c3cdd8a6e502493d1229b6414e4036dfa" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "brotli" +version = "8.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.13.2", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror 1.0.69", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbbad30e4b4c14a39e3cc8aed085a12a327257c316619c93581e017bc52be591" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.20", +] + +[[package]] +name = "cargo_toml" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" +dependencies = [ + "serde", + "toml 0.9.12+spec-1.1.0", +] + +[[package]] +name = "cc" +version = "1.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "chrono" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link 0.2.1", +] + +[[package]] +name = "combine" +version = "4.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "cookie" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a373e3602691c3cdea496d2f0ee5935151e6168fe87739483c463db1b2f2f87" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" +dependencies = [ + "bitflags 2.13.2", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.13.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98b0cc327b5bc766e7fda9c9260cc0fa81b43a8e240440422dff70788e3f9ef1" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "ctor" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "352d39c2f7bef1d6ad73db6f5160efcaed66d94ef8c6c573a8410c00bf909a98" +dependencies = [ + "ctor-proc-macro", + "dtor", +] + +[[package]] +name = "ctor-proc-macro" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1" + +[[package]] +name = "darling" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed17f5901b6630b993ca003def43f2f8ef4014fc13b047b57aad617ff32bc2ec" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6837e2cf7485aaae18f86181d2f0e9a7ed297a025e220aeabf63fdebd3a2ddff" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 3.0.5", +] + +[[package]] +name = "darling_macro" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785" +dependencies = [ + "darling_core", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "dbus" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab69f03cc8c4340c9c8e315114e1658e6775a9b16a04357973aa21cec22b32e" +dependencies = [ + "libc", + "libdbus-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "defmt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8" +dependencies = [ + "defmt-parser", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror 2.0.20", +] + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "serde_core", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.119", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags 2.13.2", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "dlopen2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "dom_query" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89" +dependencies = [ + "bit-set", + "cssparser", + "foldhash", + "html5ever", + "precomputed-hash", + "selectors", + "tendril", +] + +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +dependencies = [ + "serde", +] + +[[package]] +name = "dtoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dtor" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1057d6c64987086ff8ed0fd3fbf377a6b7d205cc7715868cd401705f715cbe4" +dependencies = [ + "dtor-proc-macro", +] + +[[package]] +name = "dtor-proc-macro" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "embed-resource" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbfdaacccebec3b28e4866b8973543c7647797db5ada1bdab552e48fe665fbbd" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 1.1.6+spec-1.1.0", + "vswhom", + "winreg", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "endi" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" + +[[package]] +name = "enumflags2" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "erased-serde" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "event-listener" +version = "5.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" +dependencies = [ + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" + +[[package]] +name = "flate2" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" +dependencies = [ + "crc32fast", + "miniz_oxide 0.9.1", + "zlib-rs", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-executor" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" + +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "futures-sink" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "gdk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", +] + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.13.2", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2" +dependencies = [ + "log", + "markup5ever", +] + +[[package]] +name = "http" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b501faa50e7a26c3d3560ca625132f4078a17771f4810baf70475ae48cbe43" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e795dff5605e0f04bff85ca41b51a96b83e80b281e96231bcaaf1ac35103371" +dependencies = [ + "byteorder", + "png 0.17.16", +] + +[[package]] +name = "icu_collections" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" + +[[package]] +name = "icu_properties" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" + +[[package]] +name = "icu_provider" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "image" +version = "0.25.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" +dependencies = [ + "bytemuck", + "byteorder-lite", + "moxcms", + "num-traits", + "png 0.18.1", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[package]] +name = "infer" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" +dependencies = [ + "cfb", +] + +[[package]] +name = "ipnet" +version = "2.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jiff" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1baf72f08796de0260609515130699b890ac25f30e610ad894bc5856cafdb" +dependencies = [ + "defmt", + "jiff-core", + "jiff-static", + "jiff-tzdb-platform", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", + "windows-link 0.2.1", +] + +[[package]] +name = "jiff-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e52fe76043ccecc9005d2305ebaadf7d7fc0cc89ca6baa10a94d6bc68c7128c" +dependencies = [ + "defmt", + "log", +] + +[[package]] +name = "jiff-static" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "378268a1116ad67ae6228701118ac9f491d78fda38a40a1f1a9e1348de6f7212" +dependencies = [ + "jiff-core", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "jiff-tzdb" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "142bd39932ad231f10513df9ab62661fead8719872150b7ad02a2df79f4e141e" + +[[package]] +name = "jiff-tzdb-platform" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" +dependencies = [ + "jiff-tzdb", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "js-sys" +version = "0.3.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" +dependencies = [ + "jsonptr", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "jsonptr" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.13.2", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading", + "once_cell", +] + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "libdbus-sys" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "328c4789d42200f1eeec05bd86c9c13c7f091d2ba9a6ea35acdf51f31bc0f043" +dependencies = [ + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libredox" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6480ccc157a1389bb2e4891b24751b0f798ba640d22386f23143fbcc89da195a" +dependencies = [ + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" + +[[package]] +name = "markup5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "miniz_oxide" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "moxcms" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" +dependencies = [ + "num-traits", + "pxfm", +] + +[[package]] +name = "muda" +version = "0.19.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd04e60bc0b07438a6771710ee1698f98f6ebbc7f89b61264af1563b8aeb878" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.20", + "windows-sys 0.61.2", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.13.2", + "jni-sys 0.3.1", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys 0.3.1", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", + "objc2-exception-helper", +] + +[[package]] +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" +dependencies = [ + "bitflags 2.13.2", + "block2", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" +dependencies = [ + "bitflags 2.13.2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.13.2", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.13.2", + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", +] + +[[package]] +name = "objc2-core-image" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-location" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +dependencies = [ + "bitflags 2.13.2", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-exception-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" +dependencies = [ + "cc", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.13.2", + "block2", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags 2.13.2", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags 2.13.2", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" +dependencies = [ + "bitflags 2.13.2", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-location", + "objc2-core-text", + "objc2-foundation", + "objc2-quartz-core", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-web-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" +dependencies = [ + "bitflags 2.13.2", + "block2", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros", + "phf_shared", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "piper" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" + +[[package]] +name = "plist" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896bade328c13f7042a297ea5ac5b0951f6cf989dea5f32c2fd98da398195cb" +dependencies = [ + "base64 0.23.1", + "indexmap 2.14.2", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide 0.8.9", +] + +[[package]] +name = "png" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" +dependencies = [ + "bitflags 2.13.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide 0.8.9", +] + +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "portable-atomic" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" + +[[package]] +name = "portable-atomic-util" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10ab3eb7f3becc3a1cbc4f2c6f20267996cfc1a6467a873763411b136a122715" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "potential_utf" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "primora-desktop" +version = "0.5.0" +dependencies = [ + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-single-instance", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit 0.25.15+spec-1.1.0", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pxfm" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" + +[[package]] +name = "quick-xml" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b1177fdf999d2321d3fb46ff47159d9c1fb9ad66a4879f8c50a0b504615e9b" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.13.2", +] + +[[package]] +name = "redox_users" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60dc65c0ff1a7ae1294b0c67b9f14baf70b644404010370171787bfac1038fc0" +dependencies = [ + "libredox", + "thiserror 2.0.20", +] + +[[package]] +name = "ref-cast" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e440fb4e4b4147295338efb76001ab9e4efc0e5839df2c47fc5ac2381d365c3" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecd8964f8453721699a1ed72037b0db49ce2f5a5138486ee89bed6f67cdf3a" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "reqwest" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16a1cfa75cc186dd73d5818e510e042e40927bccc9c236b061cea97e1eb08029" +dependencies = [ + "base64 0.23.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "sync_wrapper", + "tokio", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", +] + +[[package]] +name = "rustc-hash" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags 2.13.2", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", + "uuid", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.119", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "selectors" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" +dependencies = [ + "bitflags 2.13.2", + "cssparser", + "derive_more", + "log", + "new_debug_unreachable", + "phf", + "phf_codegen", + "precomputed-hash", + "rustc-hash", + "servo_arc", + "smallvec", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-untagged" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" +dependencies = [ + "erased-serde", + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_repr" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_with" +version = "3.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "935177bb8c0cd8ca1a4e6d1a2ac8988bea69cab4f9d3a31311e012ad27868ea4" +dependencies = [ + "base64 0.23.1", + "bs58", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.14.2", + "jiff", + "schemars 0.9.0", + "schemars 1.2.2", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d607aa01a3cb0ad757d6fd216136910db3c97b102fe686585689615a02dbcdc" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "servo_arc" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[package]] +name = "siphasher" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" + +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "softbuffer" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" +dependencies = [ + "bytemuck", + "js-sys", + "ndk", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall", + "tracing", + "wasm-bindgen", + "web-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "string_cache" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared", + "precomputed-hash", +] + +[[package]] +name = "string_cache_codegen" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "swift-rs" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e45c444e496845d3f2a351146bff59aae4975b2280238df1dfaa0c7d1846f38e" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml 0.8.2", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.35.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1c93047acf68669466a34690ac58cca7010bd1b201e1ec86f1fd0a75d3dd4a9" +dependencies = [ + "bitflags 2.13.2", + "block2", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dbus", + "dispatch2", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni", + "libc", + "log", + "ndk", + "ndk-sys", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "once_cell", + "parking_lot", + "percent-encoding", + "raw-window-handle", + "tao-macros", + "unicode-segmentation", + "url", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7eeb6d99155545da6150a1795945f16ac9c178deb2a5f2e74d776107bd5849" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "tauri" +version = "2.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "667b20e2726d572dea2de7370da16e188eb06008faf9a92fab7cdc46791190b5" +dependencies = [ + "anyhow", + "bytes", + "cookie", + "dirs", + "dunce", + "embed_plist", + "getrandom 0.3.4", + "glob", + "gtk", + "heck 0.5.0", + "http", + "image", + "jni", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "percent-encoding", + "plist", + "raw-window-handle", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror 2.0.20", + "tokio", + "tray-icon", + "url", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows", +] + +[[package]] +name = "tauri-build" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9ce40b16101cb6ea63d3e221567affd1c3a9205f95d7bc574941a10636b632" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs", + "glob", + "heck 0.5.0", + "json-patch", + "schemars 0.8.22", + "semver", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08279169ff42f8fc45a1dbc9dcae888893ba95288142e5880c59b93a26d2cfc5" +dependencies = [ + "base64 0.22.1", + "brotli", + "ico", + "json-patch", + "plist", + "png 0.17.16", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.119", + "tauri-utils", + "thiserror 2.0.20", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8b394794f399a421811d06966343e7933fcae92d59f5180b9388d1174497a45" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin-single-instance" +version = "2.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cd0cb5c412a5071b69bab6a6df1583cbb89460d4a83b6a24769b08d15b6b1e1" +dependencies = [ + "serde", + "serde_json", + "tauri", + "thiserror 2.0.20", + "tokio", + "tracing", + "windows-sys 0.60.2", + "zbus", +] + +[[package]] +name = "tauri-runtime" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0b4bc95aed361b0019067d189a1174a603d460d0f6c72606512d59fc9c12ec8" +dependencies = [ + "cookie", + "dpi", + "gtk", + "http", + "jni", + "objc2", + "objc2-ui-kit", + "objc2-web-kit", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror 2.0.20", + "url", + "webkit2gtk", + "webview2-com", + "windows", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e6fac707727b7a2f48e4ded90976324267371073edbb415ffb73bb0458d203f" +dependencies = [ + "gtk", + "http", + "jni", + "log", + "objc2", + "objc2-app-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "softbuffer", + "tao", + "tauri-runtime", + "tauri-utils", + "url", + "webkit2gtk", + "webview2-com", + "windows", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e176a18e67764923c4f1ce66f25ae4abe5f688384d5eb1a0fa6c77f3d90f887" +dependencies = [ + "anyhow", + "brotli", + "cargo_metadata", + "ctor", + "dom_query", + "dunce", + "glob", + "http", + "infer", + "json-patch", + "log", + "memchr", + "phf", + "plist", + "proc-macro2", + "quote", + "regex", + "schemars 0.8.22", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror 2.0.20", + "toml 1.1.6+spec-1.1.0", + "url", + "urlpattern", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc65d45c68858bfe420dd29e834b5d15dbecf8a07a8a16cf4d532c7b1f69d4b6" +dependencies = [ + "dunce", + "embed-resource", + "toml 1.1.6+spec-1.1.0", +] + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.3", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "tendril" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fed54709c5b3a53d09bb1c113ea4f5ceafd1e772ddcb0030a82e1d56c087b08" +dependencies = [ + "new_debug_unreachable", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" +dependencies = [ + "thiserror-impl 2.0.20", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "time" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" + +[[package]] +name = "time-macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" + +[[package]] +name = "tokio" +version = "1.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-util" +version = "0.7.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml" +version = "0.9.12+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" +dependencies = [ + "indexmap 2.14.2", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", +] + +[[package]] +name = "toml" +version = "1.1.6+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "920602543f0911ab71da12c50d59701da54c196d1a2bf5cb4b75667f137a406a" +dependencies = [ + "indexmap 2.14.2", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 1.0.4", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.14.2", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.14.2", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.25.15+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1340ea94a5856333492c9064b02c778b191dd2c853778d9609debdcdfea3a614" +dependencies = [ + "indexmap 2.14.2", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.4", +] + +[[package]] +name = "toml_parser" +version = "1.1.3+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" +dependencies = [ + "winnow 1.0.4", +] + +[[package]] +name = "toml_writer" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags 2.13.2", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tray-icon" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "045979e3f037cd18ad1cb2a419dfda133c5c29c9f3453370079f2255d46c257e" +dependencies = [ + "crossbeam-channel", + "dirs", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.20", + "windows-sys 0.61.2", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "uds_windows" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" +dependencies = [ + "memoffset", + "tempfile", + "windows-sys 0.61.2", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-segmentation" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", + "serde_derive", +] + +[[package]] +name = "urlpattern" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" +dependencies = [ + "regex", + "serde", + "unic-ucd-ident", + "url", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce" +dependencies = [ + "getrandom 0.4.3", + "js-sys", + "serde_core", + "wasm-bindgen", +] + +[[package]] +name = "version-compare" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 3.0.5", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-streams" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba8b815c1b593dc0baf78dd0f4fc8fdb2de53198fb1163738093e9a311c33fb3" +dependencies = [ + "phf", + "phf_codegen", + "string_cache", + "string_cache_codegen", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webview2-com" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows", + "windows-core 0.61.2", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "webview2-com-sys" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" +dependencies = [ + "thiserror 2.0.20", + "windows", + "windows-core 0.61.2", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window-vibrancy" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" +dependencies = [ + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "raw-window-handle", + "windows-sys 0.59.0", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" + +[[package]] +name = "winnow" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" +dependencies = [ + "cfg-if", + "windows-sys 0.59.0", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "writeable" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" + +[[package]] +name = "wry" +version = "0.55.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186f9871daa55fd9c016578b810d149de58367113db7fb72b462d2323ce19514" +dependencies = [ + "base64 0.22.1", + "block2", + "cookie", + "crossbeam-channel", + "dirs", + "dom_query", + "dpi", + "dunce", + "gdkx11", + "gtk", + "http", + "javascriptcore-rs", + "jni", + "libc", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "sha2", + "soup3", + "tao-macros", + "thiserror 2.0.20", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", + "synstructure", +] + +[[package]] +name = "zbus" +version = "5.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5db4be7c075cb421e4b7ee645541604239bd243ba7c357511f4ff3a74b555907" +dependencies = [ + "async-broadcast", + "async-executor", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-lite", + "hex", + "libc", + "ordered-stream", + "rustix", + "serde", + "serde_repr", + "tracing", + "uds_windows", + "uuid", + "windows-sys 0.61.2", + "winnow 1.0.4", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "5.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2990635d09ade6df1868f72f8cac69a876a90981e8bd3c40b1be413f8dc88f40" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 3.0.5", + "zbus_names", + "zvariant", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "4.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" +dependencies = [ + "serde", + "winnow 1.0.4", + "zvariant", +] + +[[package]] +name = "zcheapstr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1afec51604565183aeb5c54c20aeab286120d4e4460f7f76e3e8bb8c0d99473" +dependencies = [ + "serde", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "zlib-rs" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" + +[[package]] +name = "zvariant" +version = "5.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1d34c27cc6cdd1f458427519dd6b8612f7b7e3f7b9a0b2355d041dda9869147" +dependencies = [ + "endi", + "enumflags2", + "serde", + "winnow 1.0.4", + "zcheapstr", + "zvariant_derive", + "zvariant_utils", +] + +[[package]] +name = "zvariant_derive" +version = "5.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "864155e69b4352db0c7f374917bf45d1e0c8d17659c8b3dbf9795f3673f8c497" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 3.0.5", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad0294361a320b694a328460dc73add56c306150f5cb6bfafc44446120008a3" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn 3.0.5", + "winnow 1.0.4", +] diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml new file mode 100644 index 0000000..f1c0e13 --- /dev/null +++ b/apps/desktop/src-tauri/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "primora-desktop" +version = "0.5.0" +edition = "2021" +description = "Primora desktop shell — thin client for a self-hosted Primora deployment" +license = "MIT" + +[lib] +name = "primora_desktop_lib" +crate-type = ["staticlib", "cdylib", "rlib"] + +[build-dependencies] +tauri-build = { version = "2", features = [] } + +[dependencies] +tauri = { version = "2", features = ["tray-icon", "image-png"] } +tauri-plugin-single-instance = "2" +serde = { version = "1", features = ["derive"] } +serde_json = "1" diff --git a/apps/desktop/src-tauri/build.rs b/apps/desktop/src-tauri/build.rs new file mode 100644 index 0000000..d860e1e --- /dev/null +++ b/apps/desktop/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/apps/desktop/src-tauri/capabilities/default.json b/apps/desktop/src-tauri/capabilities/default.json new file mode 100644 index 0000000..e27a472 --- /dev/null +++ b/apps/desktop/src-tauri/capabilities/default.json @@ -0,0 +1,7 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "default", + "description": "Default capabilities for the main window", + "windows": ["main"], + "permissions": ["core:default"] +} diff --git a/apps/desktop/src-tauri/icons/128x128.png b/apps/desktop/src-tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..7168aac002763681f1c76a5cbde5434d3669b39d GIT binary patch literal 3950 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

x5VsB(xvFY+qSOnb5^)FJWnWnRdIX>#`D>(AE z8Y&2MnjJjx{vACXJ!oa*>}3*KB@%PO;O%Qqs{X@Jz*Sl^dQ~n#nwPW%bo3XJ(|X4F zhiK$aUx$P=^oWk=enx!Jk1K{fk>$Lk=!eKSJKS-Z^Ue7T%UtP);zib7hFONl858oZ zh3gpTcNeBKTF8pE4)?;bO zPbXhX`E6!MB^^6klHF%yz$j?-4FCBa$A^#>wHx8r!K9~3AMtR(;_S{WE-dn9R=!rm zu-L`c!#T-6p7E=AiJv41CoHZEgZ5SwhNSDWveo??O5=$F>i5F*+msSl!t|MOgf@l8 zrdjO^d(z>F*3VTuqAcU+Q9xlPpur%>>FBc7AErrV|2*kCxBnhqM0M8i4 z?cPo|7%=4TV`WvcvB4jkXXHI(U#~*HB@4}oCM~QK{a4JcQ8dMj1rS?iiT|PG{~dfR zdIL~wgJT;Dkg!xa&X$)~g?+5hHnQMj;FRO;|MsbOwC1@^$l(M`-f%iazb)d6DwnCJ@sjYg-%p;= zClTG#tk;{SqAvsdN^UYgdj&GChb*l8+HMJY_V}5;ec~@SYas-lUAZBqXhd-;viu5sw8e#Mg)gKMq^bbUs9lC+l_r8{|5j@0lfRf( z3LWhx3(>tCXZnOf($YG!XP4Z%cQc6RY`6qD{Jyi(Hfy|va?W@rwhn9$74e1!T=AEKV7=+^QTgn+=8#@zBZB@Q82HK;hg1+#PTNG!w) z=nVP6E`)Tvd~B!b=e#5Z0_C5t6rr;SP7}Vr@aSgH`davvx12*o$JbeNnsOUEcwMeKM2jx!R?o%*S{Oq6SWb4}wtSbPRYK3KcaC6S6M z`Fac^9@WFk5lwj%SNAt*REwAsDGAN#GN`mv&>Hg3Fb72fIbf_=nsLQ8Vc5?Ql&Ifg zRI8$EadQ1~p>PeXDdm7PzToRj|G8to!7r<+<^QQ6ULpHOmw<>AyFqDS@1$$9?X9|Y zpa1qBmhn(IfagB2W&2Xy@HJbl0q$brc4%8S4$z4U%4ZYPbpC1{7)Q#Ed+F*o93lJ& z*LP^?j=~LGXr-U1BI&=xqYuZat@)+&)Qe1}txJmvJR=WLRbm28YvXTkYUtc88u?cv@ zVAZl1`nfxGvezF8TTz^UZgDB>NSH1P7@1tA?8SA zh5cY`So`6X^t7<=hWTtGVPShh$!!6h9e-EPl`|E~75^JRubg1i;Q3w1@92Z*D2;L? zy4{ixQD$~=9X0qYU9Cg>QVwuV{ASncTVZ?gBg`{qsD_J1>>!tn+flE^uG!m8e4`h~ z@@qDd(;~ykiWGO8$EfX^p_5^n|5LSK&E>XfU!>4dc#*8s&HG2EkMEqdZ*4vc_fp`D zrm!R9Z$mH{Z*Na1V~LvvHAu$06!KQTuGtJ+O8#`@kb3zM8WS>d9?Sf*7^5eDf!#)P zLxWX8o;ptaS@gyXS9rj%lzsir2AhSH-H*KAm}xiJDU(76-DEymr~J?QE&8zRhfDZYfk*?it5p0U*0UXA7P61BQoC`#TX-Evsn(QHg-N} z(#NW#)e0E~*^oMrdu!#c@jcNxdiWm9C%*$=%aIa?m99d(qzC|D-W1irL1&x9crN2CQh z5iYesdo9M$X{KRXkp1#sSlRt#0`%6UrkbD>#(wR^KMXz+xMT%WAITTdM!QvBjezAt zCQN>#B)bFcpt4Ywk)XZvgtH%7!&NkHJ1_B&Kzse3`~Me&N{kz5pKD|B2;~$!tE_tbuyO#A}a%VY$Pyd{y+&+7MD*W3H z)!4W761&C!r7j;NSN1+Xd-GYXgt3eX2QYxdh`{RLw-pX}|33MqyN$FN*S~C2>YeG) z+_F9ShS2?c(^7csc5$-*Rk@w*Brx%1_UrUOT3`z9U|pGW(y$>MUYQo0FG4 zAr9Q}ni}|)QgHkrpNtf1X7HNpTVP2_Qu(!Z zzuoeTuYWPymZK~6Z6x!UqtDp3!~qFbR0hxx``I8bQ;gphzOMt{g&beAX7PFa|I1Nc zOQQi)-QtA6P5v4U;?Rrt#wqW3(;25uZAdoJ9%!ixxaC-D33uNOP>(Q!V*T6CwJD?N zcT)@OpK#yps11pQ@HXDCJ6CVYT(rb6H$6PV4KMRUVAXifnB{adXQO_ND6ey0L(U+1 zAxzEUmhE^xkc0&rVhH_uw9_}c&)+&%yrR78Qz*poW`S1>e|ocb>J2M90JSJJ2#Gn) z&|&twRtW@6EQPR8e!Hn@pl;=~$LiUF5GOt?tC89S3mTI}{~A0|3~*aykC!EcWk6pNyqA#xRm|toPy64=;Qn z2=+t_gb)1>S3wBl@sZ^98WZJ|{4n*j(I5wr14uygHsA9KHWhxHj%zS|95WWmT+*vD zS~%V7cM2W{NB*0K{I@_A9{gjXc>-|@oQGbr^YL=+%k+mfqW};Z4Di$b!=~}DjAhf- zdP~%TF|2q5j0A>o4cA_4wm#XqnpkmqR~}KW>FsHW#|%*9Y=XPxe|8BpBxzfb=l4l3 z-KE;i?8ya|y~V@ob}bz!jCwKN%^S;2xhxwd1Oh%{F$M{-&q{Z0Ja@0sd?q(ln1BzU zfb=qqV}@IoS@4$teeplD=I_4kRc^KimTk~s^_iaWx(E01T%(j%Qs6(wXzv!}l=#Ou zVkIn@{D~zlv)M);9Uq+%V5bLhS@4pF`r7x@oC4yiuBZ*z^Nlzb!vB`+I4sp!S~T(_1$Ot(OuTyRfT1lSvA_Jvk=`0K|03A~`Ijc* zdlVF3UtwV>B@ws=Zy_*+bW@_jHP(_&A!2I2Hq+W|mQhjvPOwf$pT$?CAQj*1=xeJ3 zmU6Yd4BFN7ig#=7kM;*U)As_s+r5&3NIUJ2E{JEU8bpPbf4O8u}?Du_Gf(QyV zSTsNbGQV4E^?YZUb6=Z1o-UD7D~@~T!8x1T^XVcX_Lyrv*j=(}p`#eHwi0y!nIJMT znTKE=IWTndG>8=I5BX8Wk~YP0o|#HZ)=a!Vilg_x=))xWlN*|g!SNE16`KMS-YdOf zuP+=(YO#TTzL&cYY-_R)T6rue7N%%3u5qG61@!O2>gLoR-1#T@+Wfn@w-xps+qEW4 z4E`9ND@lN z2U(c-aC30#X&DzXNZ|~fm{W9mIBmP^3EhKHi#j)d{I0{}XH zBHQNgLow9!5PiFPCAK7qlobIUg=UE_mdD(lzZb?b{Yn5$L4{;Un>wOPtqEn^kS75e zj=}Dfj!|suXWoo-G%WT2;BE;~?Gt8JtIQNOoUH3W{jp)Cg97fLsynKIW@w)C6Xm_6 zXWKL~SN!s!02%|&akN5N6;XD0iyp_3gs`rL1a#<1BWTk20Q4^14B3F>%-!tE`NPE* z2KQ(Jk>ZKRCOIH%Hu88%WIz&g-ma>`Ql{88J_kJK6Bf zbmvEDyUaai6f*!+Io~Bs>@yt`B?fVPAF2eGe?Ij>tl(JUtK$M`PTZ4);Zw&p!WH+c6CbQc5Lgm zarB+t8g^V;?^o^d+m1+h2rV*Ay~VmM2K8XoOBpTEw{?TY6F%N~6Cnr^me+XWg03k$ zLP#wDs0rG6p*L`)x*hV~c1{9~Cqz$fI)D6sGyLprAb;$_0g<;)D6jG=Zu3^>Tc_eb z93BP&v8)|}JpIJ^fq*y!gsfRTh*wSDncq;4&20<20_q~*H(Z*ucAeEpQ^jQKK!iecezV$}BYRg16LJ)d z;lQ~0$w(D_w0%Q@S>jT3_#FzzLO=X5&JDO4Tem6w-8I{<6fcF>K?$HdIj=AI@;)qC z41Jxy-V^TB77j#TvfxMV(s%v=PRSQ$j-fxPw96;MP#Pc_byA>27Zc{*;q@i>!g%V_ z_ZGRbXH*;+b%a4WWKSpm9&+1oe<|7%5&4drF=AXa%Z#ecF^EHR-kyF@gFsS`lyxtqL;PpK_B}7=K%M>7Q0=zR^n^b zS_|*oXQAb(F?(F4wWx)`t}+0{6QwP@K|*}_eQ;;@PLVAm=^nYXgyLbF<+YWC-+3E) z>QI4-4Mac=pi0gz0zTwk`Cx0o|6BXxI{oWZ6SzuI$g-o`1|==v$6Nn6}~ zfgLpglngr164JF)U=V4%{FObQ1cIda6vVFXnL`S@>agXr=5vg#dR&Hs7RO5>|Cjdt zybM+#YmL$)pV93oCDH%`ADjDK)BW8(mNPlUdU`7J#2r_EE#bWUV^b~osT%Dx4xb|B zduDdjyxmX&O~dV_0ZD#*)wU4DL7 z%gfTr9w;V_r@5jT z``-*oiwvSLqKt9Lb47#UM3&S5GAt^)^iowUMx-L6`KHCzP&^_c+xD$(303EUFbVQ~ znkagb{b{OzWNLbHNZI64a~l7>2WI)IpcfDkFiWq~YbR>h<0ShE9mrkpnN-{)A+scKh>67zy8gLppSEf^tnfqdYtk4L7mp zB#4*~Lw0kXRHQQ>CeQooaP^!p7dnSLvONiUEWzCn;QD0}Hs^hq=ygmd>fy)p=zwp5kr6)aq6jm>&3 z=7_iUDjL3(&sy;YUU@FEX`nG_5t)_dV8?==qa;75(;Jcy9GqD9H>~FP z3bN!Ri!C|EVTxQ`-=-&YW~hOuM=Zrdikw8q$aflUKg~$GttH$DvM6&3qq)W?wDJ** znuCFqGEExUgLysRPtomUJsSnZ6Xr*omGWG-F0x6gZdsgi3vwpTvr62|sf=5FY2Td! tU$?DEh{Qd2$;dmEbPq17Fu1(~Z5LB$95J0sVdH&3O-W1fo4m!F{{!H_#0LNX literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/32x32.png b/apps/desktop/src-tauri/icons/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..1e0537eab63497bd9f8c8293ed7fd2c6178ad31c GIT binary patch literal 1042 zcmV+t1nv8YP)nym)XcDMVg)B92mroVO!Zc;#>4S$I&MT%ssMQc^p4 zpl~87b(BjUTu#IM~M^(iYj z>=I*(##~{~G-M1Ag)(FGzY0$Nb7VhpoUtESg!ojlyUKR!KgT+Mt%F8pg37~k6ZgqF z0#8kX8=pZ#)l58<Ht+nb9df-0T#jtRGlGAJ_s{!p%{vC3K82y1a~eXd~gdW zS6W0wPv>11z)}M=4b9v!@Rv`rBPT!a1s!L_282)V3H$xtwW6;O{HEdN?Mg`%y?6*` z={gC)B7rl^Z#WX~@ZMEG%J%mV^m|sw&4LyQX>_KLa9NTG8iq8!ZQuPw!a@*eD@O5$ zci{T}mVcHDn$sOiCS6#0D7V;5KMf_9y>0uX5dEE0qwd*%{UE0I>Hi#oCM} znsAn{hxg|Jn~pXmx7REuv^b>|)6Qu+AD|ie$?T)K6tjR|nvs{xKAKB03rL%hG!p;v zaUtPnJM~%{RJZ0b@R7YcG~NLG=ln6--bmlsbW#lkR1+rtOsVDaa52v5N#kng~!)S0RO1UB~>gc8uAbM zT%0fwU+QxT{xLKA&!6h7y^H=TBvwt&h`8skE=1{aV>OV9-i1q`x5OvIJO6n6Lz82&$)UJNNwf?mO>< zw92pt4+eblq;C9OJ-Xvrvg!a?J4VbS*4ja4R+OV5G8vI+mMl$MqHme_RO!SwUx<)) zHB61c%_qzoPlxKwuObKh$j(>Dnq$Q<7!3m^tu57!C2cL`aRkg%P)vcy8i}lnTK`0r zC(9?!zuSy$RRuIYF!S2j77pnBa(~}88)>T5jj=4Ktz1D~yo%y-VFmcXE0%R#K`9Oc zs?OKHx5mCS^iJh+vl6%&eD&z~Uit8+QVzUd-ODe2;h&QQJyvtfVXsc?+*1ts%mRWWlcKv}STf=X zsutDvDhUn;KyqB}yh{c+4KN2BJRb`59bkAd$w}*E-7@2}8eosvj)ekx1bLs*z*hl$ zibzMXaNIer2PFp*r@_sPPMi`vW*!N#vC&@SWKxSDcJ3cZG6mwH4Wf*Y;{8WQk{OwZ z?9AVi)$7EiA+PxMXJPDTfIUo0bL~Qv3S;{y-2Eb{O%M9jp-xyqJf~QhxptMJvma9Z zyU&S>r8H?#CC~X-c>!O1;dLrJ^Ky50eS;e)cz7$RkwWz5jRPh_8ohLk7s=;!xKVAVR?BVfHHmq1z~T;aCPX+6ku=sN&4c~q_0d76^dQUreUg;7x3Y(1F{=@ z&Zi#r&v+^sX z@p+!tKOpm${dGEAhrPEMN@V^ZJ2iP0;l>}H`I(GN74yh^Zr)loCRH|%F~FxTees;X z8Q}mZW~jL`bSNf5-t4jRSyXO1J$QCv zOs9HI=w@Xo^wHi?;p;IK9?CU%JWh{?q-LcdU^tS$5!X#swY-eU3ug@K|mMu)TlI(&74>@^CSr3VYc z&Q#43!M}ve13f9)e!frlo`_o%^Qbrs+5l49e=Xy2+!&hnI6Q^&>zQxw;4Z|zjA2;VA|3hh*n7l?+Z6*U% z%x9LB#)1kyly#!5yHiquytAdz$|h*ovdMTHq*?4tR83#8#Q~MD%b#U=L&GkEhTUC@ z$3bAR`^f4ybaQ(TuTkaEAaFn>4;afGigE+vV9jBte}EY@o*x3UF}UYJq+WyS3A;u) zPp=U!epUX;ljqD`^Yj~4d}7V&Gk+_QT3gI{!g_rUs7AT?EPuv<@3R6xe`EiAn!7t(;N<{=JO007tR-!kl>Xd6PK98A?Ksq z(Tw_~7$1pDJWvt~4Ev;=RyCO;9?mmad6B$9 z2B(}xt7KOGBnd;t2fui{&s9i@60Di1f>aqJjfWYyNJo@vR{U%pbZb5_&{$ere1zXB zaGKdqY@SHO+rc>L@lleWJB|Fa7n*00Z*6|8#zsiJ_a;TJZ#B;%*Fu!ZVKIpknkT|f zjss+%MoT1)nMb+nSCfD71{}Cpy zfY}*9t9(i)XAE(1V#3eBG?r=f7uS*AvlAvUU-wW|CNel=(sIjJTcD!A3^cvuzOdJi zaqxK9r1SVFf%@b6g2hxZ)+z6cmyic%!k7v#Gc&>;9tXzbowJa<3okL_x1zWrLI)9PR#CV_jaKisuHn>N$3gXW3H zhjCV8uyle2o30U4McbaAAVFtVs>wV>+qRf-)_YBs^&Sj67~yk|8se5bf97ZxkAug9 zaq;*JznSWwICe19uD7Z3@SPJBQ`!OJ>yPOr9v6?#kh*mqSN$0bcHawa6g>I|3ZHq{ z&PFyDyeMm(NaR0#n@_d9ZoYnuBYftsW?VeJB)GxkSa+lp#_z`N@x8k#d*w|Qw6wYD zyd=ffU3uhp6g;@jj4QD#NQ8B-2_SWOh`iG-q|Dd5NS?chBvK~L&lPGzKC8WZNWHd& zg1>L1=*^d{MkVOwCI?onJ3l@`8c9e|JeI`V&m#MpYknhGLDF>J9@3?cNbve(7>i_6 zJjvT49$>b`(lfCCoLiLxE z{4R+TzF;SRy%`PsuJAnL%|)+mrC{^@rpn4P4$5iPAvFp!-2c+oD0A6$R*Och8LWRo zQro$J-|YViM<9IJ^{8~JSW=e(La=5Nk% zrq14&W#PcGCJ#F<cgDw@H+X>C4yS_iK(_KnH;qt(g3Oz?D z=>Kz^7Lko(4iHm`)*`8$+bP`o1SV2Ts#pw}NTLx8MzrH)3O3zqJww(o7LrmEd8WEO zCVod0=0d}FqS)oPc0-?(&Ko?W>A}Xc@TI5B_RdV_cfh)zoH*+q{`0ArbuXuqbx*cn zrZ%623MZ4#I@aa0nzy>CnkfcoiDZgFExAnbr!3|tm_@O_24k8Vmx!8Y-XCVXP@VdX z5q@La>Qs}DvU+cv>35@NK%q=y!4h(!-krTN29D2hLXchkr28W|u%=j%3+9_EayiGu z9a}ivZd&aa_daq6H3Y1f$mR0mYOTA6T6b;_WZD#f>{TD^0<$oHTJjB~-rWH(=cX?8 zo_=qz$_s+j&3vod?jkuX(-6@3hTAE4;!kL`Q*XAH_=r$)z$jhaq)i@wCt5Xq)hua z&G+lQx!QrnV4%qs*Xm`j{_%u^@kxoun)kEU-io#Bm{b+Eq&E4e!MOVuUtztw>K4zb zQd7Le72cx%<<3NUBhC664BYP(&8QYn#8*dgc;_y5-bE6w&&)Eo*^ zbfcVR)w8b=n=bJwH+u`iY`9M5vd$Hrh^?>}cVy@&`x?dVc7{JP%sC0?VAR)b2eqW$ zdHv{iwZ|Wi-u{>K2J0VZX=4V%El(cZ*F76sMKAut?&zQ8Oh)~yn?M&uFF$QIvY8l* zd*n{#2<_*>fk)8c`BmG>z&RLH|B6az*Z94+nH0MvZG(?rzqF3KQ)f(Z%lL+0Sr*>i zgealvCX{@sUH_)BU#>*K%m))4W!SZ!{1CRgv-2 zYJ}r6$F@%}7^p=LWl}efVGV&v zPZ?m%4S`xBw`DQ~ERivRrt0WWYn(HC2Q(q_0210lm)XJC?J`=GLj87hdp{6q|8Za7yP57-t1q z(%_@SW?9t!U`6Sjc^F2mopv?d9l(K0CDJ=bJbzG%wf)GK(D+)?_!%Ft}*i zbOLaa*5Oe1P^1&$3f*x;bRcli68Nw|WMZ5<!_IV zy>bveUtBkEk->@jI=$FF-WInmck5P@bbl~-FfM!mC&O5%UL-NlA0Is76NRj|v@{-u zd|zBAvPL-;IxOaVzg!8QEUp{8w2Du>M)jJ%k(8@Sw}8+~8 z$ABgK`jqPJ^yjX5`VE}8r8Va>ry4rZHKb`1a5nBL zwq{n8MuQ4IkaZ$Vj0UU}TQb?wNO1R@^#eCn@t{N9gfZTKXw2VmcgJJJd}di`%mJ1d zPOl|>o zP!P=aaRbzEKVVSFLf+4KD6C~K#ff)%y*@5jX8E$5+hU+t{?&ErP)!I9It;S$7lu}L zbmN1+F6KN5cQUlKwk~k~GyyNiQH8AU!}|ti`j)mk2iH!P`;@_|+Dy^aC3%tCche?^JrROaU-fdmi5GZo-BM>0dQmN)GYN# zObZswS5C#73_S16fDz&}6yDmzqXOc+leDx(Vj5;TwEZK0 z#N+%yrjw6$=(Mukl4PdoB(0l{-H?)G(iR0QkwLZth!W!v%t!bzA&KqP$L@Rg-kx*c zdy*_$mSoA=yZg==+0w37E4_1n@0@eb`JHnEm0&RMLrMu4c|R~3AC%z`+I3LVta4rpx#F5LB_qho8d z9q?P5CG6cn z`^O7EA3~~?cxNj77tjOzFsR&-NLLU@&j_%OT4VPu+Wq9SQ?1#80>^IMs_dRUhS0km z(fk*0cifHEq+1EOsZ>Pcqb-cahQMOb(x8C>yfnNFL7(RiSe6NEfgh-Qr({wwJ`xBb zSqgAuH1X>0U69zR`)U&P_&| z=gI}O9)D3J*ex}*xV1wsL2FqK)p{+>|DD*@aTBdIt@)fR4!uD;zR^%u=bcK4eH7_d zV-r)b#j0C}2L*R$Wd`?qx5a-BVjJD7%=3L6a-XLu*cJPZ)5|AtuZuBXg>& za)nBO6I~r&a$D}2jyMp`A$V}jY3&^b5DOErahj_db5WQPE-1Bs1dB|rxWtm@WT9=r zqSuht8?i*uH_>H{SsW@@Iv0gy1Xs<*g(#KSi}C zDkE@Q!$KG!ED$D+BQ^*l*)B^^(33m?a_CscPg(+X%}8Vn*Pd9i+7?zNjNK0WL-m5ZUzm@c%TfDFhR5#!blb>rfro_q_@Jsoq8g=LCDsKW?iWo%c4M(B3p z2(z1FIjg%uj38t0HurG&zK$y}OdeEHmScn!bA(x@;xGpoqWq@$Ggz`6Oho%3Xw%J2apZ_| zLURHqu7NrJ4w#pp2mQ?Bpr3yVY*Yi$x(HWG`(}HTz;<5iQz_PEnubq6u>NK!Z0Sb8 ztj=X1N&u?u?Sc5vV+fwbNg&}-#>5}sIM7f>*eDc!|IZ=3^%JQEv$#e;BZTjBCBKYa zt4th0^!=|x?ce?e1B%kPjyw>*i0BBK;ys^(pyMOsfRQR!-dgzCee zO=3J>q6u$enxPXA-qn?W27}>b)Kreyt1_8qL%JZHkZwpvzUZX>z@gZDbO_X{8=&yf zKb>G@I3bz1tOO{e8`2T!3Ov})NFQ{Aou^Q^C}oUVMhr)1rg zQXK_#`6^IrH;$WVmebu9idxqR5_Ls7tM|<%>+Pm&Gz#+C_GA~~UB1Gn{ke7kQrB*9 zI;*$4l0NuxwR{x=V}_!ZzsHOCFQ|J_4=s&Yaxo)frnebo&!wz;%`Wh!xW_V!cqjK3 zC#ib7`~=I)Y&7Z0B}YZhEe^ zx*(m9Zb(PI5V`!Kj*{=Lp$`v>Q25+)VU8{|dEl{T+URrzaL# zysG8-1)QwA0U7^xqylQ?Z$YqW3#c_6ATN2hSEl;B2wEER_Rm2-*AMX%`#`_+9CkaD zlgUvi zmxpcrfw!b>JkX8IvmoW6iMDUP4DstPda1JpTV|Se%(@X;I^A{OT@D3EB z)cjozo&%;afO96LvM_Mw)IL(Tz9*Ij0FFpnL~PoGujBfH*0rpp2QBBkG~zFC+_pT% zZ8`3$=<8A&h|&f189G2fiK{L}U`K|Mzo$^jwG|3{bw_T2$`?R@IUIH68W2k_L*TU5 zslaDl`rlTLgL(6)qc)gV4vz)xd93LBH*|n@6liJGdvAi^eYb+V;8MJ)Q#V!5-A3xF z1STOZCManrK=j03M?w>54fE!@0j;sqoQlpsv0Sv!}j=-H+hSODm6?oGo!j9h{BscmP`w?Y;hK}DKBXMP=jhvx?XO1*_EK)vmvE+ zN(RpPcTqU!ZrKWuzj0NJHBXrl&}?gqf? zxO6#IwwETU1E1rwW*Islk!#b~%)T`LMA>cX?bb0{obw&tQ2L%&Zr0icAHrpma)`_4 z*ruN-761!NpS*3~_QaF#^fjaFKK23!Ma% z+P8N@{M?g?<)I*x7RZZkMmtWLr_V%VrNeIi>#Goxr7Y!#i{n=U(59JJv^3Fo{t3*h zhmkt^+a6IzWl9|lvA%{q-q_cjXX>bbz2g~K9T|3_yab6|*MmZ?j#&DxWPzBh&cK;b zdrWO&drVuM+GDH>d|i7Ca&Ndj#^+j<;~=Yq$7|C&{=_@=?{aW|4>#lm-e=abBZ_I^ zvMF8ljKg>;Y6Disxp$j^b8f?y1W&JE;LLCfoOO3%kZety)`dipGb0N{XVmRky!BhGWm(bX^5*w?!c0gVJ&goU!4NCvbS=8XO*Z7aqHa!y_-A zG&~a9gU#zd!vo#_7vlZj2J?&85nxNkGrTN08&^wxNth!keC*F4{NUYFALu?I-m$|c zp|-aNqW}H|c1yI3l`mNG034Zgbczd?LFxX##Y0Q4fw2ME^u5Vd=PWp;_$IYP@sGZn zOduZ{fW+WwZda8x=Hax>(qHbvnZ}oojiaBEhB>y&l4AoGgZJO&ex};uvW0aut4h(`j6W4UE8R8Tug*)#B znX~B;`8;+A-AZ`tAI|-hJU5&viHT_RNOC^6;8kuq;NSvN9!6gEUJQn>9;af?`IKBV zTGwv|fm|Nv_82_PW^sgDShebg`8yp?B;#$Vhg&UQ#a5?zV;l+cT`S>y97RauQ(Si? zFmRgh6kv>LsHAXS>=|W}IhWJCEx_lEn<0U%B+zwZ`?9jZudGpVYck|M@{Ia^iG$#qmvZSI4Pdg}Iyv$yjm!cha8mS)5Jj#=|C; zQvH{|#&Z>VliqXQj^~6rip9?A!=D9v@>f{&{KSNqWiso}rcH5azj;cjsDABp5Iw$k zeA)#|j?SwhOyGGARHQ8Y&V3-SSUv5J#Xo)wYTx>MH>iL?ljq*?l%qpA7`6I+csR%= z2Ovqqr)gRQon!UOH{C29jc!T5H0Y*CIMyG7W?_JHva3T2;UU{8e5(&Z#oRoAJhp!Wz2^85_H%Cxc<3MuHGiVlaCRu_NTaozSZAEvm^%OW~JjNqrHmYwX<0Cqu!7immi8`BX^M<3 z6IWQKGdV&KRtcrT@_XGTNYLN`d4=2+LWk z$b=Eh`90nG(Ee9s>bf2UC4eJjma|62%0)AeLRK9|wCo+NYC;pAn8z|j8Bqj;5j+BO zp97BB4sy}X{=wLoC)z?qz~W*L%VcAt2^-p)#|bNh8MHW?(>j&yartC+S1f08QE)&pf z4kSLIt@ylByt`sKbvKn@LO$p~Ls+4VPWJ80@|^7M7$}FqhDsD`kyI2}ava+r78GLP zz@nc1_6#GZaE`^+tuh7B{b?qdT@`1FC1HUuF%cuD0%y-2O=f6GPk-O2HeV{YgjfuP zh_#p7OmRdQAS@6j2pfcv3C-K%GSL*B?Cv~RE~xdDY8-QZCvO3 zd8gIfpb0V2HyoKQi+AExsz7{DJ~va|0$hhlRVv2}_HEf4xXR&(>kG_N0z8n@wE)0(%R1vD_zsfwA& z8t&e-TwA>tw`n(2Mk1sUTEniZaa|MTX=uw`8I2CnW{BciGmWL06>uDQTv?*mxv9#% zonI`4@&SeZuu_X-*KQ*?Vc00OCn_V93qe51z0p{IxxBOgfyrw;Z@|g6Wm$whysfiC zEBjEn7`AI|04asoZs}U(*aCTLVZgS8Dxlg^r5YWej4&nlCa>+h11C!a!S>B+%=&bF z;FIXHK2t7*t7tUIP~^xy4n&kQ5@DOQ6as;WHD65Kri2-9KJ%n5SNDYRjd)bdcJ2ie0E1fr#a}4&NneFfsS0 zTC=(UXQKN8=rx4q?D^qs8&_Bb?Z(&}@fGXvW>|?&i&>G|=igSTe9c!uC7|w{#}?e~SP&{lrN9hyVZp07*qoM6N<$f>j%R Ar~m)} literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/Square150x150Logo.png b/apps/desktop/src-tauri/icons/Square150x150Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9d334d1f8576e3700c533848403d4c0ed3c2340f GIT binary patch literal 5337 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/Square284x284Logo.png b/apps/desktop/src-tauri/icons/Square284x284Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..985097d4507e97a4242c736b21080c5e1d6d1d85 GIT binary patch literal 10931 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/Square30x30Logo.png b/apps/desktop/src-tauri/icons/Square30x30Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..93cab0dfb7c84c84aaafccfb6678667eb35779ec GIT binary patch literal 961 zcmV;y13vtTP)D;)P1f4zqG)K3ULu)tt@UhaIysw}6ztxZYtI)d9y@?tAg~9b z4ZhYf$F>S3Z$xrTZ6A&-h1KdS3!U#pn?P<9Mj!xXun1GqNSb3B=w6zn^Etq)bO27E zwgVAM&{zEzxUdoH&Qb$xAzmY5DOC%1`e>#8WM9HxR8$$Ski)6zqdDa@rrNlB<oC7{I~Mb(4P9JE`O(c9S!jR4YVYB>TG84W zql0w??k_h!q(gUJDnRt_gBaM~!qCPv>5$)?=Kln)R+gZCEJH-&q3dKgLu;1u!*L5z zK%4WveuVzD0z{(5QhzfMKb-kHHx|L)j-0#syu>qx|G9)Y97~xYk>O zh66J@qcO-MqehX=|Hg*%WWzjV(nTH~MtSkIzpl;0MdCk6D63H{p!#CYxLw41h$s{@ zm&oGQKjX$)c6IgTT(btWDZv(VoFXojy$sa%PY^x*5M2JGti?_=aMa3jja+VnT)T61 zy@>EbA~6c1+MG@Xw6n$`yjB--aE^|_J%7z-@9Iw!Z(M=;wn*TKrgaRs zgKotNV>QP#a_X{gIh9V)HvnhsEHtHABVCl*5oq`!Q7<0#W38s#R3ahviq$?S$Fnm3 zz#rnmz;%EAA(7k;Ec%^FNC8pC)s<)Wp_boMBXG!P_~&<2SQ6V-rFKMQ$A?y_4+`!= zOi5ffwOX*%#OO{^Cam4{v|8g%{7<2O#M$#3=+QTah8#r6L j!u+#K8@ZP)ttZVNs*b~qzaW9z00000NkvXXu0mjfovy&G literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/Square310x310Logo.png b/apps/desktop/src-tauri/icons/Square310x310Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8e87b81b634ee354fc72af0ddd1e593e7ee44391 GIT binary patch literal 11928 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/Square44x44Logo.png b/apps/desktop/src-tauri/icons/Square44x44Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..270fca8649a487b7fd96d4ea07c9600aff01d207 GIT binary patch literal 1395 zcmV-(1&sQMP)eh- z{o}`-7tWoF|%6&|Xu(jv^5F#azDH2o}n-i%*$VkRNL=kI#r_1uVnN|KDH}uA*QOOa>cM z)%-mPuw@sq#2lbO0K3)Gj13uEt%)?M@~j3Xz?idx2DasC!6q05t1HqaYLEn&g#~62 zVrCHrq%AH(B^de2BQCRGM5N0~4HRFpUI%Ih*?2GK0pyD;wEqrTuo;Yu)s>`RtFu&F z183hTsNn-Kc>3?_EFksj&k+5#3|R0}ZxM`w)wSZSP=Gz_9eWkLqbD=vXmEZGnjg)^ zo=$Nb#)M3#0o5zuJbJhdHsYkHcle4-Vl_6!wmieES{fXy_2cDp4?dlM4S{nf-?_t= z*brNM7~6)&>5J{!agGf+Zu>kl%}Q*EZA-h>bwYIc%Z@i;29yXpY%f@U#&i#}aV!o& z`1N^kMjiq8iRUv7y6~%y+4j77hWQ|Ai&B}IAS)h=z;mhLj7@^`(3n+##EF6Bh`*#T zpd{IvbGE0iFF~}#E0@bB@lRO+PWZ+~>F!@f;!-(B$vs{^4l>#rRD6MxW6$~tPRfW9 zo!$!S;Ou`G)ZTr`!|5L)n+#a0-i7GbE9O3M^PAH!CN{P1ibD1(!RgpNbc`kF8FsX? zkf0c}zWF-@pPU7{{U<*ymzo@Q4p_LgUIXXAV~~6NIg_4=>@-t6s`d^;?(mBcd~ha{ zAa(87K%gER0}?3`4+$qNRZ}vU+A|EeYfmO#cHtg7lpTeci`Op$wlb0tf1Uo~6~SVe zdA!Qrz1b%Y3tzdCimrYS%}bwlA9OcXp?Tpw$Z9j=T1y&xC%pI}=wFuFvPO~NH*TY% z*ePqG+fuA&(BE*oDpbVN*M5ZP%BA>yp#kb+fHr1yZCo5I!Ty9;JZ9)oraB_xA2 z-kG-EKxVQHT$`HEwmmg!RKXeMM#=-DK$SZXEq`MwIq-^o@owB0f z|5eUjKN&ipNLio2O5;y!T~*xvS&=q9nO<8uJp>?@cg4v z&}K}6O)v`94Ru)Kp-lN+7|O^fNlttoEmim*zMsp>Oo6Wttpc$J0VdBD41z_#%Gj$l zV8lTlED8<$*~L?v28)9>x@E_%h#H6(?A~T{`!_`f0A`^p_e%f(002ovPDHLkV1gZ7 Be_sFq literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/Square71x71Logo.png b/apps/desktop/src-tauri/icons/Square71x71Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a005c3de409c245e3284a6a0d596742a8bd0eceb GIT binary patch literal 2308 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/StoreLogo.png b/apps/desktop/src-tauri/icons/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..6a9442dcd5310f8b1e32eb8210bc22dc9e57da7e GIT binary patch literal 1670 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 z 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/icons/icon.ico b/apps/desktop/src-tauri/icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..f8c7c70f8b3953e8f4d7dc94dee9c4d28c5e785c GIT binary patch literal 16700 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 Itk3QL0d*SsT>t<8 literal 0 HcmV?d00001 diff --git a/apps/desktop/src-tauri/src/lib.rs b/apps/desktop/src-tauri/src/lib.rs new file mode 100644 index 0000000..cac3cab --- /dev/null +++ b/apps/desktop/src-tauri/src/lib.rs @@ -0,0 +1,125 @@ +use std::path::PathBuf; + +use serde::{Deserialize, Serialize}; +use tauri::{ + menu::{Menu, MenuItem}, + tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}, + AppHandle, Manager, WindowEvent, +}; + +/// Persisted shell state — one field, the deployment to load. +#[derive(Default, Serialize, Deserialize)] +struct DesktopConfig { + server_url: Option, +} + +fn config_path(app: &AppHandle) -> Result { + app.path() + .app_config_dir() + .map(|dir| dir.join("config.json")) + .map_err(|e| e.to_string()) +} + +fn load_config(app: &AppHandle) -> DesktopConfig { + config_path(app) + .ok() + .and_then(|path| std::fs::read_to_string(path).ok()) + .and_then(|raw| serde_json::from_str(&raw).ok()) + .unwrap_or_default() +} + +fn save_config(app: &AppHandle, config: &DesktopConfig) -> Result<(), String> { + let path = config_path(app)?; + if let Some(dir) = path.parent() { + std::fs::create_dir_all(dir).map_err(|e| e.to_string())?; + } + let raw = serde_json::to_string_pretty(config).map_err(|e| e.to_string())?; + std::fs::write(path, raw).map_err(|e| e.to_string()) +} + +#[tauri::command] +fn get_server_url(app: AppHandle) -> Option { + load_config(&app).server_url +} + +#[tauri::command] +fn set_server_url(app: AppHandle, url: String) -> Result<(), String> { + let parsed = tauri::Url::parse(url.trim()).map_err(|_| "That is not a valid URL.".to_string())?; + match parsed.scheme() { + "http" | "https" => {} + _ => return Err("Only http:// and https:// URLs are supported.".to_string()), + } + if parsed.host_str().is_none() { + return Err("The URL needs a host.".to_string()); + } + let mut normalized = parsed.to_string(); + while normalized.ends_with('/') { + normalized.pop(); + } + save_config(&app, &DesktopConfig { server_url: Some(normalized) }) +} + +fn show_main(app: &AppHandle) { + if let Some(window) = app.get_webview_window("main") { + let _ = window.unminimize(); + let _ = window.show(); + let _ = window.set_focus(); + } +} + +#[cfg_attr(mobile, tauri::mobile_entry_point)] +pub fn run() { + tauri::Builder::default() + .plugin(tauri_plugin_single_instance::init(|app, _args, _cwd| { + show_main(app); + })) + .invoke_handler(tauri::generate_handler![get_server_url, set_server_url]) + .setup(|app| { + let show = MenuItem::with_id(app, "show", "Show Primora", true, None::<&str>)?; + let change = MenuItem::with_id(app, "change_server", "Change Server…", true, None::<&str>)?; + let quit = MenuItem::with_id(app, "quit", "Quit", true, None::<&str>)?; + let menu = Menu::with_items(app, &[&show, &change, &quit])?; + + let mut tray = TrayIconBuilder::new() + .menu(&menu) + .tooltip("Primora") + .on_menu_event(|app, event| match event.id().as_ref() { + "show" => show_main(app), + "change_server" => { + // Clearing the URL and restarting lands back on the connect screen. + let _ = save_config(app, &DesktopConfig { server_url: None }); + app.restart(); + } + "quit" => app.exit(0), + _ => {} + }) + .on_tray_icon_event(|tray, event| { + if let TrayIconEvent::Click { + button: MouseButton::Left, + button_state: MouseButtonState::Up, + .. + } = event + { + show_main(tray.app_handle()); + } + }); + if let Some(icon) = app.default_window_icon() { + tray = tray.icon(icon.clone()); + } + let _tray = tray.build(app)?; + + // Close hides to the tray instead of quitting — Quit is on the menu. + if let Some(window) = app.get_webview_window("main") { + let handle = window.clone(); + window.on_window_event(move |event| { + if let WindowEvent::CloseRequested { api, .. } = event { + api.prevent_close(); + let _ = handle.hide(); + } + }); + } + Ok(()) + }) + .run(tauri::generate_context!()) + .expect("error while running Primora desktop"); +} diff --git a/apps/desktop/src-tauri/src/main.rs b/apps/desktop/src-tauri/src/main.rs new file mode 100644 index 0000000..24b64de --- /dev/null +++ b/apps/desktop/src-tauri/src/main.rs @@ -0,0 +1,5 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +fn main() { + primora_desktop_lib::run(); +} diff --git a/apps/desktop/src-tauri/tauri.conf.json b/apps/desktop/src-tauri/tauri.conf.json new file mode 100644 index 0000000..a378bf5 --- /dev/null +++ b/apps/desktop/src-tauri/tauri.conf.json @@ -0,0 +1,40 @@ +{ + "$schema": "https://schema.tauri.app/config/2", + "productName": "Primora", + "version": "0.5.0", + "identifier": "dev.tdvorak.primora", + "build": { + "frontendDist": "../ui" + }, + "app": { + "withGlobalTauri": true, + "windows": [ + { + "label": "main", + "title": "Primora", + "width": 1280, + "height": 800, + "minWidth": 420, + "minHeight": 640, + "center": true + } + ], + "security": { + "csp": "default-src 'self'; connect-src 'self' ipc: http://ipc.localhost https: http:; img-src 'self' data:; style-src 'self'" + } + }, + "bundle": { + "active": true, + "targets": "all", + "category": "DeveloperTool", + "shortDescription": "Primora desktop client", + "longDescription": "Thin desktop shell for a self-hosted Primora deployment. Renders the console served by your own server.", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ] + } +} diff --git a/apps/desktop/ui/icon.svg b/apps/desktop/ui/icon.svg new file mode 100644 index 0000000..9e5e5e1 --- /dev/null +++ b/apps/desktop/ui/icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/desktop/ui/index.html b/apps/desktop/ui/index.html new file mode 100644 index 0000000..6694587 --- /dev/null +++ b/apps/desktop/ui/index.html @@ -0,0 +1,84 @@ + + + + + + + Primora + + + + +

+ +

Primora

+

Connect to your self-hosted deployment.

+
+ + +
+ +

The desktop app renders the console served by your own server. Nothing is hosted by us.

+
+ + + + diff --git a/apps/desktop/ui/style.css b/apps/desktop/ui/style.css new file mode 100644 index 0000000..7e3761f --- /dev/null +++ b/apps/desktop/ui/style.css @@ -0,0 +1,101 @@ +* { + margin: 0; + box-sizing: border-box; +} + +html, +body { + height: 100%; +} + +body { + display: grid; + place-items: center; + background: #0b0d11; + color: #e7e7ea; + font-family: + system-ui, + -apple-system, + "Segoe UI", + Roboto, + sans-serif; + -webkit-font-smoothing: antialiased; +} + +.card { + width: min(24rem, calc(100vw - 3rem)); + padding: 2.5rem 2rem; + background: #14161b; + border: 1px solid #26292f; + border-radius: 14px; + text-align: center; +} + +.logo { + width: 56px; + height: 56px; + border-radius: 12px; + margin-bottom: 1rem; +} + +h1 { + font-size: 1.4rem; + font-weight: 600; + letter-spacing: -0.01em; +} + +.sub { + margin-top: 0.4rem; + color: #9a9aa3; + font-size: 0.9rem; +} + +form { + display: flex; + flex-direction: column; + gap: 0.75rem; + margin-top: 1.75rem; +} + +input { + padding: 0.65rem 0.8rem; + background: #0b0d11; + border: 1px solid #2e3239; + border-radius: 8px; + color: inherit; + font-size: 0.95rem; + outline: none; +} + +input:focus { + border-color: #f4693a; +} + +button { + padding: 0.65rem 0.8rem; + background: #f4693a; + border: none; + border-radius: 8px; + color: #fff; + font-size: 0.95rem; + font-weight: 600; + cursor: pointer; +} + +button:disabled { + opacity: 0.6; + cursor: default; +} + +.err { + margin-top: 0.9rem; + color: #ef6b6b; + font-size: 0.85rem; +} + +.hint { + margin-top: 1.5rem; + color: #6d6d76; + font-size: 0.78rem; + line-height: 1.5; +} diff --git a/apps/frontend/Dockerfile b/apps/frontend/Dockerfile index 23405e8..5f3780b 100644 --- a/apps/frontend/Dockerfile +++ b/apps/frontend/Dockerfile @@ -5,6 +5,7 @@ WORKDIR /app COPY package.json package-lock.json tsconfig.base.json ./ COPY apps/auth/package.json ./apps/auth/package.json COPY apps/cli/package.json ./apps/cli/package.json +COPY apps/desktop/package.json ./apps/desktop/package.json COPY apps/frontend/package.json ./apps/frontend/package.json COPY apps/mcp/package.json ./apps/mcp/package.json COPY packages/api-client/package.json ./packages/api-client/package.json diff --git a/apps/frontend/index.html b/apps/frontend/index.html index 9361b0c..a2d492f 100644 --- a/apps/frontend/index.html +++ b/apps/frontend/index.html @@ -10,6 +10,11 @@ Primora + + + + + diff --git a/apps/frontend/package.json b/apps/frontend/package.json index d4b8d55..554d95e 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -1,6 +1,6 @@ { "name": "@primora/frontend", - "version": "0.4.0", + "version": "0.5.0", "private": true, "type": "module", "scripts": { @@ -10,8 +10,8 @@ "test": "vitest run" }, "dependencies": { - "@primora/api-client": "0.4.0", - "@primora/shared-types": "0.4.0", + "@primora/api-client": "0.5.0", + "@primora/shared-types": "0.5.0", "better-auth": "^1.5.6", "solid-js": "^1.9.12" }, @@ -26,6 +26,7 @@ "tailwindcss": "^3.4.17", "typescript": "^5.9.2", "vite": "^8.0.3", + "vite-plugin-pwa": "^1.3.0", "vite-plugin-solid": "^2.11.8", "vitest": "^3.2.4" } diff --git a/apps/frontend/public/apple-touch-icon.png b/apps/frontend/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bd6a038b09b098d842b4185265ca3c3260eb1594 GIT binary patch literal 4054 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 + + + + + + + diff --git a/apps/frontend/public/maskable-512x512.png b/apps/frontend/public/maskable-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..ca1f6661ca020096e9c9146853ec431000a6dd42 GIT binary patch literal 6313 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 literal 0 HcmV?d00001 diff --git a/apps/frontend/public/pwa-192x192.png b/apps/frontend/public/pwa-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..579dd4099e60cc062a6a90289a5dad1dacc52911 GIT binary patch literal 4264 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 literal 0 HcmV?d00001 diff --git a/apps/frontend/public/pwa-512x512.png b/apps/frontend/public/pwa-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..e31f7d90096abd07180eb1731b63c20e5b6c06a3 GIT binary patch literal 12548 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 literal 0 HcmV?d00001 diff --git a/apps/frontend/src/App.tsx b/apps/frontend/src/App.tsx index 96f0681..768156c 100644 --- a/apps/frontend/src/App.tsx +++ b/apps/frontend/src/App.tsx @@ -31,6 +31,7 @@ import { NetworkError, OnboardingModal, ProjectDashboard, + PwaInstallBanner, type PaletteCommand, type ViewType, } from "./components"; @@ -1500,6 +1501,7 @@ export default function App() {
{platformMessage()}
+ ; + userChoice: Promise<{ outcome: "accepted" | "dismissed" }>; +} + +const DISMISS_KEY = "primora_pwa_install_dismissed"; + +export function PwaInstallBanner() { + const [deferred, setDeferred] = createSignal(null); + const [dismissed, setDismissed] = createSignal(localStorage.getItem(DISMISS_KEY) === "1"); + + onMount(() => { + const handler = (event: Event) => { + event.preventDefault(); + // SAFETY: the listener is only attached to "beforeinstallprompt", whose + // event always carries prompt()/userChoice. + setDeferred(event as BeforeInstallPromptEvent); + }; + window.addEventListener("beforeinstallprompt", handler); + onCleanup(() => window.removeEventListener("beforeinstallprompt", handler)); + }); + + const install = async () => { + const event = deferred(); + if (!event) return; + await event.prompt(); + if ((await event.userChoice).outcome === "accepted") setDeferred(null); + }; + + const dismiss = () => { + localStorage.setItem(DISMISS_KEY, "1"); + setDismissed(true); + }; + + return ( + +
+ Install Primora as an app for quick access from your launcher. + + + + +
+
+ ); +} diff --git a/apps/frontend/src/components/index.ts b/apps/frontend/src/components/index.ts index e142c8b..aaed9e3 100644 --- a/apps/frontend/src/components/index.ts +++ b/apps/frontend/src/components/index.ts @@ -13,6 +13,7 @@ export { Modal, ModalFooter } from "./Modal"; export { NotificationCenter, addNotification, removeNotification, clearNotifications, notify } from "./NotificationCenter"; export { OnboardingModal } from "./OnboardingModal"; export { Progress, CircularProgress, Spinner } from "./Progress"; +export { PwaInstallBanner } from "./PwaInstallBanner"; export { ProjectDashboard } from "./ProjectDashboard"; export { Table, DataTable, Pagination } from "./Table"; export { Tabs, TabPanel } from "./Tabs"; diff --git a/apps/frontend/vite.config.ts b/apps/frontend/vite.config.ts index aea493c..cfc67dc 100644 --- a/apps/frontend/vite.config.ts +++ b/apps/frontend/vite.config.ts @@ -1,8 +1,56 @@ import { defineConfig } from "vite"; import solidPlugin from "vite-plugin-solid"; +import { VitePWA } from "vite-plugin-pwa"; export default defineConfig({ - plugins: [solidPlugin()], + plugins: [ + solidPlugin(), + VitePWA({ + registerType: "autoUpdate", + injectRegister: "auto", + manifest: { + name: "Primora", + short_name: "Primora", + description: + "Self-hosted backend console: storage, collections, API keys, audit logs.", + theme_color: "#0b0d11", + background_color: "#0b0d11", + display: "standalone", + start_url: "/", + icons: [ + { src: "pwa-192x192.png", sizes: "192x192", type: "image/png" }, + { src: "pwa-512x512.png", sizes: "512x512", type: "image/png" }, + { + src: "maskable-512x512.png", + sizes: "512x512", + type: "image/png", + purpose: "maskable", + }, + ], + }, + workbox: { + // Cache the app shell only. /api, /auth and /mailpit are live backends — + // never let a service worker answer for them. + navigateFallback: "/index.html", + navigateFallbackDenylist: [/^\/(api|auth|mailpit)(\/|$)/], + runtimeCaching: [ + { + urlPattern: /\/(api|auth|mailpit)(\/|$)/, + handler: "NetworkOnly", + }, + { + // Geist font files + CSS from Google Fonts — long-lived static assets. + urlPattern: /^https:\/\/fonts\.(googleapis|gstatic)\.com\//, + handler: "CacheFirst", + options: { + cacheName: "primora-fonts", + expiration: { maxEntries: 20, maxAgeSeconds: 60 * 60 * 24 * 365 }, + }, + }, + ], + }, + }), + ], server: { host: "0.0.0.0", port: Number(process.env.FRONTEND_PORT ?? 3000), @@ -15,4 +63,3 @@ export default defineConfig({ target: "esnext", }, }); - diff --git a/apps/mcp/package.json b/apps/mcp/package.json index 40f071a..a669f40 100644 --- a/apps/mcp/package.json +++ b/apps/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@primora/mcp", - "version": "0.4.0", + "version": "0.5.0", "publishConfig": { "access": "public" }, @@ -22,7 +22,7 @@ "zod": "^4.1.5" }, "devDependencies": { - "@primora/api-client": "0.4.0", + "@primora/api-client": "0.5.0", "@types/node": "^24.0.0", "esbuild": "^0.27.4", "typescript": "^5.9.2" diff --git a/package-lock.json b/package-lock.json index aa89534..7773e5b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "primora", - "version": "0.4.0", + "version": "0.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "primora", - "version": "0.4.0", + "version": "0.5.0", "workspaces": [ "apps/*", "packages/*" @@ -14,7 +14,7 @@ }, "apps/auth": { "name": "@primora/auth", - "version": "0.4.0", + "version": "0.5.0", "dependencies": { "@hono/node-server": "^1.19.4", "@hono/zod-validator": "^0.7.2", @@ -38,7 +38,7 @@ }, "apps/cli": { "name": "@primora/cli", - "version": "0.4.0", + "version": "0.5.0", "dependencies": { "@clack/prompts": "^1.8.1", "cac": "^7.0.0", @@ -48,7 +48,7 @@ "primora": "dist/cli.js" }, "devDependencies": { - "@primora/api-client": "0.4.0", + "@primora/api-client": "0.5.0", "@types/node": "^24.0.0", "esbuild": "^0.27.4", "typescript": "^5.9.2" @@ -65,12 +65,19 @@ "node": ">=20.19.0" } }, + "apps/desktop": { + "name": "@primora/desktop", + "version": "0.5.0", + "devDependencies": { + "@tauri-apps/cli": "^2.11.4" + } + }, "apps/frontend": { "name": "@primora/frontend", - "version": "0.4.0", + "version": "0.5.0", "dependencies": { - "@primora/api-client": "0.4.0", - "@primora/shared-types": "0.4.0", + "@primora/api-client": "0.5.0", + "@primora/shared-types": "0.5.0", "better-auth": "^1.5.6", "solid-js": "^1.9.12" }, @@ -85,17 +92,14 @@ "tailwindcss": "^3.4.17", "typescript": "^5.9.2", "vite": "^8.0.3", + "vite-plugin-pwa": "^1.3.0", "vite-plugin-solid": "^2.11.8", "vitest": "^3.2.4" } }, - "apps/frontend/node_modules/@primora/shared-types": { - "resolved": "packages/shared-types", - "link": true - }, "apps/mcp": { "name": "@primora/mcp", - "version": "0.4.0", + "version": "0.5.0", "dependencies": { "@modelcontextprotocol/sdk": "^1.30.0", "zod": "^4.1.5" @@ -104,7 +108,7 @@ "primora-mcp": "dist/server.js" }, "devDependencies": { - "@primora/api-client": "0.4.0", + "@primora/api-client": "0.5.0", "@types/node": "^24.0.0", "esbuild": "^0.27.4", "typescript": "^5.9.2" @@ -132,6 +136,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@apideck/better-ajv-errors": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.7.tgz", + "integrity": "sha512-TajUJwGWbDwkCx/CZi7tRE8PVB7simCvKJfHUsSdvps+aTM/PDPP4gkLmKnc+x3CE//y9i/nj74GqdL/hwk7Iw==", + "dev": true, + "dependencies": { + "jsonpointer": "^5.0.1", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, "node_modules/@apidevtools/json-schema-ref-parser": { "version": "11.9.3", "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.9.3.tgz", @@ -171,12 +191,12 @@ "license": "ISC" }, "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -185,9 +205,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, "engines": { "node": ">=6.9.0" @@ -224,13 +244,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", "dev": true, "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -239,14 +259,26 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", + "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -255,37 +287,19 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz", + "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==", "dev": true, "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/traverse": "^7.29.7", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -294,42 +308,200 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz", + "integrity": "sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.11" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz", + "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz", + "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==", + "dev": true, + "dependencies": { + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz", + "integrity": "sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-wrap-function": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz", + "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz", + "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz", + "integrity": "sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helpers": { "version": "7.29.2", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", @@ -344,12 +516,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", "dev": true, "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.29.8" }, "bin": { "parser": "bin/babel-parser.js" @@ -358,6 +530,143 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz", + "integrity": "sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz", + "integrity": "sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.29.7.tgz", + "integrity": "sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz", + "integrity": "sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz", + "integrity": "sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz", + "integrity": "sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz", + "integrity": "sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", @@ -373,6 +682,926 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz", + "integrity": "sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz", + "integrity": "sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz", + "integrity": "sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz", + "integrity": "sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz", + "integrity": "sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz", + "integrity": "sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz", + "integrity": "sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz", + "integrity": "sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz", + "integrity": "sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/template": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz", + "integrity": "sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz", + "integrity": "sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz", + "integrity": "sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz", + "integrity": "sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz", + "integrity": "sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz", + "integrity": "sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz", + "integrity": "sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz", + "integrity": "sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz", + "integrity": "sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz", + "integrity": "sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz", + "integrity": "sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz", + "integrity": "sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz", + "integrity": "sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz", + "integrity": "sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz", + "integrity": "sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.8.tgz", + "integrity": "sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz", + "integrity": "sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz", + "integrity": "sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz", + "integrity": "sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz", + "integrity": "sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz", + "integrity": "sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz", + "integrity": "sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz", + "integrity": "sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz", + "integrity": "sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz", + "integrity": "sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz", + "integrity": "sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz", + "integrity": "sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz", + "integrity": "sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.8.tgz", + "integrity": "sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz", + "integrity": "sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz", + "integrity": "sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz", + "integrity": "sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.8.tgz", + "integrity": "sha512-4S9ksMGVWUshvgK0mKfvZky7leuG5/uoFVwMpAomJ8bMoDJiNHRVmc1EglwW/CmGVSqqWpEbXm9FmbRit22qoA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz", + "integrity": "sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz", + "integrity": "sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz", + "integrity": "sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz", + "integrity": "sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz", + "integrity": "sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz", + "integrity": "sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz", + "integrity": "sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.7.tgz", + "integrity": "sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.29.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.29.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.29.7", + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.29.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.29.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.29.7", + "@babel/plugin-syntax-import-attributes": "^7.29.7", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.29.7", + "@babel/plugin-transform-async-generator-functions": "^7.29.7", + "@babel/plugin-transform-async-to-generator": "^7.29.7", + "@babel/plugin-transform-block-scoped-functions": "^7.29.7", + "@babel/plugin-transform-block-scoping": "^7.29.7", + "@babel/plugin-transform-class-properties": "^7.29.7", + "@babel/plugin-transform-class-static-block": "^7.29.7", + "@babel/plugin-transform-classes": "^7.29.7", + "@babel/plugin-transform-computed-properties": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-dotall-regex": "^7.29.7", + "@babel/plugin-transform-duplicate-keys": "^7.29.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-dynamic-import": "^7.29.7", + "@babel/plugin-transform-explicit-resource-management": "^7.29.7", + "@babel/plugin-transform-exponentiation-operator": "^7.29.7", + "@babel/plugin-transform-export-namespace-from": "^7.29.7", + "@babel/plugin-transform-for-of": "^7.29.7", + "@babel/plugin-transform-function-name": "^7.29.7", + "@babel/plugin-transform-json-strings": "^7.29.7", + "@babel/plugin-transform-literals": "^7.29.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.29.7", + "@babel/plugin-transform-member-expression-literals": "^7.29.7", + "@babel/plugin-transform-modules-amd": "^7.29.7", + "@babel/plugin-transform-modules-commonjs": "^7.29.7", + "@babel/plugin-transform-modules-systemjs": "^7.29.7", + "@babel/plugin-transform-modules-umd": "^7.29.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-new-target": "^7.29.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.29.7", + "@babel/plugin-transform-numeric-separator": "^7.29.7", + "@babel/plugin-transform-object-rest-spread": "^7.29.7", + "@babel/plugin-transform-object-super": "^7.29.7", + "@babel/plugin-transform-optional-catch-binding": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/plugin-transform-private-methods": "^7.29.7", + "@babel/plugin-transform-private-property-in-object": "^7.29.7", + "@babel/plugin-transform-property-literals": "^7.29.7", + "@babel/plugin-transform-regenerator": "^7.29.7", + "@babel/plugin-transform-regexp-modifiers": "^7.29.7", + "@babel/plugin-transform-reserved-words": "^7.29.7", + "@babel/plugin-transform-shorthand-properties": "^7.29.7", + "@babel/plugin-transform-spread": "^7.29.7", + "@babel/plugin-transform-sticky-regex": "^7.29.7", + "@babel/plugin-transform-template-literals": "^7.29.7", + "@babel/plugin-transform-typeof-symbol": "^7.29.7", + "@babel/plugin-transform-unicode-escapes": "^7.29.7", + "@babel/plugin-transform-unicode-property-regex": "^7.29.7", + "@babel/plugin-transform-unicode-regex": "^7.29.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.29.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/runtime": { "version": "7.29.2", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", @@ -384,31 +1613,31 @@ } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", "debug": "^4.3.1" }, "engines": { @@ -416,13 +1645,13 @@ } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1156,6 +2385,15 @@ "zod": "^3.25.0 || ^4.0.0" } }, + "node_modules/@isaacs/cliui": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -1185,6 +2423,16 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", @@ -1361,6 +2609,10 @@ "resolved": "packages/client", "link": true }, + "node_modules/@primora/desktop": { + "resolved": "apps/desktop", + "link": true + }, "node_modules/@primora/frontend": { "resolved": "apps/frontend", "link": true @@ -1369,6 +2621,10 @@ "resolved": "apps/mcp", "link": true }, + "node_modules/@primora/shared-types": { + "resolved": "packages/shared-types", + "link": true + }, "node_modules/@redis/bloom": { "version": "5.11.0", "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-5.11.0.tgz", @@ -1678,6 +2934,139 @@ "integrity": "sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==", "dev": true }, + "node_modules/@rollup/plugin-babel": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.1.0.tgz", + "integrity": "sha512-dFZNuFD2YRcoomP4oYf+DvQNSUA9ih+A3vUqopQx5EdtPGo3WBnQcI/S8pwpz91UsGfL0HsMSOlaMld8HrbubA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz", + "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.3.tgz", + "integrity": "sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-1.0.0.tgz", + "integrity": "sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ==", + "dev": true, + "dependencies": { + "serialize-javascript": "^7.0.3", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", + "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.60.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.0.tgz", @@ -2056,6 +3445,211 @@ "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" } }, + "node_modules/@tauri-apps/cli": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.11.4.tgz", + "integrity": "sha512-R8xGtMpwyetawSqm9kYOuMmEqkhUbvcUy8n0aNXIxollKBLESUu5f4Fx+64hgASYm1H+jSWq6jCW6zqTnH6hqQ==", + "dev": true, + "bin": { + "tauri": "tauri.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + }, + "optionalDependencies": { + "@tauri-apps/cli-darwin-arm64": "2.11.4", + "@tauri-apps/cli-darwin-x64": "2.11.4", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.11.4", + "@tauri-apps/cli-linux-arm64-gnu": "2.11.4", + "@tauri-apps/cli-linux-arm64-musl": "2.11.4", + "@tauri-apps/cli-linux-riscv64-gnu": "2.11.4", + "@tauri-apps/cli-linux-x64-gnu": "2.11.4", + "@tauri-apps/cli-linux-x64-musl": "2.11.4", + "@tauri-apps/cli-win32-arm64-msvc": "2.11.4", + "@tauri-apps/cli-win32-ia32-msvc": "2.11.4", + "@tauri-apps/cli-win32-x64-msvc": "2.11.4" + } + }, + "node_modules/@tauri-apps/cli-darwin-arm64": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.11.4.tgz", + "integrity": "sha512-1ryOF3ZhpZ/nemHV5zVwBQBz9jDGKmKPvWPADOhc83ig0P4bMc2iER4NbC6r9sjeIZ6RVQ4g3RZIYvezhcl4TQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-darwin-x64": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.11.4.tgz", + "integrity": "sha512-uFsGQAAfuyz1k/yGLmkWfkBlgKAqZfxqlHmLWx81QU27RJWfmbNHCIq8T8w1e+VClleIuZUjpHWfoE4E3DLo3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.11.4.tgz", + "integrity": "sha512-IaHZn5CdBL21oUmjiVOS1ctw6Ip1O0pjp70FwOWmYz1myWe0SY96ZIj2FYf7pT0m8bI2h/hrs5ZbEXXh44/MkQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-gnu": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.11.4.tgz", + "integrity": "sha512-N41/ukTRVe6XSuUTESuFdGeOW2i7k62tK+6gHK5Kd5/q5RPvvi19GaWAVPPb9u95HSGmTChSolBfzynUsssFaA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-musl": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.11.4.tgz", + "integrity": "sha512-v277UnT/fB64xAfSroL5N3Km3tLmvATWqJJw/wRI+g6o+HkeD0slyE7gOhNs1MbjE41R7bQOTxMVoL3aomUJmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-riscv64-gnu": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-riscv64-gnu/-/cli-linux-riscv64-gnu-2.11.4.tgz", + "integrity": "sha512-qqgNkQ2u1yZHxjhxsZaxUtRDW8dIqIYm33rx/mzwQv0SfY9x1B+iraj8vWeFiXjjSVVhEMepXSOts1TqPzvXNQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-gnu": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.11.4.tgz", + "integrity": "sha512-2VRNWl84FOH0m2giiDkO2h0QXlcMJeX+zJDpI5kDIQAx6s+geF3v48F4DXfJez4GS/FdoDGnPnw1C2iYGbQ7bQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-musl": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.11.4.tgz", + "integrity": "sha512-o9GyhYor/nc7xarmwDE3ka2szuW3uuZzXjHWh64Q8YX5AtSgxdQkFWzrY4O8KiGtVNvFBI14H3Q49Qj5TOIP/A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-arm64-msvc": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.11.4.tgz", + "integrity": "sha512-ld5Ehb598m0VkYyylRPNeCFsBe/km0jxis6KgMpl3IGY6I/i1RwQXO05I1AsXUXO2WC6AvB/Lw4qTf/asiuEiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-ia32-msvc": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.11.4.tgz", + "integrity": "sha512-12Hxi0XX/H5VFxO/bGgHkFWhml9VMgEOu9CidjeCeTNQ1l6fpUlbiGgSP7CLI3PFtW9/FfbeHieZ+kyWK5H7CA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-x64-msvc": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.11.4.tgz", + "integrity": "sha512-+vDiqBIU5dMISg/wNvX3sF+ZHfgJGJ5T0AcO+EHNXV9GGAG+P5fzodlDXD3QdKCRgZxMoCm5PPvj3BqLNjBthw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@testing-library/dom": { "version": "10.4.1", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", @@ -2103,6 +3697,21 @@ "dev": true, "license": "MIT" }, + "node_modules/@trickfilm400/rollup-plugin-off-main-thread": { + "version": "3.0.0-pre1", + "resolved": "https://registry.npmjs.org/@trickfilm400/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-3.0.0-pre1.tgz", + "integrity": "sha512-/67zpWDBLV+oYAEL682s1ktXL0HgqX76f6gaVGkGnVZlBbm1zd0v4Bz8MFF2GGhoX9rvfq3KSQHubFHwa6w6/Q==", + "dev": true, + "dependencies": { + "ejs": "^3.1.10", + "json5": "^2.2.3", + "magic-string": "^0.30.21", + "string.prototype.matchall": "^4.0.12" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", @@ -2218,6 +3827,18 @@ "pg-types": "^2.2.0" } }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true + }, "node_modules/@vitest/expect": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", @@ -2312,6 +3933,18 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", @@ -2417,6 +4050,43 @@ "dequal": "^2.0.3" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -2426,6 +4096,30 @@ "node": ">=12" } }, + "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 + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "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, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/autoprefixer": { "version": "10.4.27", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", @@ -2462,6 +4156,21 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/babel-plugin-jsx-dom-expressions": { "version": "0.40.6", "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.40.6.tgz", @@ -2490,6 +4199,45 @@ "node": ">=6.9.0" } }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", + "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/babel-preset-solid": { "version": "1.9.12", "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.9.12.tgz", @@ -2508,10 +4256,19 @@ } } }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/baseline-browser-mapping": { - "version": "2.10.11", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.11.tgz", - "integrity": "sha512-DAKrHphkJyiGuau/cFieRYhcTFeK/lBuD++C7cZ6KZHbMhBrisoi+EvhQ5RZrIfV5qwsW8kgQ07JIC+MDJRAhg==", + "version": "2.11.24", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.24.tgz", + "integrity": "sha512-hYrgxie335U08WqICoGqKRzV1HFXv6zdxwJE4ekCb80CM9a0SVVsN4QPwT67RraRo+9h8IATk6uxHJw7QSkdOg==", "dev": true, "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -2705,6 +4462,18 @@ "url": "https://opencollective.com/express" } }, + "node_modules/brace-expansion": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", + "dev": true, + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -2718,9 +4487,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.0.tgz", + "integrity": "sha512-3GSvyjvDI4Dur1Meg2BekJquu5uF+9R9a1+5M1Mde192eZoXbeXjzgOsgqPS2V8D5wrrip0gR5Hf/GhWQ9ZzaA==", "dev": true, "funding": [ { @@ -2737,11 +4506,11 @@ } ], "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" + "baseline-browser-mapping": "^2.11.23", + "caniuse-lite": "^1.0.30001810", + "electron-to-chromium": "^1.5.427", + "node-releases": "^2.0.55", + "update-browserslist-db": "^1.3.3" }, "bin": { "browserslist": "cli.js" @@ -2750,6 +4519,12 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -2767,6 +4542,24 @@ "node": ">=8" } }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -2816,9 +4609,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001781", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz", - "integrity": "sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==", + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", "dev": true, "funding": [ { @@ -2913,6 +4706,15 @@ "node": ">=18" } }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/content-disposition": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", @@ -2955,6 +4757,22 @@ "node": ">=6.6.0" } }, + "node_modules/core-js-compat": { + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.50.0.tgz", + "integrity": "sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==", + "dev": true, + "dependencies": { + "browserslist": "^4.28.7" + }, + "engines": { + "node": ">=6.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/cors": { "version": "2.8.6", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", @@ -2992,6 +4810,15 @@ "node": ">= 8" } }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", @@ -3081,6 +4908,57 @@ "node": ">=18" } }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -3113,6 +4991,49 @@ "node": ">=6" } }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "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, + "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/defu": { "version": "6.1.4", "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", @@ -3182,10 +5103,25 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, + "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, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { - "version": "1.5.328", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.328.tgz", - "integrity": "sha512-QNQ5l45DzYytThO21403XN3FvK0hOkWDG8viNf6jqS42msJ8I4tGDSpBCgvDRRPnkffafiwAym2X2eHeGD2V0w==", + "version": "1.5.430", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.430.tgz", + "integrity": "sha512-e1QEj72Y4zd8RlNZVmoTg+iCOSVwpk05IOiiQwdrkwCSVlZfPthevErhE+nckGd2YbsXfp1SkisznhGVIXP2NQ==", "dev": true }, "node_modules/encodeurl": { @@ -3208,6 +5144,92 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract-get": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-abstract-get/-/es-abstract-get-1.0.0.tgz", + "integrity": "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.2", + "is-callable": "^1.2.7", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -3241,6 +5263,41 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.4.tgz", + "integrity": "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==", + "dev": true, + "dependencies": { + "es-abstract-get": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "is-callable": "^1.2.7", + "is-date-object": "^1.1.0", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/esbuild": { "version": "0.27.4", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", @@ -3305,6 +5362,27 @@ "@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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-4.6.0.tgz", + "integrity": "sha512-lW6is4T1NFOYnmqGZIfvixqj7A7sSvScF+DN8EK6K58xI5MZ5UvYe0GjopxOXQtZvUn4eDdVuZ8XSoYWTMEKwA==", + "dev": true, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/bgub/eta?sponsor=1" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -3434,6 +5512,12 @@ "node": ">= 6" } }, + "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 + }, "node_modules/fast-sha256": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/fast-sha256/-/fast-sha256-1.3.0.tgz", @@ -3484,6 +5568,42 @@ "reusify": "^1.0.4" } }, + "node_modules/filelist": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/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 + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz", + "integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -3516,6 +5636,37 @@ "url": "https://opencollective.com/express" } }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -3581,6 +5732,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/function.prototype.name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.2.0.tgz", + "integrity": "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2", + "hasown": "^2.0.4", + "is-callable": "^1.2.7", + "is-document.all": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -3613,6 +5805,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -3625,6 +5823,23 @@ "node": ">= 0.4" } }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-tsconfig": { "version": "4.13.7", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz", @@ -3637,6 +5852,30 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/glob": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "deprecated": "Old versions of glob 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 exorbitant rates) by contacting i@izs.me", + "dev": true, + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -3649,6 +5888,22 @@ "node": ">=10.13.0" } }, + "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, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -3687,6 +5942,45 @@ "uglify-js": "^3.1.4" } }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -3698,10 +5992,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "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==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dependencies": { "function-bind": "^1.1.2" }, @@ -3796,6 +6105,12 @@ "node": ">=0.10.0" } }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -3811,6 +6126,20 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ip-address": { "version": "10.7.2", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.2.tgz", @@ -3827,6 +6156,57 @@ "node": ">= 0.10" } }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -3839,6 +6219,34 @@ "node": ">=8" } }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-core-module": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", @@ -3854,6 +6262,54 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-document.all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-document.all/-/is-document.all-1.0.0.tgz", + "integrity": "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3863,6 +6319,40 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -3875,6 +6365,36 @@ "node": ">=0.10.0" } }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "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", @@ -3884,6 +6404,31 @@ "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "engines": { + "node": ">=0.10.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", @@ -3896,6 +6441,163 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-what": { "version": "4.1.16", "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", @@ -3908,11 +6610,49 @@ "url": "https://github.com/sponsors/mesqueeb" } }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/jackspeak": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^9.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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, + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jiti": { "version": "1.21.7", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", @@ -4071,6 +6811,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/kysely": { "version": "0.28.14", "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.28.14.tgz", @@ -4079,6 +6828,15 @@ "node": ">=20.0.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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/lightningcss": { "version": "1.32.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", @@ -4346,6 +7104,12 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, "node_modules/loupe": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", @@ -4490,6 +7254,21 @@ "mini-svg-data-uri": "cli.js" } }, + "node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", @@ -4499,6 +7278,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -4600,10 +7388,13 @@ } }, "node_modules/node-releases": { - "version": "2.0.36", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", - "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", - "dev": true + "version": "2.0.55", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.55.tgz", + "integrity": "sha512-mIrE/Cw9y+9Au6dS5vDKDhQza9YvG6w+ZrS6X+ZzA7yFW/soAeaups4Qzn1bL6g5FVy8WtP79+0j82oPIbqRjQ==", + "dev": true, + "engines": { + "node": ">=18" + } }, "node_modules/nodemailer": { "version": "7.0.13", @@ -4657,6 +7448,35 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -4692,6 +7512,30 @@ "openapi": "bin/index.js" } }, + "node_modules/own-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz", + "integrity": "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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 + }, "node_modules/parse5": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", @@ -4726,6 +7570,31 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "dev": true, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/path-to-regexp": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", @@ -4874,6 +7743,15 @@ "node": ">=16.20.0" } }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postal-mime": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/postal-mime/-/postal-mime-2.7.3.tgz", @@ -5070,6 +7948,18 @@ "node": ">=0.10.0" } }, + "node_modules/pretty-bytes": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", + "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", + "dev": true, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -5244,6 +8134,101 @@ "node": ">= 18" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.2.tgz", + "integrity": "sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==", + "dev": true, + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -5438,6 +8423,58 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -5491,6 +8528,15 @@ "url": "https://opencollective.com/express" } }, + "node_modules/serialize-javascript": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.1.1.tgz", + "integrity": "sha512-k3CMsaIvvdSwm8oLB4MXSl0wH2/cwlH7xGcnRd2DaeRmBkbzYmyT8j0tsX60DwD1eRwHTpNpH8ljKu9oUT1MeQ==", + "dev": true, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/seroval": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.5.1.tgz", @@ -5533,6 +8579,52 @@ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.0.tgz", "integrity": "sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==" }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -5631,11 +8723,32 @@ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "devOptional": true }, + "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, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, + "node_modules/smob": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.2.tgz", + "integrity": "sha512-RQsvleCbF8cVHEv+xuDGaA4pOizFqJ0GgjtMSRo6oP8pnN7WsigHgVGey6aILRBKv4W2YOMHLqbKdnB6hpB9fw==", + "dev": true, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/solid-js": { "version": "1.9.12", "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.12.tgz", @@ -5678,6 +8791,16 @@ "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, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -5715,6 +8838,126 @@ "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", "devOptional": true }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.1.0.tgz", + "integrity": "sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.2", + "get-intrinsic": "^1.3.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.4", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", + "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "has-property-descriptors": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", + "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -5842,6 +9085,57 @@ "node": ">=14.0.0" } }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.51.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.51.2.tgz", + "integrity": "sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -6037,6 +9331,18 @@ "fsevents": "~2.3.3" } }, + "node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/type-is": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", @@ -6066,6 +9372,80 @@ "url": "https://opencollective.com/express" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", + "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "possible-typed-array-names": "^1.1.0", + "reflect.getprototypeof": "^1.0.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", @@ -6092,12 +9472,82 @@ "node": ">=0.8.0" } }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/undici-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 }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -6115,10 +9565,20 @@ "node": ">= 0.8" } }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, "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==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", + "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", "dev": true, "funding": [ { @@ -6373,6 +9833,36 @@ } } }, + "node_modules/vite-plugin-pwa": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-1.3.0.tgz", + "integrity": "sha512-c5kMgN+ITrOtHXp8PAtk2uOIEea6XjP/unCGxOWWBzQ6qa65qj/awHg0wf+QF9E/2u9vh86LqxPwzEPNbM2r5A==", + "dev": true, + "dependencies": { + "debug": "^4.3.6", + "pretty-bytes": "^6.1.1", + "tinyglobby": "^0.2.10", + "workbox-build": "^7.4.1", + "workbox-window": "^7.4.1" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vite-pwa/assets-generator": "^1.0.0", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "workbox-build": "^7.4.1", + "workbox-window": "^7.4.1" + }, + "peerDependenciesMeta": { + "@vite-pwa/assets-generator": { + "optional": true + } + } + }, "node_modules/vite-plugin-solid": { "version": "2.11.11", "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.11.11.tgz", @@ -6689,6 +10179,91 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz", + "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/why-is-node-running": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", @@ -6711,6 +10286,233 @@ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, + "node_modules/workbox-background-sync": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.4.1.tgz", + "integrity": "sha512-HhT7KE8tOWDm02wRNshXUnUPofMlhenF2DBdUnDPOubhizzPeItkYTmAB6td1Z2cjYPa98vzEiPLEuzn5hN66g==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.4.1.tgz", + "integrity": "sha512-uAlgslKLvbQY+suirIdnBCSYrcgBhjp81Nj4l1lj/Jmj0MJO2CJERnCJjT0GFVwmReV0N+zs78K6gqd5gr9/+A==", + "dev": true, + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-build": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.4.1.tgz", + "integrity": "sha512-SDhxIvEAde9Gy/5w4Yo1Jh/M49Z0qE3q0oteyE8zGq0DScxFqVBcCtIXFuLtmtxRQZCMbf0prco4VyEu3KBQuw==", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.24.4", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-replace": "^6.0.3", + "@rollup/plugin-terser": "^1.0.0", + "@trickfilm400/rollup-plugin-off-main-thread": "^3.0.0-pre1", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "eta": "^4.5.1", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^11.0.1", + "pretty-bytes": "^5.3.0", + "rollup": "^4.53.3", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "7.4.1", + "workbox-broadcast-update": "7.4.1", + "workbox-cacheable-response": "7.4.1", + "workbox-core": "7.4.1", + "workbox-expiration": "7.4.1", + "workbox-google-analytics": "7.4.1", + "workbox-navigation-preload": "7.4.1", + "workbox-precaching": "7.4.1", + "workbox-range-requests": "7.4.1", + "workbox-recipes": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1", + "workbox-streams": "7.4.1", + "workbox-sw": "7.4.1", + "workbox-window": "7.4.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/workbox-build/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, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0.tgz", + "integrity": "sha512-d8EqvL+k/SOXCreS/SUzg2ciyHqBBLcN/yuRjFsbvVhHTE2pgei7oAhmPM7kWFbkX6OSMQfUq4KbkF3au9lhYQ==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.4.1.tgz", + "integrity": "sha512-8xaFoJdDc2OjrlbbL3gEeBO1WKcMwRqwLRupgqahYXu75yXajPLuwrbXMrIGZuWYXrQwk0xDjOxZ/ujCy/oJYw==", + "dev": true, + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-core": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.4.1.tgz", + "integrity": "sha512-DT+vu46eh/2vRsSHTY4Xmc32Z1rr9PRlQUXr1Dx30ZuXRWwOsvZgGgcwxcasubQLQmbTNYZjv44LkBAQ4tT5tQ==", + "dev": true + }, + "node_modules/workbox-expiration": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.4.1.tgz", + "integrity": "sha512-lRKUF7b+OGbeXkQk1s6MHXOa3d7Xxf7Of31W6c6hCfipfIyrtdWZ89stq21AHZMaoG7VNFoHply4Ox+rU31TWg==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-google-analytics": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.4.1.tgz", + "integrity": "sha512-Mks1JwLEt++ZAkF6sS1OpSh9RtAMIsiDgRpK+codiHGIPXeaUOgi4cPc3GFadUl8V5QPeypEk8Oxgl3HlwVzHw==", + "dev": true, + "dependencies": { + "workbox-background-sync": "7.4.1", + "workbox-core": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.4.1.tgz", + "integrity": "sha512-C4KVsjPcYKJOhr631AxR9XoG2rLF3QiTk5aMv36MXOjtWvm8axwNFAtKUPGsWUwLXXAMgYM1En7fsvndaXeXRQ==", + "dev": true, + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-precaching": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.4.1.tgz", + "integrity": "sha512-cdr/9qByww7yzEp7zg/qI4ukUrrNjQLgN+ONQRpjy/VqGQXwkgHwr00KksGJK8v0VifwDXBb8a4cWNZH71jn3Q==", + "dev": true, + "dependencies": { + "workbox-core": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1" + } + }, + "node_modules/workbox-range-requests": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.4.1.tgz", + "integrity": "sha512-7i2oxAUE82gHdAJBCAQ04JzNOdRPqzuOzGfoUyJpFSmeqBNYGPrAH8GPoPjUQTfp+NycwrD2H68VtuF8qxv0vQ==", + "dev": true, + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-recipes": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.4.1.tgz", + "integrity": "sha512-gnbVfmV4/TtmQaM4x9AtuXhcdstJsep3XMVeztOrQVPT+R6+6DeBjGTCQ7fFCXm+4GEHUA5VEBTyi5+4gWGeog==", + "dev": true, + "dependencies": { + "workbox-cacheable-response": "7.4.1", + "workbox-core": "7.4.1", + "workbox-expiration": "7.4.1", + "workbox-precaching": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1" + } + }, + "node_modules/workbox-routing": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.4.1.tgz", + "integrity": "sha512-yubJGErZOusuidAenaL5ypfhQOa7urxP/f8E0ws7FPb4039RiWXUWBAyUkmUoOL/BcQGen3h0J8872d51IYxtA==", + "dev": true, + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-strategies": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.4.1.tgz", + "integrity": "sha512-GZxpaw9NbmOelj7667uZ2kpk5BFpOGbO4X0qjwh5ls8XQ8C+Lha5LQchTiUzsTFSS+NlUpftYAyOVXvQUrcqOQ==", + "dev": true, + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-streams": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.4.1.tgz", + "integrity": "sha512-HWWtraKUbJknd9kgqGcpQ3G114HOPYvqs8HaJMDs2ebLNAimDkVDaWfAXE6Ybl+m8U6KsCE6pWyLYuigWmnAXw==", + "dev": true, + "dependencies": { + "workbox-core": "7.4.1", + "workbox-routing": "7.4.1" + } + }, + "node_modules/workbox-sw": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.4.1.tgz", + "integrity": "sha512-fez5f2DUlDJWTFYkCWQpY10N8gtztd849NswCbVFk0QlcSM4HT5A8x4g4ii650yem4I8tHY0R7JZahwp3ltIPw==", + "dev": true + }, + "node_modules/workbox-window": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.4.1.tgz", + "integrity": "sha512-notZDH2u8VXaqyuD7xaqIfEFi6SRM4SUSd7ewe9PDsVqADuepxX2ZMY3uvuZGxzY5ZOsGC/vD3A/3smFtJt4/A==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "7.4.1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -6787,7 +10589,7 @@ }, "packages/api-client": { "name": "@primora/api-client", - "version": "0.4.0", + "version": "0.5.0", "dependencies": { "cross-fetch": "^4.1.0" }, @@ -6797,11 +10599,11 @@ }, "packages/client": { "name": "@primora/client", - "version": "0.4.0" + "version": "0.5.0" }, "packages/shared-types": { "name": "@primora/shared-types", - "version": "0.4.0" + "version": "0.5.0" } } } diff --git a/package.json b/package.json index 33f284d..bd2a198 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "primora", - "version": "0.4.0", + "version": "0.5.0", "private": true, "packageManager": "npm@9.2.0", "workspaces": [ diff --git a/packages/api-client/package.json b/packages/api-client/package.json index c3af81f..c769fce 100644 --- a/packages/api-client/package.json +++ b/packages/api-client/package.json @@ -1,6 +1,6 @@ { "name": "@primora/api-client", - "version": "0.4.0", + "version": "0.5.0", "private": true, "type": "module", "main": "./src/index.ts", diff --git a/packages/client/package.json b/packages/client/package.json index d701160..c97bed4 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@primora/client", - "version": "0.4.0", + "version": "0.5.0", "private": true, "type": "module", "main": "./src/index.ts", diff --git a/packages/shared-types/package.json b/packages/shared-types/package.json index 09cfb77..1588b4d 100644 --- a/packages/shared-types/package.json +++ b/packages/shared-types/package.json @@ -1,6 +1,6 @@ { "name": "@primora/shared-types", - "version": "0.4.0", + "version": "0.5.0", "private": true, "type": "module", "main": "./src/index.ts",