From 43f15962f7972cc0baa05d2f8b090d7befb55da2 Mon Sep 17 00:00:00 2001 From: Yuri Karamian Date: Mon, 17 Aug 2026 17:03:01 +0200 Subject: [PATCH] Revert "chore(release): prepare v1.3.5" This reverts commit ade146f9f36fc285cb9c3ed2da06f35866c60dac. --- .gitignore | 3 + .gitlab-ci.yml | 44 - README.md | 16 +- package.json | 86 +- pnpm-lock.yaml | 2278 +++++++++++---------- src-tauri/Cargo.lock | 2504 ++++++++++++++---------- src-tauri/Cargo.toml | 6 +- src-tauri/build.rs | 2 +- src-tauri/capabilities/default.json | 23 + src-tauri/src/ai.rs | 44 +- src-tauri/src/backup.rs | 61 +- src-tauri/src/commands.rs | 543 ++--- src-tauri/src/history.rs | 82 +- src-tauri/src/lib.rs | 15 +- src-tauri/src/main.rs | 2 +- src-tauri/src/search/mod.rs | 22 +- src-tauri/src/sync.rs | 33 +- src-tauri/src/types.rs | 5 +- src-tauri/src/vault/frontmatter.rs | 10 +- src-tauri/src/vault/import.rs | 84 +- src-tauri/src/vault/operations.rs | 383 +--- src-tauri/tauri.conf.json | 4 +- src/lib/api.ts | 2 +- src/lib/components/Editor.svelte | 126 +- tests/clear-formatting.test.mjs | 164 -- tests/code-block-input-scroll.test.mjs | 95 - tests/editor-trash-placement.test.mjs | 27 - tests/mixed-lists.test.mjs | 80 - tests/note-drag.test.mjs | 28 - tests/note-link-paths.test.mjs | 117 -- tests/note-switcher.test.mjs | 120 -- tests/notebook-icons.test.mjs | 33 - tests/sidebar-mobile-actions.test.mjs | 31 - tests/startup-view.test.mjs | 60 - tests/system-theme-pair.test.mjs | 24 - 35 files changed, 3179 insertions(+), 3978 deletions(-) delete mode 100644 .gitlab-ci.yml delete mode 100644 tests/clear-formatting.test.mjs delete mode 100644 tests/code-block-input-scroll.test.mjs delete mode 100644 tests/editor-trash-placement.test.mjs delete mode 100644 tests/mixed-lists.test.mjs delete mode 100644 tests/note-drag.test.mjs delete mode 100644 tests/note-link-paths.test.mjs delete mode 100644 tests/note-switcher.test.mjs delete mode 100644 tests/notebook-icons.test.mjs delete mode 100644 tests/sidebar-mobile-actions.test.mjs delete mode 100644 tests/startup-view.test.mjs delete mode 100644 tests/system-theme-pair.test.mjs diff --git a/.gitignore b/.gitignore index a468692..d73cd0a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,9 @@ bun.lockb /.svelte-kit /build +# Local tests +/tests/ + # Nix /result diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 72b3036..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,44 +0,0 @@ -stages: - - verify - -frontend: - stage: verify - image: node:24-bookworm - before_script: - - corepack enable - - corepack prepare pnpm@11.18.0 --activate - - pnpm config set store-dir .pnpm-store - - pnpm install --frozen-lockfile - script: - - pnpm test - - pnpm check - - pnpm build - - pnpm audit --audit-level=high - cache: - key: - files: - - pnpm-lock.yaml - paths: - - .pnpm-store/ - -rust: - stage: verify - image: rust:1.97-bookworm - variables: - CARGO_HOME: "$CI_PROJECT_DIR/.cargo" - before_script: - - apt-get update - - apt-get install -y --no-install-recommends libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf - - rustup component add clippy rustfmt - script: - - cargo fmt --manifest-path src-tauri/Cargo.toml -- --check - - cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings - - cargo test --manifest-path src-tauri/Cargo.toml - cache: - key: - files: - - src-tauri/Cargo.lock - paths: - - src-tauri/target/ - - .cargo/registry/ - - .cargo/git/ diff --git a/README.md b/README.md index b5c007c..d7f103c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # HelixNotes [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](https://gitlab.com/ArkHost/HelixNotes/-/blob/main/LICENSE) -[![Latest Release](https://img.shields.io/badge/release-v1.3.5-green)](https://gitlab.com/ArkHost/HelixNotes/-/releases/v1.3.5) +[![Latest Release](https://img.shields.io/badge/release-v1.3.4-green)](https://gitlab.com/ArkHost/HelixNotes/-/releases/v1.3.4) [![Website](https://img.shields.io/badge/web-helixnotes.com-purple)](https://helixnotes.com) [![Platform](https://img.shields.io/badge/platform-Linux%20%7C%20Windows%20%7C%20macOS%20%7C%20Android-lightgrey)]() @@ -10,7 +10,7 @@ A local markdown note-taking app built with Tauri, SvelteKit, and Rust. Your notes are stored as standard Markdown files on your local filesystem. No cloud, no lock-in. -## Download (v1.3.5) +## Download (v1.3.4) ### Linux @@ -18,7 +18,7 @@ No cloud, no lock-in. The AppImage works only on Fedora 43+, Arch Linux, and openSUSE Tumbleweed (x86_64). -[Download AppImage](https://download.helixnotes.com/releases/v1.3.5/HelixNotes_1.3.5_amd64.AppImage) +[Download AppImage](https://download.helixnotes.com/releases/v1.3.4/HelixNotes_1.3.4_amd64.AppImage) #### Distro-specific packages @@ -108,16 +108,16 @@ sudo eopkg it helixnotes #### Manual package downloads -- [.deb](https://download.helixnotes.com/releases/v1.3.5/HelixNotes_1.3.5_amd64.deb) (Ubuntu 22.04+) -- [.rpm](https://download.helixnotes.com/releases/v1.3.5/HelixNotes-1.3.5-1.x86_64.rpm) +- [.deb](https://download.helixnotes.com/releases/v1.3.4/HelixNotes_1.3.4_amd64.deb) (Ubuntu 22.04+) +- [.rpm](https://download.helixnotes.com/releases/v1.3.4/HelixNotes-1.3.4-1.x86_64.rpm) ### Windows -[Download Installer](https://download.helixnotes.com/releases/v1.3.5/HelixNotes_1.3.5_x64-setup.exe) (Windows 10/11) +[Download Installer](https://download.helixnotes.com/releases/v1.3.4/HelixNotes_1.3.4_x64-setup.exe) (Windows 10/11) ### macOS -[Download .dmg (Apple Silicon)](https://download.helixnotes.com/releases/v1.3.5/HelixNotes_1.3.5_aarch64.dmg) (M-series Macs) +[Download .dmg (Apple Silicon)](https://download.helixnotes.com/releases/v1.3.4/HelixNotes_1.3.4_aarch64.dmg) (M-series Macs) > **"HelixNotes is damaged and can't be opened"?** The app isn't damaged. The macOS build isn't notarized by Apple yet, so Gatekeeper blocks it on Apple Silicon. Run this once in Terminal, then open it normally (you'll need to redo it after each update): > @@ -127,7 +127,7 @@ sudo eopkg it helixnotes ### Android -[Download APK](https://download.helixnotes.com/releases/v1.3.5/HelixNotes_1.3.5_android.apk) +[Download APK](https://download.helixnotes.com/releases/v1.3.4/HelixNotes_1.3.4_android.apk) --- diff --git a/package.json b/package.json index 6dc8639..536a7d2 100644 --- a/package.json +++ b/package.json @@ -2,75 +2,71 @@ "name": "helixnotes", "private": true, "license": "AGPL-3.0-or-later", - "version": "1.3.5", + "version": "1.3.4", "type": "module", "scripts": { "dev": "vite dev", "build": "vite build", "preview": "vite preview", "prepare": "svelte-kit sync || echo ''", - "test": "node --test \"tests/*.test.mjs\"", - "test:rust": "cargo test --manifest-path src-tauri/Cargo.toml", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint:rust": "cargo fmt --manifest-path src-tauri/Cargo.toml -- --check && cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings", "tauri": "tauri", "tauri:dev": "tauri dev", "tauri:build": "tauri build" }, "devDependencies": { - "@sveltejs/adapter-auto": "^7.0.1", + "@sveltejs/adapter-auto": "^7.0.0", "@sveltejs/adapter-static": "^3.0.10", - "@sveltejs/kit": "^2.70.2", + "@sveltejs/kit": "^2.50.2", "@sveltejs/vite-plugin-svelte": "^6.2.4", - "@tailwindcss/postcss": "^4.3.3", - "@tailwindcss/vite": "^4.3.3", - "@tauri-apps/cli": "^2.11.4", - "@types/node": "^26.2.0", - "svelte": "^5.56.9", - "svelte-check": "^4.7.6", - "tailwindcss": "^4.3.3", + "@tailwindcss/postcss": "^4.1.18", + "@tailwindcss/vite": "^4.1.18", + "@tauri-apps/cli": "^2.10.0", + "svelte": "^5.49.2", + "svelte-check": "^4.3.6", + "tailwindcss": "^4.1.18", "typescript": "^5.9.3", - "vite": "^7.3.6" + "vite": "^7.3.1" }, "dependencies": { - "@tauri-apps/api": "^2.11.1", - "@tauri-apps/plugin-dialog": "^2.7.2", - "@tauri-apps/plugin-fs": "^2.5.1", - "@tauri-apps/plugin-opener": "^2.5.4", - "@tauri-apps/plugin-updater": "^2.10.1", - "@tiptap/core": "^3.30.1", - "@tiptap/extension-code-block-lowlight": "^3.30.1", - "@tiptap/extension-color": "^3.30.1", - "@tiptap/extension-details": "^3.30.1", - "@tiptap/extension-highlight": "^3.30.1", - "@tiptap/extension-image": "^3.30.1", - "@tiptap/extension-link": "^3.30.1", - "@tiptap/extension-placeholder": "^3.30.1", - "@tiptap/extension-subscript": "^3.30.1", - "@tiptap/extension-superscript": "^3.30.1", - "@tiptap/extension-table": "^3.30.1", - "@tiptap/extension-table-cell": "^3.30.1", - "@tiptap/extension-table-header": "^3.30.1", - "@tiptap/extension-table-row": "^3.30.1", - "@tiptap/extension-task-item": "^3.30.1", - "@tiptap/extension-task-list": "^3.30.1", - "@tiptap/extension-text-align": "^3.30.1", - "@tiptap/extension-text-style": "^3.30.1", - "@tiptap/extension-typography": "^3.30.1", - "@tiptap/extension-underline": "^3.30.1", - "@tiptap/pm": "^3.30.1", - "@tiptap/starter-kit": "^3.30.1", + "@tauri-apps/api": "^2.10.1", + "@tauri-apps/plugin-dialog": "^2.6.0", + "@tauri-apps/plugin-fs": "^2.4.5", + "@tauri-apps/plugin-opener": "^2.5.3", + "@tauri-apps/plugin-updater": "^2.10.0", + "@tiptap/core": "^3.19.0", + "@tiptap/extension-code-block-lowlight": "^3.19.0", + "@tiptap/extension-color": "^3.19.0", + "@tiptap/extension-details": "^3.19.0", + "@tiptap/extension-highlight": "^3.19.0", + "@tiptap/extension-image": "^3.19.0", + "@tiptap/extension-link": "^3.19.0", + "@tiptap/extension-placeholder": "^3.19.0", + "@tiptap/extension-subscript": "^3.19.0", + "@tiptap/extension-superscript": "^3.19.0", + "@tiptap/extension-table": "^3.19.0", + "@tiptap/extension-table-cell": "^3.19.0", + "@tiptap/extension-table-header": "^3.19.0", + "@tiptap/extension-table-row": "^3.19.0", + "@tiptap/extension-task-item": "^3.19.0", + "@tiptap/extension-task-list": "^3.19.0", + "@tiptap/extension-text-align": "^3.19.0", + "@tiptap/extension-text-style": "^3.19.0", + "@tiptap/extension-typography": "^3.19.0", + "@tiptap/extension-underline": "^3.19.0", + "@tiptap/pm": "^3.19.0", + "@tiptap/starter-kit": "^3.19.0", "@types/katex": "^0.16.8", "@types/markdown-it": "^14.1.2", - "highlight.js": "^11.12.0", - "katex": "^0.16.47", + "highlight.js": "^11.11.1", + "katex": "^0.16.28", "lowlight": "^3.3.0", - "markdown-it": "^14.3.0", + "markdown-it": "^14.1.0", "markdown-it-mark": "^4.0.0", "markdown-it-sub": "^2.0.0", "markdown-it-sup": "^2.0.0", "markdown-it-task-lists": "^2.1.1", - "mermaid": "^11.16.1" + "mermaid": "^11.14.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0757628..84046f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,86 +9,86 @@ importers: .: dependencies: '@tauri-apps/api': - specifier: ^2.11.1 - version: 2.11.1 - '@tauri-apps/plugin-dialog': - specifier: ^2.7.2 - version: 2.7.2 - '@tauri-apps/plugin-fs': - specifier: ^2.5.1 - version: 2.5.1 - '@tauri-apps/plugin-opener': - specifier: ^2.5.4 - version: 2.5.4 - '@tauri-apps/plugin-updater': specifier: ^2.10.1 version: 2.10.1 + '@tauri-apps/plugin-dialog': + specifier: ^2.6.0 + version: 2.6.0 + '@tauri-apps/plugin-fs': + specifier: ^2.4.5 + version: 2.4.5 + '@tauri-apps/plugin-opener': + specifier: ^2.5.3 + version: 2.5.3 + '@tauri-apps/plugin-updater': + specifier: ^2.10.0 + version: 2.10.0 '@tiptap/core': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/pm@3.30.1) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/pm@3.19.0) '@tiptap/extension-code-block-lowlight': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/extension-code-block@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)(highlight.js@11.12.0)(lowlight@3.3.0) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/extension-code-block@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)(highlight.js@11.11.1)(lowlight@3.3.0) '@tiptap/extension-color': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/extension-text-style@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/extension-text-style@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))) '@tiptap/extension-details': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/extension-text-style@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)))(@tiptap/pm@3.30.1) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/extension-text-style@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)))(@tiptap/pm@3.19.0) '@tiptap/extension-highlight': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) '@tiptap/extension-image': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) '@tiptap/extension-link': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) '@tiptap/extension-placeholder': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/extensions@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/extensions@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)) '@tiptap/extension-subscript': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) '@tiptap/extension-superscript': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) '@tiptap/extension-table': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) '@tiptap/extension-table-cell': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/extension-table@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/extension-table@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)) '@tiptap/extension-table-header': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/extension-table@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/extension-table@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)) '@tiptap/extension-table-row': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/extension-table@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/extension-table@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)) '@tiptap/extension-task-item': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/extension-list@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/extension-list@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)) '@tiptap/extension-task-list': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/extension-list@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/extension-list@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)) '@tiptap/extension-text-align': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) '@tiptap/extension-text-style': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) '@tiptap/extension-typography': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) '@tiptap/extension-underline': - specifier: ^3.30.1 - version: 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) + specifier: ^3.19.0 + version: 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) '@tiptap/pm': - specifier: ^3.30.1 - version: 3.30.1 + specifier: ^3.19.0 + version: 3.19.0 '@tiptap/starter-kit': - specifier: ^3.30.1 - version: 3.30.1 + specifier: ^3.19.0 + version: 3.19.0 '@types/katex': specifier: ^0.16.8 version: 0.16.8 @@ -96,17 +96,17 @@ importers: specifier: ^14.1.2 version: 14.1.2 highlight.js: - specifier: ^11.12.0 - version: 11.12.0 + specifier: ^11.11.1 + version: 11.11.1 katex: - specifier: ^0.16.47 - version: 0.16.47 + specifier: ^0.16.28 + version: 0.16.28 lowlight: specifier: ^3.3.0 version: 3.3.0 markdown-it: - specifier: ^14.3.0 - version: 14.3.0 + specifier: ^14.1.0 + version: 14.1.0 markdown-it-mark: specifier: ^4.0.0 version: 4.0.0 @@ -120,48 +120,45 @@ importers: specifier: ^2.1.1 version: 2.1.1 mermaid: - specifier: ^11.16.1 - version: 11.16.1 + specifier: ^11.14.0 + version: 11.14.0 devDependencies: '@sveltejs/adapter-auto': - specifier: ^7.0.1 - version: 7.0.1(@sveltejs/kit@2.70.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.56.9)(typescript@5.9.3)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0))) + specifier: ^7.0.0 + version: 7.0.0(@sveltejs/kit@2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.50.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2))) '@sveltejs/adapter-static': specifier: ^3.0.10 - version: 3.0.10(@sveltejs/kit@2.70.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.56.9)(typescript@5.9.3)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0))) + version: 3.0.10(@sveltejs/kit@2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.50.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2))) '@sveltejs/kit': - specifier: ^2.70.2 - version: 2.70.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.56.9)(typescript@5.9.3)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)) + specifier: ^2.50.2 + version: 2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.50.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)) '@sveltejs/vite-plugin-svelte': specifier: ^6.2.4 - version: 6.2.4(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)) + version: 6.2.4(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)) '@tailwindcss/postcss': - specifier: ^4.3.3 - version: 4.3.3 + specifier: ^4.1.18 + version: 4.1.18 '@tailwindcss/vite': - specifier: ^4.3.3 - version: 4.3.3(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)) + specifier: ^4.1.18 + version: 4.1.18(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)) '@tauri-apps/cli': - specifier: ^2.11.4 - version: 2.11.4 - '@types/node': - specifier: ^26.2.0 - version: 26.2.0 + specifier: ^2.10.0 + version: 2.10.0 svelte: - specifier: ^5.56.9 - version: 5.56.9 + specifier: ^5.49.2 + version: 5.50.0 svelte-check: - specifier: ^4.7.6 - version: 4.7.6(picomatch@4.0.5)(svelte@5.56.9)(typescript@5.9.3) + specifier: ^4.3.6 + version: 4.3.6(picomatch@4.0.3)(svelte@5.50.0)(typescript@5.9.3) tailwindcss: - specifier: ^4.3.3 - version: 4.3.3 + specifier: ^4.1.18 + version: 4.1.18 typescript: specifier: ^5.9.3 version: 5.9.3 vite: - specifier: ^7.3.6 - version: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0) + specifier: ^7.3.1 + version: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2) packages: @@ -175,161 +172,173 @@ packages: '@braintree/sanitize-url@7.1.2': resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==} - '@chevrotain/types@11.1.2': - resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==} + '@chevrotain/cst-dts-gen@12.0.0': + resolution: {integrity: sha512-fSL4KXjTl7cDgf0B5Rip9Q05BOrYvkJV/RrBTE/bKDN096E4hN/ySpcBK5B24T76dlQ2i32Zc3PAE27jFnFrKg==} - '@esbuild/aix-ppc64@0.28.2': - resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==} + '@chevrotain/gast@12.0.0': + resolution: {integrity: sha512-1ne/m3XsIT8aEdrvT33so0GUC+wkctpUPK6zU9IlOyJLUbR0rg4G7ZiApiJbggpgPir9ERy3FRjT6T7lpgetnQ==} + + '@chevrotain/regexp-to-ast@12.0.0': + resolution: {integrity: sha512-p+EW9MaJwgaHguhoqwOtx/FwuGr+DnNn857sXWOi/mClXIkPGl3rn7hGNWvo31HA3vyeQxjqe+H36yZJwYU8cA==} + + '@chevrotain/types@12.0.0': + resolution: {integrity: sha512-S+04vjFQKeuYw0/eW3U52LkAHQsB1ASxsPGsLPUyQgrZ2iNNibQrsidruDzjEX2JYfespXMG0eZmXlhA6z7nWA==} + + '@chevrotain/utils@12.0.0': + resolution: {integrity: sha512-lB59uJoaGIfOOL9knQqQRfhl9g7x8/wqFkp13zTdkRu1huG9kg6IJs1O8hqj9rs6h7orGxHJUKb+mX3rPbWGhA==} + + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.28.2': - resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==} + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.28.2': - resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==} + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.28.2': - resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==} + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.28.2': - resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==} + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.28.2': - resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==} + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.28.2': - resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==} + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.28.2': - resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==} + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.28.2': - resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==} + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.28.2': - resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==} + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.28.2': - resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==} + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.28.2': - resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==} + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.28.2': - resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==} + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.28.2': - resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==} + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.28.2': - resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==} + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.28.2': - resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==} + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.28.2': - resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==} + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.28.2': - resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==} + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.28.2': - resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==} + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.28.2': - resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==} + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.28.2': - resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==} + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.28.2': - resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==} + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.28.2': - resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==} + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.28.2': - resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==} + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.28.2': - resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==} + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.28.2': - resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==} + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -337,8 +346,8 @@ packages: '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@3.1.4': - resolution: {integrity: sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==} + '@iconify/utils@3.1.1': + resolution: {integrity: sha512-MwzoDtw9rO1x+qfgLTV/IVXsHDBqeYZoMIQC8SfxfYSlaSUG+oWiAcoiB1yajAda6mqblm4/1/w2E8tRu7a7Tw==} '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -356,167 +365,163 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@mermaid-js/parser@1.2.0': - resolution: {integrity: sha512-oYPyv8A4As1yH5Bx+04iQEQxXuIQDe0GKCNSRgao6z8AM9jixXIfP0vsppRLvGf+nKIOb9/LdpWA4YuJiVvESA==} - - '@napi-rs/lzma-linux-x64-gnu@1.5.1': - resolution: {integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==} - engines: {node: ^22.20 || ^24.12 || >=25} - cpu: [x64] - os: [linux] - libc: [glibc] + '@mermaid-js/parser@1.1.0': + resolution: {integrity: sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw==} '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - '@rollup/rollup-android-arm-eabi@4.62.4': - resolution: {integrity: sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==} + '@remirror/core-constants@3.0.0': + resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} + + '@rollup/rollup-android-arm-eabi@4.57.1': + resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.62.4': - resolution: {integrity: sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==} + '@rollup/rollup-android-arm64@4.57.1': + resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.62.4': - resolution: {integrity: sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==} + '@rollup/rollup-darwin-arm64@4.57.1': + resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.62.4': - resolution: {integrity: sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==} + '@rollup/rollup-darwin-x64@4.57.1': + resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.62.4': - resolution: {integrity: sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==} + '@rollup/rollup-freebsd-arm64@4.57.1': + resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.62.4': - resolution: {integrity: sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==} + '@rollup/rollup-freebsd-x64@4.57.1': + resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.62.4': - resolution: {integrity: sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==} + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.62.4': - resolution: {integrity: sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==} + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.62.4': - resolution: {integrity: sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==} + '@rollup/rollup-linux-arm64-gnu@4.57.1': + resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.62.4': - resolution: {integrity: sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==} + '@rollup/rollup-linux-arm64-musl@4.57.1': + resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.62.4': - resolution: {integrity: sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==} + '@rollup/rollup-linux-loong64-gnu@4.57.1': + resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.62.4': - resolution: {integrity: sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==} + '@rollup/rollup-linux-loong64-musl@4.57.1': + resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.62.4': - resolution: {integrity: sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==} + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.62.4': - resolution: {integrity: sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==} + '@rollup/rollup-linux-ppc64-musl@4.57.1': + resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.62.4': - resolution: {integrity: sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==} + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.62.4': - resolution: {integrity: sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==} + '@rollup/rollup-linux-riscv64-musl@4.57.1': + resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.62.4': - resolution: {integrity: sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==} + '@rollup/rollup-linux-s390x-gnu@4.57.1': + resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.62.4': - resolution: {integrity: sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==} + '@rollup/rollup-linux-x64-gnu@4.57.1': + resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.62.4': - resolution: {integrity: sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==} + '@rollup/rollup-linux-x64-musl@4.57.1': + resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.62.4': - resolution: {integrity: sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==} + '@rollup/rollup-openbsd-x64@4.57.1': + resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.62.4': - resolution: {integrity: sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==} + '@rollup/rollup-openharmony-arm64@4.57.1': + resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.62.4': - resolution: {integrity: sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==} + '@rollup/rollup-win32-arm64-msvc@4.57.1': + resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.62.4': - resolution: {integrity: sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==} + '@rollup/rollup-win32-ia32-msvc@4.57.1': + resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.62.4': - resolution: {integrity: sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==} + '@rollup/rollup-win32-x64-gnu@4.57.1': + resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.62.4': - resolution: {integrity: sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==} + '@rollup/rollup-win32-x64-msvc@4.57.1': + resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} cpu: [x64] os: [win32] '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@sveltejs/acorn-typescript@1.0.13': - resolution: {integrity: sha512-wgKggnhZVL9Bfx1OaKKTrYY9BFRk6C8UAkQNUcIv1+llzYrIqy+RZm5HPKzn0NpEBvTVhTqB4kQyllZywsRBRQ==} + '@sveltejs/acorn-typescript@1.0.8': + resolution: {integrity: sha512-esgN+54+q0NjB0Y/4BomT9samII7jGwNy/2a3wNZbT2A2RpmXsXwUt24LvLhx6jUq2gVk4cWEvcRO6MFQbOfNA==} peerDependencies: acorn: ^8.9.0 - '@sveltejs/adapter-auto@7.0.1': - resolution: {integrity: sha512-dvuPm1E7M9NI/+canIQ6KKQDU2AkEefEZ2Dp7cY6uKoPq9Z/PhOXABe526UdW2mN986gjVkuSLkOYIBnS/M2LQ==} + '@sveltejs/adapter-auto@7.0.0': + resolution: {integrity: sha512-ImDWaErTOCkRS4Gt+5gZuymKFBobnhChXUZ9lhUZLahUgvA4OOvRzi3sahzYgbxGj5nkA6OV0GAW378+dl/gyw==} peerDependencies: '@sveltejs/kit': ^2.0.0 @@ -525,26 +530,22 @@ packages: peerDependencies: '@sveltejs/kit': ^2.0.0 - '@sveltejs/kit@2.70.2': - resolution: {integrity: sha512-RzRoRpuR2KXqc5yMO0akQHDZeT4AslOlznGITURsqHaVbtyYP4Wn3eE3gxj9JcDyNYO0crkxhdwFHc+2vkVm6w==} + '@sveltejs/kit@2.50.2': + resolution: {integrity: sha512-875hTUkEbz+MyJIxWbQjfMaekqdmEKUUfR7JyKcpfMRZqcGyrO9Gd+iS1D/Dx8LpE5FEtutWGOtlAh4ReSAiOA==} engines: {node: '>=18.13'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.0.0 - '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0 + '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 svelte: ^4.0.0 || ^5.0.0-next.0 - typescript: ^5.3.3 || ^6.0.0 - vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0 + typescript: ^5.3.3 + vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 peerDependenciesMeta: '@opentelemetry/api': optional: true typescript: optional: true - '@sveltejs/load-config@0.2.3': - resolution: {integrity: sha512-VT3qmUb8pRV2QrZjd8iAmtg8lf4W0TIjZbvXtz5MKei/q96teWZgGJyyidJzOjzZzvdq616eSRVeMYIQChUTAQ==} - engines: {node: '>= 18.0.0'} - '@sveltejs/vite-plugin-svelte-inspector@5.0.2': resolution: {integrity: sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==} engines: {node: ^20.19 || ^22.12 || >=24} @@ -560,69 +561,69 @@ packages: svelte: ^5.0.0 vite: ^6.3.0 || ^7.0.0 - '@tailwindcss/node@4.3.3': - resolution: {integrity: sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==} + '@tailwindcss/node@4.1.18': + resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} - '@tailwindcss/oxide-android-arm64@4.3.3': - resolution: {integrity: sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==} - engines: {node: '>= 20'} + '@tailwindcss/oxide-android-arm64@4.1.18': + resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} + engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.3.3': - resolution: {integrity: sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==} - engines: {node: '>= 20'} + '@tailwindcss/oxide-darwin-arm64@4.1.18': + resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} + engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.3.3': - resolution: {integrity: sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==} - engines: {node: '>= 20'} + '@tailwindcss/oxide-darwin-x64@4.1.18': + resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} + engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.3.3': - resolution: {integrity: sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==} - engines: {node: '>= 20'} + '@tailwindcss/oxide-freebsd-x64@4.1.18': + resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} + engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': - resolution: {integrity: sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==} - engines: {node: '>= 20'} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': + resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} + engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': - resolution: {integrity: sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==} - engines: {node: '>= 20'} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': + resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} + engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-arm64-musl@4.3.3': - resolution: {integrity: sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==} - engines: {node: '>= 20'} + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': + resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} + engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@tailwindcss/oxide-linux-x64-gnu@4.3.3': - resolution: {integrity: sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==} - engines: {node: '>= 20'} + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': + resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} + engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-x64-musl@4.3.3': - resolution: {integrity: sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==} - engines: {node: '>= 20'} + '@tailwindcss/oxide-linux-x64-musl@4.1.18': + resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} + engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@tailwindcss/oxide-wasm32-wasi@4.3.3': - resolution: {integrity: sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==} + '@tailwindcss/oxide-wasm32-wasi@4.1.18': + resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -633,341 +634,340 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': - resolution: {integrity: sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==} - engines: {node: '>= 20'} + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': + resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} + engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.3.3': - resolution: {integrity: sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==} - engines: {node: '>= 20'} + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': + resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} + engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.3.3': - resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==} - engines: {node: '>= 20'} + '@tailwindcss/oxide@4.1.18': + resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} + engines: {node: '>= 10'} - '@tailwindcss/postcss@4.3.3': - resolution: {integrity: sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==} + '@tailwindcss/postcss@4.1.18': + resolution: {integrity: sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==} - '@tailwindcss/vite@4.3.3': - resolution: {integrity: sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==} + '@tailwindcss/vite@4.1.18': + resolution: {integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==} peerDependencies: - vite: ^5.2.0 || ^6 || ^7 || ^8 + vite: ^5.2.0 || ^6 || ^7 - '@tauri-apps/api@2.11.1': - resolution: {integrity: sha512-M2FPuYND2m+wh5hfW9ZpSdxMPdEJovPBWwoHJmwUpysTYNHaOkVFN419m/K0LIgjb/7KU2vBgsUepJWugQCvAA==} + '@tauri-apps/api@2.10.1': + resolution: {integrity: sha512-hKL/jWf293UDSUN09rR69hrToyIXBb8CjGaWC7gfinvnQrBVvnLr08FeFi38gxtugAVyVcTa5/FD/Xnkb1siBw==} - '@tauri-apps/cli-darwin-arm64@2.11.4': - resolution: {integrity: sha512-1ryOF3ZhpZ/nemHV5zVwBQBz9jDGKmKPvWPADOhc83ig0P4bMc2iER4NbC6r9sjeIZ6RVQ4g3RZIYvezhcl4TQ==} + '@tauri-apps/cli-darwin-arm64@2.10.0': + resolution: {integrity: sha512-avqHD4HRjrMamE/7R/kzJPcAJnZs0IIS+1nkDP5b+TNBn3py7N2aIo9LIpy+VQq0AkN8G5dDpZtOOBkmWt/zjA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tauri-apps/cli-darwin-x64@2.11.4': - resolution: {integrity: sha512-uFsGQAAfuyz1k/yGLmkWfkBlgKAqZfxqlHmLWx81QU27RJWfmbNHCIq8T8w1e+VClleIuZUjpHWfoE4E3DLo3A==} + '@tauri-apps/cli-darwin-x64@2.10.0': + resolution: {integrity: sha512-keDmlvJRStzVFjZTd0xYkBONLtgBC9eMTpmXnBXzsHuawV2q9PvDo2x6D5mhuoMVrJ9QWjgaPKBBCFks4dK71Q==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tauri-apps/cli-linux-arm-gnueabihf@2.11.4': - resolution: {integrity: sha512-IaHZn5CdBL21oUmjiVOS1ctw6Ip1O0pjp70FwOWmYz1myWe0SY96ZIj2FYf7pT0m8bI2h/hrs5ZbEXXh44/MkQ==} + '@tauri-apps/cli-linux-arm-gnueabihf@2.10.0': + resolution: {integrity: sha512-e5u0VfLZsMAC9iHaOEANumgl6lfnJx0Dtjkd8IJpysZ8jp0tJ6wrIkto2OzQgzcYyRCKgX72aKE0PFgZputA8g==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tauri-apps/cli-linux-arm64-gnu@2.11.4': - resolution: {integrity: sha512-N41/ukTRVe6XSuUTESuFdGeOW2i7k62tK+6gHK5Kd5/q5RPvvi19GaWAVPPb9u95HSGmTChSolBfzynUsssFaA==} + '@tauri-apps/cli-linux-arm64-gnu@2.10.0': + resolution: {integrity: sha512-YrYYk2dfmBs5m+OIMCrb+JH/oo+4FtlpcrTCgiFYc7vcs6m3QDd1TTyWu0u01ewsCtK2kOdluhr/zKku+KP7HA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@tauri-apps/cli-linux-arm64-musl@2.11.4': - resolution: {integrity: sha512-v277UnT/fB64xAfSroL5N3Km3tLmvATWqJJw/wRI+g6o+HkeD0slyE7gOhNs1MbjE41R7bQOTxMVoL3aomUJmw==} + '@tauri-apps/cli-linux-arm64-musl@2.10.0': + resolution: {integrity: sha512-GUoPdVJmrJRIXFfW3Rkt+eGK9ygOdyISACZfC/bCSfOnGt8kNdQIQr5WRH9QUaTVFIwxMlQyV3m+yXYP+xhSVA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@tauri-apps/cli-linux-riscv64-gnu@2.11.4': - resolution: {integrity: sha512-qqgNkQ2u1yZHxjhxsZaxUtRDW8dIqIYm33rx/mzwQv0SfY9x1B+iraj8vWeFiXjjSVVhEMepXSOts1TqPzvXNQ==} + '@tauri-apps/cli-linux-riscv64-gnu@2.10.0': + resolution: {integrity: sha512-JO7s3TlSxshwsoKNCDkyvsx5gw2QAs/Y2GbR5UE2d5kkU138ATKoPOtxn8G1fFT1aDW4LH0rYAAfBpGkDyJJnw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] libc: [glibc] - '@tauri-apps/cli-linux-x64-gnu@2.11.4': - resolution: {integrity: sha512-2VRNWl84FOH0m2giiDkO2h0QXlcMJeX+zJDpI5kDIQAx6s+geF3v48F4DXfJez4GS/FdoDGnPnw1C2iYGbQ7bQ==} + '@tauri-apps/cli-linux-x64-gnu@2.10.0': + resolution: {integrity: sha512-Uvh4SUUp4A6DVRSMWjelww0GnZI3PlVy7VS+DRF5napKuIehVjGl9XD0uKoCoxwAQBLctvipyEK+pDXpJeoHng==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@tauri-apps/cli-linux-x64-musl@2.11.4': - resolution: {integrity: sha512-o9GyhYor/nc7xarmwDE3ka2szuW3uuZzXjHWh64Q8YX5AtSgxdQkFWzrY4O8KiGtVNvFBI14H3Q49Qj5TOIP/A==} + '@tauri-apps/cli-linux-x64-musl@2.10.0': + resolution: {integrity: sha512-AP0KRK6bJuTpQ8kMNWvhIpKUkQJfcPFeba7QshOQZjJ8wOS6emwTN4K5g/d3AbCMo0RRdnZWwu67MlmtJyxC1Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@tauri-apps/cli-win32-arm64-msvc@2.11.4': - resolution: {integrity: sha512-ld5Ehb598m0VkYyylRPNeCFsBe/km0jxis6KgMpl3IGY6I/i1RwQXO05I1AsXUXO2WC6AvB/Lw4qTf/asiuEiQ==} + '@tauri-apps/cli-win32-arm64-msvc@2.10.0': + resolution: {integrity: sha512-97DXVU3dJystrq7W41IX+82JEorLNY+3+ECYxvXWqkq7DBN6FsA08x/EFGE8N/b0LTOui9X2dvpGGoeZKKV08g==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tauri-apps/cli-win32-ia32-msvc@2.11.4': - resolution: {integrity: sha512-12Hxi0XX/H5VFxO/bGgHkFWhml9VMgEOu9CidjeCeTNQ1l6fpUlbiGgSP7CLI3PFtW9/FfbeHieZ+kyWK5H7CA==} + '@tauri-apps/cli-win32-ia32-msvc@2.10.0': + resolution: {integrity: sha512-EHyQ1iwrWy1CwMalEm9z2a6L5isQ121pe7FcA2xe4VWMJp+GHSDDGvbTv/OPdkt2Lyr7DAZBpZHM6nvlHXEc4A==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@tauri-apps/cli-win32-x64-msvc@2.11.4': - resolution: {integrity: sha512-+vDiqBIU5dMISg/wNvX3sF+ZHfgJGJ5T0AcO+EHNXV9GGAG+P5fzodlDXD3QdKCRgZxMoCm5PPvj3BqLNjBthw==} + '@tauri-apps/cli-win32-x64-msvc@2.10.0': + resolution: {integrity: sha512-NTpyQxkpzGmU6ceWBTY2xRIEaS0ZLbVx1HE1zTA3TY/pV3+cPoPPOs+7YScr4IMzXMtOw7tLw5LEXo5oIG3qaQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tauri-apps/cli@2.11.4': - resolution: {integrity: sha512-R8xGtMpwyetawSqm9kYOuMmEqkhUbvcUy8n0aNXIxollKBLESUu5f4Fx+64hgASYm1H+jSWq6jCW6zqTnH6hqQ==} + '@tauri-apps/cli@2.10.0': + resolution: {integrity: sha512-ZwT0T+7bw4+DPCSWzmviwq5XbXlM0cNoleDKOYPFYqcZqeKY31KlpoMW/MOON/tOFBPgi31a2v3w9gliqwL2+Q==} engines: {node: '>= 10'} hasBin: true - '@tauri-apps/plugin-dialog@2.7.2': - resolution: {integrity: sha512-pX0IGm1I3I6wc+zeKYcq1GSqogK6okCNX5fOdaNU5ab1AjGS6l1E5wFNjEb7meg7ZFSp0JUs+0jQGQNyOvLrsg==} + '@tauri-apps/plugin-dialog@2.6.0': + resolution: {integrity: sha512-q4Uq3eY87TdcYzXACiYSPhmpBA76shgmQswGkSVio4C82Sz2W4iehe9TnKYwbq7weHiL88Yw19XZm7v28+Micg==} - '@tauri-apps/plugin-fs@2.5.1': - resolution: {integrity: sha512-9Lz+Jopp6QyeEWhlpkMx4R/+P9HgR+AVAI4vOZhlT8Xaymtz8iVI/Ov984/XTqgJz/5gz5NretqPB/XEMS3NhQ==} + '@tauri-apps/plugin-fs@2.4.5': + resolution: {integrity: sha512-dVxWWGE6VrOxC7/jlhyE+ON/Cc2REJlM35R3PJX3UvFw2XwYhLGQVAIyrehenDdKjotipjYEVc4YjOl3qq90fA==} - '@tauri-apps/plugin-opener@2.5.4': - resolution: {integrity: sha512-1HnPkb+AmgO29HBazm4uPLKB+r7zzcTBW1d0fyYp1uP+jwtpoiNDGKMMzz58SFp49nOIrxdE3aUJtT57lfO9CQ==} + '@tauri-apps/plugin-opener@2.5.3': + resolution: {integrity: sha512-CCcUltXMOfUEArbf3db3kCE7Ggy1ExBEBl51Ko2ODJ6GDYHRp1nSNlQm5uNCFY5k7/ufaK5Ib3Du/Zir19IYQQ==} - '@tauri-apps/plugin-updater@2.10.1': - resolution: {integrity: sha512-NFYMg+tWOZPJdzE/PpFj2qfqwAWwNS3kXrb1tm1gnBJ9mYzZ4WDRrwy8udzWoAnfGCHLuePNLY1WVCNHnh3eRA==} + '@tauri-apps/plugin-updater@2.10.0': + resolution: {integrity: sha512-ljN8jPlnT0aSn8ecYhuBib84alxfMx6Hc8vJSKMJyzGbTPFZAC44T2I1QNFZssgWKrAlofvJqCC6Rr472JWfkQ==} - '@tiptap/core@3.30.1': - resolution: {integrity: sha512-HWEO6Qi8fI8Zt8X4atVV6GxthJx7Vrjr6L5YFq4OkjYJ7HG2/bFw6IKsDA3jOYgY4DM9lv8IadaiWUQ2JJRIBA==} + '@tiptap/core@3.19.0': + resolution: {integrity: sha512-bpqELwPW+DG8gWiD8iiFtSl4vIBooG5uVJod92Qxn3rA9nFatyXRr4kNbMJmOZ66ezUvmCjXVe/5/G4i5cyzKA==} peerDependencies: - '@tiptap/pm': 3.30.1 + '@tiptap/pm': ^3.19.0 - '@tiptap/extension-blockquote@3.30.1': - resolution: {integrity: sha512-nUBIPmf9fKfBzeMpQsexsHw3/ICzDfBK8DN9uLf5wO3I/gWycAByynvfNIqfHyl6Q77QgTIHrdjihEXUSYzeJg==} + '@tiptap/extension-blockquote@3.19.0': + resolution: {integrity: sha512-y3UfqY9KD5XwWz3ndiiJ089Ij2QKeiXy/g1/tlAN/F1AaWsnkHEHMLxCP1BIqmMpwsX7rZjMLN7G5Lp7c9682A==} peerDependencies: - '@tiptap/core': 3.30.1 - '@tiptap/pm': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extension-bold@3.30.1': - resolution: {integrity: sha512-xnEGv7evFQquT0r/byjBt5iqDYQi6bF/W7DPO2rAG0z33mShDEUHhE407jakMiOSYNUilFjuQj1naLvwpQC3Bw==} + '@tiptap/extension-bold@3.19.0': + resolution: {integrity: sha512-UZgb1d0XK4J/JRIZ7jW+s4S6KjuEDT2z1PPM6ugcgofgJkWQvRZelCPbmtSFd3kwsD+zr9UPVgTh9YIuGQ8t+Q==} peerDependencies: - '@tiptap/core': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extension-bullet-list@3.30.1': - resolution: {integrity: sha512-9bf4VgIxaOe+c7W20WZGUU5d2SFNGSpVwDGU/7jGlnjobzR7ZhDK/THk9JQr8OpvZrVN8Nmf84ZD3axjt+h/hQ==} + '@tiptap/extension-bullet-list@3.19.0': + resolution: {integrity: sha512-F9uNnqd0xkJbMmRxVI5RuVxwB9JaCH/xtRqOUNQZnRBt7IdAElCY+Dvb4hMCtiNv+enGM/RFGJuFHR9TxmI7rw==} peerDependencies: - '@tiptap/extension-list': 3.30.1 + '@tiptap/extension-list': ^3.19.0 - '@tiptap/extension-code-block-lowlight@3.30.1': - resolution: {integrity: sha512-Qu+owe3DPHUxeKWD+hSUq4/AF6ZfAcTbvlv5ua1/R7gad4/404dDCXUdwwAr7lxqh3kzjdzYF8IDZsuy7CBIhA==} + '@tiptap/extension-code-block-lowlight@3.19.0': + resolution: {integrity: sha512-P8O8i1J+XozEVA7bF/Ijwf/r1rVqrh1DBQ7dXxBcrUvLpIGyVjtxX228jBF/kD4kf2xOlphvjDhV2fLa8XOVsg==} peerDependencies: - '@tiptap/core': 3.30.1 - '@tiptap/extension-code-block': 3.30.1 - '@tiptap/pm': 3.30.1 + '@tiptap/core': ^3.19.0 + '@tiptap/extension-code-block': ^3.19.0 + '@tiptap/pm': ^3.19.0 highlight.js: ^11 lowlight: ^2 || ^3 - '@tiptap/extension-code-block@3.30.1': - resolution: {integrity: sha512-j19Ml9BpvHgTMSN4SfkJ26B5xSuHaxPXvMoXyAX1iOoSc4J92sCqShLGgpmtce42sIroYFRs4sBv0ndBRDcxtA==} + '@tiptap/extension-code-block@3.19.0': + resolution: {integrity: sha512-b/2qR+tMn8MQb+eaFYgVk4qXnLNkkRYmwELQ8LEtEDQPxa5Vl7J3eu8+4OyoIFhZrNDZvvoEp80kHMCP8sI6rg==} peerDependencies: - '@tiptap/core': 3.30.1 - '@tiptap/pm': 3.30.1 + '@tiptap/core': ^3.19.0 + '@tiptap/pm': ^3.19.0 - '@tiptap/extension-code@3.30.1': - resolution: {integrity: sha512-oqLEOLZel3lrLhACP4vMhH5RNbV9yxFsJYiOmQjjEFEoCEWWxVfJuhZ+8NFS3mUCdgy77G62XimjEvqC3+7V7Q==} + '@tiptap/extension-code@3.19.0': + resolution: {integrity: sha512-2kqqQIXBXj2Or+4qeY3WoE7msK+XaHKL6EKOcKlOP2BW8eYqNTPzNSL+PfBDQ3snA7ljZQkTs/j4GYDj90vR1A==} peerDependencies: - '@tiptap/core': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extension-color@3.30.1': - resolution: {integrity: sha512-x5nF9aDiIgVTAlthf56p7/O0C1LGYKDU4YCR7yqAPh7kibUxRsWNLYprezSkCa5TNDi7bq34dDr7lz+7KwVFoA==} + '@tiptap/extension-color@3.19.0': + resolution: {integrity: sha512-SemOrEEnmbKshhbTeKIvffwMlgqDAUDuOYyizfKqYM2dd5fRjohp+oszExO7scVhDtHtvtP/l3UmkBGBYfl4Tg==} peerDependencies: - '@tiptap/extension-text-style': 3.30.1 + '@tiptap/extension-text-style': ^3.19.0 - '@tiptap/extension-details@3.30.1': - resolution: {integrity: sha512-KgTgfDn4yvlTfev4QxoeGHIhNYxYkmPCM7TbayGYVi2vwA94bCuOXGeYXiPsYyDptCNPqZbqvUKY97pihKqqzw==} + '@tiptap/extension-details@3.19.0': + resolution: {integrity: sha512-BUc9N8UVl/orzXoDSh9YCB+G1csNDAKm4EeKAQpGotbgv32nnTPKv50BvPx+a5pZfVQHaiJlb98Xmi7dMZs1Ug==} peerDependencies: - '@tiptap/core': 3.30.1 - '@tiptap/extension-text-style': 3.30.1 - '@tiptap/pm': 3.30.1 + '@tiptap/core': ^3.19.0 + '@tiptap/extension-text-style': ^3.19.0 + '@tiptap/pm': ^3.19.0 - '@tiptap/extension-document@3.30.1': - resolution: {integrity: sha512-aeMhO7EDoJyl5AGkF9hDQ9e52s18L8oYdbYjzcmXeo0YuXeaxbZCuUueVH4DnTfV7/vSkDRpDkk4TFF5LfKQpg==} + '@tiptap/extension-document@3.19.0': + resolution: {integrity: sha512-AOf0kHKSFO0ymjVgYSYDncRXTITdTcrj1tqxVazrmO60KNl1Rc2dAggDvIVTEBy5NvceF0scc7q3sE/5ZtVV7A==} peerDependencies: - '@tiptap/core': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extension-dropcursor@3.30.1': - resolution: {integrity: sha512-N3R5rA01WX/brGm1Qcnf2KLu0xkyGbRPMsHzzl1YG2sOLQM9t+FQi1T8WvSJiOpfYBVaWQkILUoCymADSpgUAg==} + '@tiptap/extension-dropcursor@3.19.0': + resolution: {integrity: sha512-sf3dEZXiLvsGqVK2maUIzXY6qtYYCvBumag7+VPTMGQ0D4hiZ1X/4ukt4+6VXDg5R2WP1CoIt/QvUetUjWNhbQ==} peerDependencies: - '@tiptap/extensions': 3.30.1 + '@tiptap/extensions': ^3.19.0 - '@tiptap/extension-gapcursor@3.30.1': - resolution: {integrity: sha512-dp13WaPNj32SkDN9tun0OtwtfdO/y52BJWigwXPgpUFLEyr8hQ84TxXL3rDshGHE4Eyjdd+erdBHisjBEV9vwQ==} + '@tiptap/extension-gapcursor@3.19.0': + resolution: {integrity: sha512-w7DACS4oSZaDWjz7gropZHPc9oXqC9yERZTcjWxyORuuIh1JFf0TRYspleK+OK28plK/IftojD/yUDn1MTRhvA==} peerDependencies: - '@tiptap/extensions': 3.30.1 + '@tiptap/extensions': ^3.19.0 - '@tiptap/extension-hard-break@3.30.1': - resolution: {integrity: sha512-2emcEkSSj+Y3dXXEugKQZDNeWCum0LBuKFmun7SiJyLOdxNuRnxwm2l4/LLiEHGDJBchDti4Oo8jZGLTRt4uog==} + '@tiptap/extension-hard-break@3.19.0': + resolution: {integrity: sha512-lAmQraYhPS5hafvCl74xDB5+bLuNwBKIEsVoim35I0sDJj5nTrfhaZgMJ91VamMvT+6FF5f1dvBlxBxAWa8jew==} peerDependencies: - '@tiptap/core': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extension-heading@3.30.1': - resolution: {integrity: sha512-TGM1ZNeH/D8HQK59vFMZql2gesMoHy+6nLq3mFsYpiRT2TShMGoq+K7SC+ty6N5a/k4M82ZQrDq8t4zjiiS5xA==} + '@tiptap/extension-heading@3.19.0': + resolution: {integrity: sha512-uLpLlfyp086WYNOc0ekm1gIZNlEDfmzOhKzB0Hbyi6jDagTS+p9mxUNYeYOn9jPUxpFov43+Wm/4E24oY6B+TQ==} peerDependencies: - '@tiptap/core': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extension-highlight@3.30.1': - resolution: {integrity: sha512-+VoeFhVSkJQmAFZtXyJHfcf8CztJZiUDJP1CJKupldPSUexS8wBf0Lo3fdNAObtx7ocKHVfBhshPDipRVKJk7g==} + '@tiptap/extension-highlight@3.19.0': + resolution: {integrity: sha512-MYwSDCh/aG12KXw30XmHwrruElBRB8b7Ou0jd8n8H2oXb+QexVqnMa2+ylkuTAl+2D5PR7zdIIOeeHRSTmkPPw==} peerDependencies: - '@tiptap/core': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extension-horizontal-rule@3.30.1': - resolution: {integrity: sha512-fTaSDapNV3cRgsek94z/Z4+Fyr0UpkE8/9PdSvt9MHYo/2yx3mmuamEJwUhUCpe7gDfzGdrMMsRpDOcd0b1ZEQ==} + '@tiptap/extension-horizontal-rule@3.19.0': + resolution: {integrity: sha512-iqUHmgMGhMgYGwG6L/4JdelVQ5Mstb4qHcgTGd/4dkcUOepILvhdxajPle7OEdf9sRgjQO6uoAU5BVZVC26+ng==} peerDependencies: - '@tiptap/core': 3.30.1 - '@tiptap/pm': 3.30.1 + '@tiptap/core': ^3.19.0 + '@tiptap/pm': ^3.19.0 - '@tiptap/extension-image@3.30.1': - resolution: {integrity: sha512-LChYqHC0u7dq9/zj9R+SYgT04tuT549tzFeu8Ymo1TJ46Y9Iy3BfwlETZRvyV8NkC/eoGqUevJeD3HtG/vMaog==} + '@tiptap/extension-image@3.19.0': + resolution: {integrity: sha512-/rGl8nBziBPVJJ/9639eQWFDKcI3RQsDM3s+cqYQMFQfMqc7sQB9h4o4sHCBpmKxk3Y0FV/0NjnjLbBVm8OKdQ==} peerDependencies: - '@tiptap/core': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extension-italic@3.30.1': - resolution: {integrity: sha512-KldMtozKk8OBHexo6akCQpJCWMgJ5OwPYuEOJO+vFjgw6VS+9N16peIo5dY+vXAiVIZL+swEsBp4barwz7NiLw==} + '@tiptap/extension-italic@3.19.0': + resolution: {integrity: sha512-6GffxOnS/tWyCbDkirWNZITiXRta9wrCmrfa4rh+v32wfaOL1RRQNyqo9qN6Wjyl1R42Js+yXTzTTzZsOaLMYA==} peerDependencies: - '@tiptap/core': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extension-link@3.30.1': - resolution: {integrity: sha512-krq5yHDT4K+u2r7rS0CGk/yafyAKY1gbxexfbMmq+jyHtUUrr0UuCT1nOTa61bV3zX1nrObM1lKSpZ5FgbfdhQ==} + '@tiptap/extension-link@3.19.0': + resolution: {integrity: sha512-HEGDJnnCPfr7KWu7Dsq+eRRe/mBCsv6DuI+7fhOCLDJjjKzNgrX2abbo/zG3D/4lCVFaVb+qawgJubgqXR/Smw==} peerDependencies: - '@tiptap/core': 3.30.1 - '@tiptap/pm': 3.30.1 + '@tiptap/core': ^3.19.0 + '@tiptap/pm': ^3.19.0 - '@tiptap/extension-list-item@3.30.1': - resolution: {integrity: sha512-8QqIKvEqXKlT4Cv3ZySHAq1jzKimT/UnFxNBCnkBg+aZBgImvPlRFdN5nFs0elxiSQ7Jtt6k29aOyrkjxgyeew==} + '@tiptap/extension-list-item@3.19.0': + resolution: {integrity: sha512-VsSKuJz4/Tb6ZmFkXqWpDYkRzmaLTyE6dNSEpNmUpmZ32sMqo58mt11/huADNwfBFB0Ve7siH/VnFNIJYY3xvg==} peerDependencies: - '@tiptap/extension-list': 3.30.1 + '@tiptap/extension-list': ^3.19.0 - '@tiptap/extension-list-keymap@3.30.1': - resolution: {integrity: sha512-ju39AnbRyWr1vG4GnMM7BritV/9heGMeH103wccXgJU9hOEqzwmN9zpf5CZqeRnXOjzwQiojrEL+nwm5MnuboA==} + '@tiptap/extension-list-keymap@3.19.0': + resolution: {integrity: sha512-bxgmAgA3RzBGA0GyTwS2CC1c+QjkJJq9hC+S6PSOWELGRiTbwDN3MANksFXLjntkTa0N5fOnL27vBHtMStURqw==} peerDependencies: - '@tiptap/extension-list': 3.30.1 + '@tiptap/extension-list': ^3.19.0 - '@tiptap/extension-list@3.30.1': - resolution: {integrity: sha512-LizBu3fWrjifsL7QxKt+NhnHJDVGW/WWL+5asfqyznMqCZTy6tvPJ2W39pUHH2dBaVtzRIkAlsgWjDcNX/ep/Q==} + '@tiptap/extension-list@3.19.0': + resolution: {integrity: sha512-N6nKbFB2VwMsPlCw67RlAtYSK48TAsAUgjnD+vd3ieSlIufdQnLXDFUP6hFKx9mwoUVUgZGz02RA6bkxOdYyTw==} peerDependencies: - '@tiptap/core': 3.30.1 - '@tiptap/pm': 3.30.1 + '@tiptap/core': ^3.19.0 + '@tiptap/pm': ^3.19.0 - '@tiptap/extension-ordered-list@3.30.1': - resolution: {integrity: sha512-kJ4+4I1n4b5jV8OpWH+dbKOlIWTWVPv/fxDQKZuAT/a0DRoowpRoAuGJ0Nk9/Azeqel6c8Ocb4n1J7xLR6Xl2Q==} + '@tiptap/extension-ordered-list@3.19.0': + resolution: {integrity: sha512-cxGsINquwHYE1kmhAcLNLHAofmoDEG6jbesR5ybl7tU5JwtKVO7S/xZatll2DU1dsDAXWPWEeeMl4e/9svYjCg==} peerDependencies: - '@tiptap/extension-list': 3.30.1 + '@tiptap/extension-list': ^3.19.0 - '@tiptap/extension-paragraph@3.30.1': - resolution: {integrity: sha512-1kAYoyIF88l2qPgHi9ZeS5D5N7TzdJg3FvVCOJvUplQtBIwrsNAx6zaH/16NKN7kRiW7zETMKXMKkhL6MIvnDg==} + '@tiptap/extension-paragraph@3.19.0': + resolution: {integrity: sha512-xWa6gj82l5+AzdYyrSk9P4ynySaDzg/SlR1FarXE5yPXibYzpS95IWaVR0m2Qaz7Rrk+IiYOTGxGRxcHLOelNg==} peerDependencies: - '@tiptap/core': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extension-placeholder@3.30.1': - resolution: {integrity: sha512-z0WAMWLF6Hh3C1kuhcYVA3srK0J7d7UNdrY8hw4LlrhmJv1xIoZSUIwH+c8WkMJ5c79idL2zpeWVCtGEyH8UHw==} + '@tiptap/extension-placeholder@3.19.0': + resolution: {integrity: sha512-i15OfgyI4IDCYAcYSKUMnuZkYuUInfanjf9zquH8J2BETiomf/jZldVCp/QycMJ8DOXZ38fXDc99wOygnSNySg==} peerDependencies: - '@tiptap/extensions': 3.30.1 + '@tiptap/extensions': ^3.19.0 - '@tiptap/extension-strike@3.30.1': - resolution: {integrity: sha512-vyF8TPTARaN5coGrFwqVREPXDONE4SXJMIxo9qMaBJWl7723m+Enpy7qmFscnwifW5XTpOA8jKl/QJ7qud/ljw==} + '@tiptap/extension-strike@3.19.0': + resolution: {integrity: sha512-xYpabHsv7PccLUBQaP8AYiFCnYbx6P93RHPd0lgNwhdOjYFd931Zy38RyoxPHAgbYVmhf1iyx7lpuLtBnhS5dA==} peerDependencies: - '@tiptap/core': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extension-subscript@3.30.1': - resolution: {integrity: sha512-D9eaOWJqH/oq5+qCBL0YzH2iTwGBDO8N1OfRWDV+8lFYfRSUHhMr9tTrs7h7akik9X9S0H1V2oEVm6DAdY+X2Q==} + '@tiptap/extension-subscript@3.19.0': + resolution: {integrity: sha512-RchUOSIDprlnuzmA/znZIBKMONIlCAXHuR6XkoNX2jFJ/9OHk/si+jEeY8jJfpPDpVqZ3KrwS/zJrqhU/pT+hQ==} peerDependencies: - '@tiptap/core': 3.30.1 - '@tiptap/pm': 3.30.1 + '@tiptap/core': ^3.19.0 + '@tiptap/pm': ^3.19.0 - '@tiptap/extension-superscript@3.30.1': - resolution: {integrity: sha512-DJY1X+v5rs4HUwXvMHtWlYFlJjtHqWvQxO+yNIp3IvSu9Grh1UTfYROI4eIrUzNTUAx2ShT6UdCmiWF7SwYhjw==} + '@tiptap/extension-superscript@3.19.0': + resolution: {integrity: sha512-PjLUGjM23/7hqFP5HS1DbdywRm63GhjJ5SD6KqNgyZQwcwDZeJTAW2b/LYTHAP+k07OxOLPdj/k4ntQKtgKNow==} peerDependencies: - '@tiptap/core': 3.30.1 - '@tiptap/pm': 3.30.1 + '@tiptap/core': ^3.19.0 + '@tiptap/pm': ^3.19.0 - '@tiptap/extension-table-cell@3.30.1': - resolution: {integrity: sha512-H8gkbT8hALUlG8zW+lmHeAK/h5D7Ux3f8LW1KhAVFygSDbbb46BcEsBBW4gnS0Wj4a/8+2FalEkjICaMjD9mLw==} + '@tiptap/extension-table-cell@3.19.0': + resolution: {integrity: sha512-T67EDWmiRdOGctolaUpMPXffDkEFL+NUppSV61cPU3jQtDwGg01meauy5u67u6OUM8ICiZ+Sc7Xd2DIt+7Nv5g==} peerDependencies: - '@tiptap/extension-table': 3.30.1 + '@tiptap/extension-table': ^3.19.0 - '@tiptap/extension-table-header@3.30.1': - resolution: {integrity: sha512-lzc97Mts/S1QaqfVP+cFPR0DqB/FcZE4GPBm/0MO/SLUHD79zKdnb1ulRvnyTjlVRla2IAum8tgUMeoGD28BTA==} + '@tiptap/extension-table-header@3.19.0': + resolution: {integrity: sha512-fVHJUCfZp/JOE96hJ3paElRynpIVdukOiAjgZbaY9WuCKoXd3xYqdsbUSdf+XFmdPqwvQKhnkaY/qXW3FIxO3w==} peerDependencies: - '@tiptap/extension-table': 3.30.1 + '@tiptap/extension-table': ^3.19.0 - '@tiptap/extension-table-row@3.30.1': - resolution: {integrity: sha512-hJjQawhQBI6qQRHl0H0LPiWKRthXc2RUjhKIgLE2Bgq/8XUFthd4Xw6RoqRcHW+2gdFWwcd3eGNfMPruHqkgxQ==} + '@tiptap/extension-table-row@3.19.0': + resolution: {integrity: sha512-L3DeIXQARCs+m4rsQWiUPJso1z6xZ6awa/Kc+PCoq7rbPLtwhWUIld3sm9gdLac61Mf/TVwb18EdfygHcU7jCA==} peerDependencies: - '@tiptap/extension-table': 3.30.1 + '@tiptap/extension-table': ^3.19.0 - '@tiptap/extension-table@3.30.1': - resolution: {integrity: sha512-frZvuNbgi4ohLGeweHMfKWoCVAlCUB/BULgzjLMaFSaSpVGk2KVeoYtCJf9wR240IAj3t7tti3A7E4Ymz98qOQ==} + '@tiptap/extension-table@3.19.0': + resolution: {integrity: sha512-Lg8DlkkDUMYE/CcGOxoCWF98B2i7VWh+AGgqlF+XWrHjhlKHfENLRXm1a0vWuyyP3NknRYILoaaZ1s7QzmXKRA==} peerDependencies: - '@tiptap/core': 3.30.1 - '@tiptap/pm': 3.30.1 + '@tiptap/core': ^3.19.0 + '@tiptap/pm': ^3.19.0 - '@tiptap/extension-task-item@3.30.1': - resolution: {integrity: sha512-QHXZAaMinLmzMHksI47WxKBiD+KISOpGgnuyJhyt7DqGCbdRqIeTSCIIrxiZGSnwaCpCHbwRYpTz3kKRNvZURw==} + '@tiptap/extension-task-item@3.19.0': + resolution: {integrity: sha512-1il70SoaoEA5jKr2QS30CpZoB7EzdSLugROMBPRUPc0feIBKAf6yUPhxlFyU4ez/uT4Pazsf1HAgHI3AOr+MtQ==} peerDependencies: - '@tiptap/extension-list': 3.30.1 + '@tiptap/extension-list': ^3.19.0 - '@tiptap/extension-task-list@3.30.1': - resolution: {integrity: sha512-g5VEXuifD1ZcR4bhaWnTb0InP3UWNWtfPy4xy06YpkaT0whCn5hQUppi6oE7RP9y+3ATfbBy7AnHWj2XU2JiMg==} + '@tiptap/extension-task-list@3.19.0': + resolution: {integrity: sha512-Slb6YZi7XpVT966oAJhqzZu4LVuHtUeZgMxA0bdc8FSZBxntcr8OQWmPbqvR437RAR/Xd7b5quXS3JmSeksyvA==} peerDependencies: - '@tiptap/extension-list': 3.30.1 + '@tiptap/extension-list': ^3.19.0 - '@tiptap/extension-text-align@3.30.1': - resolution: {integrity: sha512-oYAYySpwcgcHSdZw8xgMqF+sCNUgM7v/2UQj0amsBOLbk5VMfiLdJp5Ku+z5aqCwBBUjb6sInh1Amzd3q57w4A==} + '@tiptap/extension-text-align@3.19.0': + resolution: {integrity: sha512-cY8bHWYojLTHXZb2j2srdh7ltmDgnwXYvSxbPL4HK4j7XxQOGnOsTakgM/BNhxymOfEj2414i5Otyy8hlgviFA==} peerDependencies: - '@tiptap/core': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extension-text-style@3.30.1': - resolution: {integrity: sha512-VLci8TnjAxBGbNlailFabGAv8ayPR8roGeNhS25UG90XJxiO2FZUHmOv+vqrciQ7Zfs5BXyrGQY+Yb3dAtHgIw==} + '@tiptap/extension-text-style@3.19.0': + resolution: {integrity: sha512-R55V6iUfRq03SGt/R2KvaeN+XGFiKJHx1jFJhZzvnWhMV7YqjHSG2r4BLvpTq1HBqteMbEjI+EOnb4t9AKd6aQ==} peerDependencies: - '@tiptap/core': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extension-text@3.30.1': - resolution: {integrity: sha512-Zt3Ik95ZKJx5YNzC6TUXWTNBHUfRH/qVENmqfPjA7x7q4cqNdOEU+tX9DrlFjgxu/x0k48dlQS0Kaop24/vihA==} + '@tiptap/extension-text@3.19.0': + resolution: {integrity: sha512-K95+SnbZy0h6hNFtfy23n8t/nOcTFEf69In9TSFVVmwn/Nwlke+IfiESAkqbt1/7sKJeegRXYO7WzFEmFl9Q/g==} peerDependencies: - '@tiptap/core': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extension-typography@3.30.1': - resolution: {integrity: sha512-5NxHzMBaiNL8ntHEMoaQO5R3Dpf64Ha1Hgo/wqUmW5KaPAKZtqeukohmDUC7lWENgMWglnWVYCwUtYhEn+2gHA==} + '@tiptap/extension-typography@3.19.0': + resolution: {integrity: sha512-2Rwwz1ErNhqUcXPzPX2u4frdyrK4Yj6ZMvCLPxLt5lQXj9Eq9YEoD9isw8abR105ko3BCidvfElQYSFu6dWPSw==} peerDependencies: - '@tiptap/core': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extension-underline@3.30.1': - resolution: {integrity: sha512-Xro/EzEgWW+46ztrw5f4epDWQvcGpD+HUykzigj30bpIS8Vv4XDXFt+89dAcyDC7zRUMQULlWZV0UCyRLFEKBw==} + '@tiptap/extension-underline@3.19.0': + resolution: {integrity: sha512-800MGEWfG49j10wQzAFiW/ele1HT04MamcL8iyuPNu7ZbjbGN2yknvdrJlRy7hZlzIrVkZMr/1tz62KN33VHIw==} peerDependencies: - '@tiptap/core': 3.30.1 + '@tiptap/core': ^3.19.0 - '@tiptap/extensions@3.30.1': - resolution: {integrity: sha512-prNrvF1oMj+tngCLmZgXzQfuUuvYMbCe2sEPXXKJPqJNNffHd2wAuUZ0h6UQS5aRILaxB2kN1/yfwpxnhRpwYA==} + '@tiptap/extensions@3.19.0': + resolution: {integrity: sha512-ZmGUhLbMWaGqnJh2Bry+6V4M6gMpUDYo4D1xNux5Gng/E/eYtc+PMxMZ/6F7tNTAuujLBOQKj6D+4SsSm457jw==} peerDependencies: - '@tiptap/core': 3.30.1 - '@tiptap/pm': 3.30.1 + '@tiptap/core': ^3.19.0 + '@tiptap/pm': ^3.19.0 - '@tiptap/pm@3.30.1': - resolution: {integrity: sha512-2bHY+ihexKpfBURbAD+ahY0+lWle0TueTK80GAGYqZ/G7ErAPOmzN5RVAGMyZJI4wDkcFycRNLi3k0/3VT9a1A==} + '@tiptap/pm@3.19.0': + resolution: {integrity: sha512-789zcnM4a8OWzvbD2DL31d0wbSm9BVeO/R7PLQwLIGysDI3qzrcclyZ8yhqOEVuvPitRRwYLq+mY14jz7kY4cw==} - '@tiptap/starter-kit@3.30.1': - resolution: {integrity: sha512-6P2WEp2ZHsx8LV6hQ3K/MB3n39oiVhKESlzh0v+KhK8RR/iKSKGxvTFbi1D/1fo4j3fZf+43PGHjyKXskn9ZmQ==} + '@tiptap/starter-kit@3.19.0': + resolution: {integrity: sha512-dTCkHEz+Y8ADxX7h+xvl6caAj+3nII/wMB1rTQchSuNKqJTOrzyUsCWm094+IoZmLT738wANE0fRIgziNHs/ug==} '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} @@ -1014,8 +1014,8 @@ packages: '@types/d3-format@3.0.4': resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} - '@types/d3-geo@3.1.1': - resolution: {integrity: sha512-65Emv9fQiQQqphLlRkuQ5ypPsOmWPhtBGCMv61JDPEPMvsx+gzhGf74yw1a78xFKPj6zw4AgQICJoQv0vK9M2w==} + '@types/d3-geo@3.1.0': + resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} '@types/d3-hierarchy@3.1.7': resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} @@ -1032,8 +1032,8 @@ packages: '@types/d3-quadtree@3.0.6': resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} - '@types/d3-random@3.0.4': - resolution: {integrity: sha512-UHYId5WTCx4L4YNel7NU00XUXXgvgpgZOvp10PuvsQENjMDXhh2RyFc0KBjO7B45ne4Ha1yVH7ii0vnzKkuzWA==} + '@types/d3-random@3.0.3': + resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} '@types/d3-scale-chromatic@3.1.0': resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} @@ -1065,14 +1065,14 @@ packages: '@types/d3@7.4.3': resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} - '@types/estree@1.0.9': - resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/geojson@7946.0.16': resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} - '@types/hast@3.0.5': - resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} '@types/katex@0.16.8': resolution: {integrity: sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==} @@ -1086,9 +1086,6 @@ packages: '@types/mdurl@2.0.0': resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} - '@types/node@26.2.0': - resolution: {integrity: sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==} - '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -1098,22 +1095,36 @@ packages: '@upsetjs/venn.js@2.0.0': resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==} - acorn@8.18.0: - resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==} + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} hasBin: true argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - aria-query@5.3.1: - resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} + chevrotain-allstar@0.4.1: + resolution: {integrity: sha512-PvVJm3oGqrveUVW2Vt/eZGeiAIsJszYweUcYwcskg9e+IubNYKKD+rHHem7A6XVO22eDAL+inxNIGAzZ/VIWlA==} + peerDependencies: + chevrotain: ^12.0.0 + + chevrotain@12.0.0: + resolution: {integrity: sha512-csJvb+6kEiQaqo1woTdSAuOWdN0WTLIydkKrBnS+V5gZz0oqBrp4kQ35519QgK6TpBThiG3V1vNSHlIkv4AglQ==} + engines: {node: '>=22.0.0'} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -1130,6 +1141,9 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} @@ -1140,6 +1154,9 @@ packages: cose-base@2.2.0: resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + cytoscape-cose-bilkent@4.1.0: resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} peerDependencies: @@ -1150,8 +1167,8 @@ packages: peerDependencies: cytoscape: ^3.2.0 - cytoscape@3.34.1: - resolution: {integrity: sha512-Lr0RvH9H75y9ar8h9Toy6u4lxRSCcxUq+hHcQ26sVWo6BnaQp1gwEZOYqwuYTZhyW7npyKnNLP8oJ2p1/3OZ7g==} + cytoscape@3.33.2: + resolution: {integrity: sha512-sj4HXd3DokGhzZAdjDejGvTPLqlt84vNFN8m7bGsOzDY5DyVcxIb2ejIXat2Iy7HxWhdT/N1oKyheJ5YdpsGuw==} engines: {node: '>=0.10'} d3-array@2.12.1: @@ -1296,8 +1313,8 @@ packages: dagre-d3-es@7.0.14: resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==} - dayjs@1.11.22: - resolution: {integrity: sha512-1YRnxzt/AabP3GHxnaB9/b+ZScCKu5TeF+co+BWG+lnWVIwEcTFc1FVE0WLNmNO3sA6GGXL40i5qkHfbLzpwrg==} + dayjs@1.11.20: + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} @@ -1314,41 +1331,37 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - devalue@5.9.0: - resolution: {integrity: sha512-RWrqdArjvPbsATEhOPUo6Wndc/iWnkWKlhIrdlF3zMMYo/c3CVtoaVAyLtWxz5h8nSlkHzxnzV2uLydPXmtF+A==} + devalue@5.6.2: + resolution: {integrity: sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==} devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - dompurify@3.4.13: - resolution: {integrity: sha512-2vmYIoqjze2d+kakP8S/nS5shfsl587kzwEjcGlTdiksUVgFHnFCsLYDVj/JNqJVOQZGSYBTmuycv0PodwmnMQ==} + dompurify@3.4.1: + resolution: {integrity: sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw==} - enhanced-resolve@5.24.5: - resolution: {integrity: sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==} + enhanced-resolve@5.19.0: + resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} engines: {node: '>=10.13.0'} entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - es-toolkit@1.50.0: - resolution: {integrity: sha512-OyZKhUVvEep9ITEiwHn8GKnMRQIVqoSIX7WnRbkWgJkllCujilqP2rD0u979tkl8wqyc8ICwlc1UBVv/Sl1G6w==} - - esbuild@0.28.2: - resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} engines: {node: '>=18'} hasBin: true + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + esm-env@1.2.2: resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} - esrap@2.3.4: - resolution: {integrity: sha512-CHnJXZDfBeOAjLIGNy/0BEsmDu5+irHgUXRW9pGptxCbO3uyjJ98crilzFgiBqizW94UodjX3GAPLg/dhEnUfA==} - peerDependencies: - '@typescript-eslint/types': ^8.2.0 - peerDependenciesMeta: - '@typescript-eslint/types': - optional: true + esrap@2.2.2: + resolution: {integrity: sha512-zA6497ha+qKvoWIK+WM9NAh5ni17sKZKhbS5B3PoYbBvaYHZWoS33zmFybmyqpn07RLUxSmn+RCls2/XF+d0oQ==} fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} @@ -1370,21 +1383,14 @@ packages: hachure-fill@0.5.2: resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} - highlight.js@11.11.2: - resolution: {integrity: sha512-oaXMACAU0kzOMXBjWpNcX+vlwSBCIAiZ9BHa7gA15NOTtT2L/l8OSZDuqS2XppOhZBPJ7hm4o8ep2kyuip2uEQ==} - engines: {node: '>=12.0.0'} - - highlight.js@11.12.0: - resolution: {integrity: sha512-nbfWpyRMcMrPMmDwJB+dhX/eiaPKtc2RB+0QZskqJ3WjRA/FDS0e9hZrx8EC/lbEv8gXy98FcDbNa/dspAaJMg==} + highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} engines: {node: '>=12.0.0'} iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - import-meta-resolve@4.2.0: - resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} - internmap@1.0.1: resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} @@ -1395,12 +1401,12 @@ packages: is-reference@3.0.3: resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} - jiti@2.7.0: - resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - katex@0.16.47: - resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==} + katex@0.16.28: + resolution: {integrity: sha512-YHzO7721WbmAL6Ov1uzN/l5mY5WWWhJBSW+jq4tkfZfsxmo1hu6frS0EOswvjBUnWE6NtjEs48SFn5CQESRLZg==} hasBin: true khroma@2.1.0: @@ -1410,91 +1416,95 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + langium@4.2.2: + resolution: {integrity: sha512-JUshTRAfHI4/MF9dH2WupvjSXyn8JBuUEWazB8ZVJUtXutT0doDlAv1XKbZ1Pb5sMexa8FF4CFBc0iiul7gbUQ==} + engines: {node: '>=20.10.0', npm: '>=10.2.3'} + layout-base@1.0.2: resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} layout-base@2.0.1: resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} - lightningcss-android-arm64@1.32.0: - resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + lightningcss-android-arm64@1.30.2: + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] - lightningcss-darwin-arm64@1.32.0: - resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + lightningcss-darwin-arm64@1.30.2: + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.32.0: - resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + lightningcss-darwin-x64@1.30.2: + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.32.0: - resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + lightningcss-freebsd-x64@1.30.2: + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.32.0: - resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.32.0: - resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + lightningcss-linux-arm64-gnu@1.30.2: + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [glibc] - lightningcss-linux-arm64-musl@1.32.0: - resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + lightningcss-linux-arm64-musl@1.30.2: + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [musl] - lightningcss-linux-x64-gnu@1.32.0: - resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + lightningcss-linux-x64-gnu@1.30.2: + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [glibc] - lightningcss-linux-x64-musl@1.32.0: - resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + lightningcss-linux-x64-musl@1.30.2: + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [musl] - lightningcss-win32-arm64-msvc@1.32.0: - resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + lightningcss-win32-arm64-msvc@1.30.2: + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.32.0: - resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + lightningcss-win32-x64-msvc@1.30.2: + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.32.0: - resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + lightningcss@1.30.2: + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} engines: {node: '>= 12.0.0'} - linkify-it@5.0.2: - resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - linkifyjs@4.3.3: - resolution: {integrity: sha512-P8aEP5U/D1/IlTY2OeYsErdwh9bGuLE30NcXtKEjgdHcahveQoQwM2yZNsioQHsWFz0P7KKudisbrzCgR0sDHg==} + linkifyjs@4.3.2: + resolution: {integrity: sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==} locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} @@ -1520,8 +1530,8 @@ packages: markdown-it-task-lists@2.1.1: resolution: {integrity: sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==} - markdown-it@14.3.0: - resolution: {integrity: sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==} + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true marked@16.4.2: @@ -1529,11 +1539,14 @@ packages: engines: {node: '>= 20'} hasBin: true - mdurl@2.1.0: - resolution: {integrity: sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==} + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - mermaid@11.16.1: - resolution: {integrity: sha512-TQsq6u22fAn3rek5VOubrhKPo1g5hwC3FXUN9hiyupTckcYiGuuKGkNQrKYwGJkXUxZdojwRG46gsSCFZMDp4g==} + mermaid@11.14.0: + resolution: {integrity: sha512-GSGloRsBs+JINmmhl0JDwjpuezCsHB4WGI4NASHxL3fHo3o/BRXTxhDLKnln8/Q0lRFRyDdEjmk1/d5Sn1Xz8g==} + + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} @@ -1543,52 +1556,60 @@ packages: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} - nanoid@3.3.18: - resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - obug@2.1.4: - resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} - engines: {node: '>=12.20.0'} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} orderedmap@2.1.1: resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} - package-manager-detector@1.8.0: - resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==} + package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} path-data-parser@0.1.0: resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@4.0.5: - resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + points-on-curve@0.2.0: resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} points-on-path@0.2.1: resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} - postcss@8.5.26: - resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - prosemirror-changeset@2.4.1: - resolution: {integrity: sha512-96WBLhOaYhJ+kPhLg3uW359Tz6I/MfcrQfL4EGv4SrcqKEMC1gmoGrXHecPE8eOwTVCJ4IwgfzM8fFad25wNfw==} + prosemirror-changeset@2.3.1: + resolution: {integrity: sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==} - prosemirror-commands@1.7.2: - resolution: {integrity: sha512-q6Q6szxqdu9Xd6EcdKsqXghu5nQdZTpB4Q9yd04WRc7/jt763e/rT60Owh0L1GYY+T46o5rD+9lEN36dZS43tw==} + prosemirror-collab@1.3.1: + resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==} - prosemirror-dropcursor@1.8.3: - resolution: {integrity: sha512-FoYbsJR8gK+DGlqhNoE29Loa38eIZPzQRIb1VMaDNBoo4OLP6vVof/jR8qFY/6XvUd6Dhug8MDCHl2a/h8RTfQ==} + prosemirror-commands@1.7.1: + resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==} - prosemirror-gapcursor@1.4.1: - resolution: {integrity: sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==} + prosemirror-dropcursor@1.8.2: + resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==} + + prosemirror-gapcursor@1.4.0: + resolution: {integrity: sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ==} prosemirror-history@1.5.0: resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==} @@ -1599,8 +1620,17 @@ packages: prosemirror-keymap@1.2.3: resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} - prosemirror-model@1.25.11: - resolution: {integrity: sha512-QWg9RhnpLlogAmp3p96uEFrE5txQpFynd4vhBAELkwgOCWQs/X0yCzB3/hrHqiPwf91RG5KyWq6553zs9JqIOQ==} + prosemirror-markdown@1.13.4: + resolution: {integrity: sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw==} + + prosemirror-menu@1.2.5: + resolution: {integrity: sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==} + + prosemirror-model@1.25.4: + resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==} + + prosemirror-schema-basic@1.2.4: + resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==} prosemirror-schema-list@1.5.1: resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} @@ -1611,11 +1641,18 @@ packages: prosemirror-tables@1.8.5: resolution: {integrity: sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==} - prosemirror-transform@1.12.0: - resolution: {integrity: sha512-GxboyN4AMIsoHNtz5uf2r2Ru551i5hWeCMD6E2Ib4Eogqoub0NflniaBPVQ4MrGE5yZ8JV9tUHg9qcZTTrcN4w==} + prosemirror-trailing-node@3.0.0: + resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==} + peerDependencies: + prosemirror-model: ^1.22.1 + prosemirror-state: ^1.4.2 + prosemirror-view: ^1.33.8 - prosemirror-view@1.42.2: - resolution: {integrity: sha512-Pdg0l5kXm8aLDquFAnQFTCITg0q44sLqBlHlpsVLD9segdOao8TOfQdAhCrCXyVgPSRr6UDDROOIWA3bIrN9YQ==} + prosemirror-transform@1.11.0: + resolution: {integrity: sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw==} + + prosemirror-view@1.41.6: + resolution: {integrity: sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg==} punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} @@ -1628,8 +1665,8 @@ packages: robust-predicates@3.0.3: resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} - rollup@4.62.4: - resolution: {integrity: sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==} + rollup@4.57.1: + resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -1649,8 +1686,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - set-cookie-parser@3.1.2: - resolution: {integrity: sha512-5/r/lTwbJ3zQ+qwdUFZYeRNqda7P5HD8zQKqlSjdGt1/S0cjLAphHusj4Y58ahDtWn/g32xrIS58/ikOvwl0Lw==} + set-cookie-parser@3.0.1: + resolution: {integrity: sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==} sirv@3.0.2: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} @@ -1663,39 +1700,39 @@ packages: stylis@4.4.0: resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==} - svelte-check@4.7.6: - resolution: {integrity: sha512-t2scM//ZuVbSY/T2w6FSBw1v9s2NEmh/g+sy1lqtosW5ylBV5AF4wFb1Ts9Kf3MbfPDUDJDZ9L436YT0SPTdvw==} + svelte-check@4.3.6: + resolution: {integrity: sha512-uBkz96ElE3G4pt9E1Tw0xvBfIUQkeH794kDQZdAUk795UVMr+NJZpuFSS62vcmO/DuSalK83LyOwhgWq8YGU1Q==} engines: {node: '>= 18.0.0'} hasBin: true peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 - typescript: ^5.0.0 || ^6.0.0 + typescript: '>=5.0.0' - svelte@5.56.9: - resolution: {integrity: sha512-VT8kSnlEg8069w7AiCcAk3Yf5xvMnrGTagVOmU/OpOLHaHnNqXhWZCH/4EVga/bT/HtWhvE6/fHrXLErx7OnJA==} + svelte@5.50.0: + resolution: {integrity: sha512-FR9kTLmX5i0oyeQ5j/+w8DuagIkQ7MWMuPpPVioW2zx9Dw77q+1ufLzF1IqNtcTXPRnIIio4PlasliVn43OnbQ==} engines: {node: '>=18'} - tailwindcss@4.3.3: - resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} + tailwindcss@4.1.18: + resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} - tapable@2.3.3: - resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} - tinyexec@1.3.0: - resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} + tinyexec@1.1.1: + resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} engines: {node: '>=18'} - tinyglobby@0.2.17: - resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - ts-dedent@2.3.0: - resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==} + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} typescript@5.9.3: @@ -1706,15 +1743,15 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - undici-types@8.3.0: - resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} - uuid@14.0.1: - resolution: {integrity: sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==} + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true - vite@7.3.6: - resolution: {integrity: sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==} + vite@7.3.1: + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -1753,14 +1790,34 @@ packages: yaml: optional: true - vitefu@1.1.3: - resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==} + vitefu@1.1.1: + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 peerDependenciesMeta: vite: optional: true + vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + + vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + + vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + + vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + + vscode-languageserver@9.0.1: + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} + hasBin: true + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} @@ -1773,98 +1830,111 @@ snapshots: '@antfu/install-pkg@1.1.0': dependencies: - package-manager-detector: 1.8.0 - tinyexec: 1.3.0 + package-manager-detector: 1.6.0 + tinyexec: 1.1.1 '@braintree/sanitize-url@7.1.2': {} - '@chevrotain/types@11.1.2': {} + '@chevrotain/cst-dts-gen@12.0.0': + dependencies: + '@chevrotain/gast': 12.0.0 + '@chevrotain/types': 12.0.0 - '@esbuild/aix-ppc64@0.28.2': + '@chevrotain/gast@12.0.0': + dependencies: + '@chevrotain/types': 12.0.0 + + '@chevrotain/regexp-to-ast@12.0.0': {} + + '@chevrotain/types@12.0.0': {} + + '@chevrotain/utils@12.0.0': {} + + '@esbuild/aix-ppc64@0.27.3': optional: true - '@esbuild/android-arm64@0.28.2': + '@esbuild/android-arm64@0.27.3': optional: true - '@esbuild/android-arm@0.28.2': + '@esbuild/android-arm@0.27.3': optional: true - '@esbuild/android-x64@0.28.2': + '@esbuild/android-x64@0.27.3': optional: true - '@esbuild/darwin-arm64@0.28.2': + '@esbuild/darwin-arm64@0.27.3': optional: true - '@esbuild/darwin-x64@0.28.2': + '@esbuild/darwin-x64@0.27.3': optional: true - '@esbuild/freebsd-arm64@0.28.2': + '@esbuild/freebsd-arm64@0.27.3': optional: true - '@esbuild/freebsd-x64@0.28.2': + '@esbuild/freebsd-x64@0.27.3': optional: true - '@esbuild/linux-arm64@0.28.2': + '@esbuild/linux-arm64@0.27.3': optional: true - '@esbuild/linux-arm@0.28.2': + '@esbuild/linux-arm@0.27.3': optional: true - '@esbuild/linux-ia32@0.28.2': + '@esbuild/linux-ia32@0.27.3': optional: true - '@esbuild/linux-loong64@0.28.2': + '@esbuild/linux-loong64@0.27.3': optional: true - '@esbuild/linux-mips64el@0.28.2': + '@esbuild/linux-mips64el@0.27.3': optional: true - '@esbuild/linux-ppc64@0.28.2': + '@esbuild/linux-ppc64@0.27.3': optional: true - '@esbuild/linux-riscv64@0.28.2': + '@esbuild/linux-riscv64@0.27.3': optional: true - '@esbuild/linux-s390x@0.28.2': + '@esbuild/linux-s390x@0.27.3': optional: true - '@esbuild/linux-x64@0.28.2': + '@esbuild/linux-x64@0.27.3': optional: true - '@esbuild/netbsd-arm64@0.28.2': + '@esbuild/netbsd-arm64@0.27.3': optional: true - '@esbuild/netbsd-x64@0.28.2': + '@esbuild/netbsd-x64@0.27.3': optional: true - '@esbuild/openbsd-arm64@0.28.2': + '@esbuild/openbsd-arm64@0.27.3': optional: true - '@esbuild/openbsd-x64@0.28.2': + '@esbuild/openbsd-x64@0.27.3': optional: true - '@esbuild/openharmony-arm64@0.28.2': + '@esbuild/openharmony-arm64@0.27.3': optional: true - '@esbuild/sunos-x64@0.28.2': + '@esbuild/sunos-x64@0.27.3': optional: true - '@esbuild/win32-arm64@0.28.2': + '@esbuild/win32-arm64@0.27.3': optional: true - '@esbuild/win32-ia32@0.28.2': + '@esbuild/win32-ia32@0.27.3': optional: true - '@esbuild/win32-x64@0.28.2': + '@esbuild/win32-x64@0.27.3': optional: true '@iconify/types@2.0.0': {} - '@iconify/utils@3.1.4': + '@iconify/utils@3.1.1': dependencies: '@antfu/install-pkg': 1.1.0 '@iconify/types': 2.0.0 - import-meta-resolve: 4.2.0 + mlly: 1.8.2 '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -1885,502 +1955,504 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@mermaid-js/parser@1.2.0': + '@mermaid-js/parser@1.1.0': dependencies: - '@chevrotain/types': 11.1.2 - - '@napi-rs/lzma-linux-x64-gnu@1.5.1': - optional: true + langium: 4.2.2 '@polka/url@1.0.0-next.29': {} - '@rollup/rollup-android-arm-eabi@4.62.4': + '@remirror/core-constants@3.0.0': {} + + '@rollup/rollup-android-arm-eabi@4.57.1': optional: true - '@rollup/rollup-android-arm64@4.62.4': + '@rollup/rollup-android-arm64@4.57.1': optional: true - '@rollup/rollup-darwin-arm64@4.62.4': + '@rollup/rollup-darwin-arm64@4.57.1': optional: true - '@rollup/rollup-darwin-x64@4.62.4': + '@rollup/rollup-darwin-x64@4.57.1': optional: true - '@rollup/rollup-freebsd-arm64@4.62.4': + '@rollup/rollup-freebsd-arm64@4.57.1': optional: true - '@rollup/rollup-freebsd-x64@4.62.4': + '@rollup/rollup-freebsd-x64@4.57.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.62.4': + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.62.4': + '@rollup/rollup-linux-arm-musleabihf@4.57.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.62.4': + '@rollup/rollup-linux-arm64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.62.4': + '@rollup/rollup-linux-arm64-musl@4.57.1': optional: true - '@rollup/rollup-linux-loong64-gnu@4.62.4': + '@rollup/rollup-linux-loong64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-loong64-musl@4.62.4': + '@rollup/rollup-linux-loong64-musl@4.57.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.62.4': + '@rollup/rollup-linux-ppc64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-ppc64-musl@4.62.4': + '@rollup/rollup-linux-ppc64-musl@4.57.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.62.4': + '@rollup/rollup-linux-riscv64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.62.4': + '@rollup/rollup-linux-riscv64-musl@4.57.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.62.4': + '@rollup/rollup-linux-s390x-gnu@4.57.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.62.4': + '@rollup/rollup-linux-x64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-x64-musl@4.62.4': + '@rollup/rollup-linux-x64-musl@4.57.1': optional: true - '@rollup/rollup-openbsd-x64@4.62.4': + '@rollup/rollup-openbsd-x64@4.57.1': optional: true - '@rollup/rollup-openharmony-arm64@4.62.4': + '@rollup/rollup-openharmony-arm64@4.57.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.62.4': + '@rollup/rollup-win32-arm64-msvc@4.57.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.62.4': + '@rollup/rollup-win32-ia32-msvc@4.57.1': optional: true - '@rollup/rollup-win32-x64-gnu@4.62.4': + '@rollup/rollup-win32-x64-gnu@4.57.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.62.4': + '@rollup/rollup-win32-x64-msvc@4.57.1': optional: true '@standard-schema/spec@1.1.0': {} - '@sveltejs/acorn-typescript@1.0.13(acorn@8.18.0)': + '@sveltejs/acorn-typescript@1.0.8(acorn@8.15.0)': dependencies: - acorn: 8.18.0 + acorn: 8.15.0 - '@sveltejs/adapter-auto@7.0.1(@sveltejs/kit@2.70.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.56.9)(typescript@5.9.3)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)))': + '@sveltejs/adapter-auto@7.0.0(@sveltejs/kit@2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.50.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)))': dependencies: - '@sveltejs/kit': 2.70.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.56.9)(typescript@5.9.3)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)) + '@sveltejs/kit': 2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.50.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)) - '@sveltejs/adapter-static@3.0.10(@sveltejs/kit@2.70.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.56.9)(typescript@5.9.3)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)))': + '@sveltejs/adapter-static@3.0.10(@sveltejs/kit@2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.50.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)))': dependencies: - '@sveltejs/kit': 2.70.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.56.9)(typescript@5.9.3)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)) + '@sveltejs/kit': 2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.50.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)) - '@sveltejs/kit@2.70.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.56.9)(typescript@5.9.3)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0))': + '@sveltejs/kit@2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.50.0)(typescript@5.9.3)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2))': dependencies: '@standard-schema/spec': 1.1.0 - '@sveltejs/acorn-typescript': 1.0.13(acorn@8.18.0) - '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)) + '@sveltejs/acorn-typescript': 1.0.8(acorn@8.15.0) + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)) '@types/cookie': 0.6.0 - acorn: 8.18.0 + acorn: 8.15.0 cookie: 0.6.0 - devalue: 5.9.0 + devalue: 5.6.2 esm-env: 1.2.2 kleur: 4.1.5 magic-string: 0.30.21 mrmime: 2.0.1 - set-cookie-parser: 3.1.2 + sade: 1.8.1 + set-cookie-parser: 3.0.1 sirv: 3.0.2 - svelte: 5.56.9 - vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0) + svelte: 5.50.0 + vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2) optionalDependencies: typescript: 5.9.3 - '@sveltejs/load-config@0.2.3': {} - - '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)) - obug: 2.1.4 - svelte: 5.56.9 - vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0) + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)) + obug: 2.1.1 + svelte: 5.50.0 + vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2) - '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0))': + '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.56.9)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.50.0)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)) deepmerge: 4.3.1 magic-string: 0.30.21 - obug: 2.1.4 - svelte: 5.56.9 - vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0) - vitefu: 1.1.3(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)) + obug: 2.1.1 + svelte: 5.50.0 + vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2) + vitefu: 1.1.1(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)) - '@tailwindcss/node@4.3.3': + '@tailwindcss/node@4.1.18': dependencies: '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.24.5 - jiti: 2.7.0 - lightningcss: 1.32.0 + enhanced-resolve: 5.19.0 + jiti: 2.6.1 + lightningcss: 1.30.2 magic-string: 0.30.21 source-map-js: 1.2.1 - tailwindcss: 4.3.3 + tailwindcss: 4.1.18 - '@tailwindcss/oxide-android-arm64@4.3.3': + '@tailwindcss/oxide-android-arm64@4.1.18': optional: true - '@tailwindcss/oxide-darwin-arm64@4.3.3': + '@tailwindcss/oxide-darwin-arm64@4.1.18': optional: true - '@tailwindcss/oxide-darwin-x64@4.3.3': + '@tailwindcss/oxide-darwin-x64@4.1.18': optional: true - '@tailwindcss/oxide-freebsd-x64@4.3.3': + '@tailwindcss/oxide-freebsd-x64@4.1.18': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.3.3': + '@tailwindcss/oxide-linux-x64-musl@4.1.18': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.3.3': + '@tailwindcss/oxide-wasm32-wasi@4.1.18': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': optional: true - '@tailwindcss/oxide@4.3.3': + '@tailwindcss/oxide@4.1.18': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.3.3 - '@tailwindcss/oxide-darwin-arm64': 4.3.3 - '@tailwindcss/oxide-darwin-x64': 4.3.3 - '@tailwindcss/oxide-freebsd-x64': 4.3.3 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.3 - '@tailwindcss/oxide-linux-arm64-gnu': 4.3.3 - '@tailwindcss/oxide-linux-arm64-musl': 4.3.3 - '@tailwindcss/oxide-linux-x64-gnu': 4.3.3 - '@tailwindcss/oxide-linux-x64-musl': 4.3.3 - '@tailwindcss/oxide-wasm32-wasi': 4.3.3 - '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 - '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 + '@tailwindcss/oxide-android-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-x64': 4.1.18 + '@tailwindcss/oxide-freebsd-x64': 4.1.18 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.18 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-x64-musl': 4.1.18 + '@tailwindcss/oxide-wasm32-wasi': 4.1.18 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 - '@tailwindcss/postcss@4.3.3': + '@tailwindcss/postcss@4.1.18': dependencies: '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.3.3 - '@tailwindcss/oxide': 4.3.3 - postcss: 8.5.26 - tailwindcss: 4.3.3 + '@tailwindcss/node': 4.1.18 + '@tailwindcss/oxide': 4.1.18 + postcss: 8.5.6 + tailwindcss: 4.1.18 - '@tailwindcss/vite@4.3.3(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0))': + '@tailwindcss/vite@4.1.18(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2))': dependencies: - '@tailwindcss/node': 4.3.3 - '@tailwindcss/oxide': 4.3.3 - tailwindcss: 4.3.3 - vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0) + '@tailwindcss/node': 4.1.18 + '@tailwindcss/oxide': 4.1.18 + tailwindcss: 4.1.18 + vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2) - '@tauri-apps/api@2.11.1': {} + '@tauri-apps/api@2.10.1': {} - '@tauri-apps/cli-darwin-arm64@2.11.4': + '@tauri-apps/cli-darwin-arm64@2.10.0': optional: true - '@tauri-apps/cli-darwin-x64@2.11.4': + '@tauri-apps/cli-darwin-x64@2.10.0': optional: true - '@tauri-apps/cli-linux-arm-gnueabihf@2.11.4': + '@tauri-apps/cli-linux-arm-gnueabihf@2.10.0': optional: true - '@tauri-apps/cli-linux-arm64-gnu@2.11.4': + '@tauri-apps/cli-linux-arm64-gnu@2.10.0': optional: true - '@tauri-apps/cli-linux-arm64-musl@2.11.4': + '@tauri-apps/cli-linux-arm64-musl@2.10.0': optional: true - '@tauri-apps/cli-linux-riscv64-gnu@2.11.4': + '@tauri-apps/cli-linux-riscv64-gnu@2.10.0': optional: true - '@tauri-apps/cli-linux-x64-gnu@2.11.4': + '@tauri-apps/cli-linux-x64-gnu@2.10.0': optional: true - '@tauri-apps/cli-linux-x64-musl@2.11.4': + '@tauri-apps/cli-linux-x64-musl@2.10.0': optional: true - '@tauri-apps/cli-win32-arm64-msvc@2.11.4': + '@tauri-apps/cli-win32-arm64-msvc@2.10.0': optional: true - '@tauri-apps/cli-win32-ia32-msvc@2.11.4': + '@tauri-apps/cli-win32-ia32-msvc@2.10.0': optional: true - '@tauri-apps/cli-win32-x64-msvc@2.11.4': + '@tauri-apps/cli-win32-x64-msvc@2.10.0': optional: true - '@tauri-apps/cli@2.11.4': + '@tauri-apps/cli@2.10.0': 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 + '@tauri-apps/cli-darwin-arm64': 2.10.0 + '@tauri-apps/cli-darwin-x64': 2.10.0 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.10.0 + '@tauri-apps/cli-linux-arm64-gnu': 2.10.0 + '@tauri-apps/cli-linux-arm64-musl': 2.10.0 + '@tauri-apps/cli-linux-riscv64-gnu': 2.10.0 + '@tauri-apps/cli-linux-x64-gnu': 2.10.0 + '@tauri-apps/cli-linux-x64-musl': 2.10.0 + '@tauri-apps/cli-win32-arm64-msvc': 2.10.0 + '@tauri-apps/cli-win32-ia32-msvc': 2.10.0 + '@tauri-apps/cli-win32-x64-msvc': 2.10.0 - '@tauri-apps/plugin-dialog@2.7.2': + '@tauri-apps/plugin-dialog@2.6.0': dependencies: - '@tauri-apps/api': 2.11.1 + '@tauri-apps/api': 2.10.1 - '@tauri-apps/plugin-fs@2.5.1': + '@tauri-apps/plugin-fs@2.4.5': dependencies: - '@tauri-apps/api': 2.11.1 + '@tauri-apps/api': 2.10.1 - '@tauri-apps/plugin-opener@2.5.4': + '@tauri-apps/plugin-opener@2.5.3': dependencies: - '@tauri-apps/api': 2.11.1 + '@tauri-apps/api': 2.10.1 - '@tauri-apps/plugin-updater@2.10.1': + '@tauri-apps/plugin-updater@2.10.0': dependencies: - '@tauri-apps/api': 2.11.1 + '@tauri-apps/api': 2.10.1 - '@tiptap/core@3.30.1(@tiptap/pm@3.30.1)': + '@tiptap/core@3.19.0(@tiptap/pm@3.19.0)': dependencies: - '@tiptap/pm': 3.30.1 + '@tiptap/pm': 3.19.0 - '@tiptap/extension-blockquote@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)': + '@tiptap/extension-blockquote@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) - '@tiptap/pm': 3.30.1 + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extension-bold@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))': + '@tiptap/extension-bold@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extension-bullet-list@3.30.1(@tiptap/extension-list@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1))': + '@tiptap/extension-bullet-list@3.19.0(@tiptap/extension-list@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/extension-list': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + '@tiptap/extension-list': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) - '@tiptap/extension-code-block-lowlight@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/extension-code-block@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)(highlight.js@11.12.0)(lowlight@3.3.0)': + '@tiptap/extension-code-block-lowlight@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/extension-code-block@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)(highlight.js@11.11.1)(lowlight@3.3.0)': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) - '@tiptap/extension-code-block': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) - '@tiptap/pm': 3.30.1 - highlight.js: 11.12.0 + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) + '@tiptap/extension-code-block': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) + '@tiptap/pm': 3.19.0 + highlight.js: 11.11.1 lowlight: 3.3.0 - '@tiptap/extension-code-block@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)': + '@tiptap/extension-code-block@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) - '@tiptap/pm': 3.30.1 + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) + '@tiptap/pm': 3.19.0 - '@tiptap/extension-code@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))': + '@tiptap/extension-code@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extension-color@3.30.1(@tiptap/extension-text-style@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)))': + '@tiptap/extension-color@3.19.0(@tiptap/extension-text-style@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)))': dependencies: - '@tiptap/extension-text-style': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) + '@tiptap/extension-text-style': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) - '@tiptap/extension-details@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/extension-text-style@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)))(@tiptap/pm@3.30.1)': + '@tiptap/extension-details@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/extension-text-style@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)))(@tiptap/pm@3.19.0)': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) - '@tiptap/extension-text-style': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) - '@tiptap/pm': 3.30.1 + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) + '@tiptap/extension-text-style': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) + '@tiptap/pm': 3.19.0 - '@tiptap/extension-document@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))': + '@tiptap/extension-document@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extension-dropcursor@3.30.1(@tiptap/extensions@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1))': + '@tiptap/extension-dropcursor@3.19.0(@tiptap/extensions@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/extensions': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + '@tiptap/extensions': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) - '@tiptap/extension-gapcursor@3.30.1(@tiptap/extensions@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1))': + '@tiptap/extension-gapcursor@3.19.0(@tiptap/extensions@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/extensions': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + '@tiptap/extensions': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) - '@tiptap/extension-hard-break@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))': + '@tiptap/extension-hard-break@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extension-heading@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))': + '@tiptap/extension-heading@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extension-highlight@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))': + '@tiptap/extension-highlight@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extension-horizontal-rule@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)': + '@tiptap/extension-horizontal-rule@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) - '@tiptap/pm': 3.30.1 + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) + '@tiptap/pm': 3.19.0 - '@tiptap/extension-image@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))': + '@tiptap/extension-image@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extension-italic@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))': + '@tiptap/extension-italic@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extension-link@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)': + '@tiptap/extension-link@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) - '@tiptap/pm': 3.30.1 - linkifyjs: 4.3.3 + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) + '@tiptap/pm': 3.19.0 + linkifyjs: 4.3.2 - '@tiptap/extension-list-item@3.30.1(@tiptap/extension-list@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1))': + '@tiptap/extension-list-item@3.19.0(@tiptap/extension-list@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/extension-list': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + '@tiptap/extension-list': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) - '@tiptap/extension-list-keymap@3.30.1(@tiptap/extension-list@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1))': + '@tiptap/extension-list-keymap@3.19.0(@tiptap/extension-list@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/extension-list': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + '@tiptap/extension-list': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) - '@tiptap/extension-list@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)': + '@tiptap/extension-list@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) - '@tiptap/pm': 3.30.1 + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) + '@tiptap/pm': 3.19.0 - '@tiptap/extension-ordered-list@3.30.1(@tiptap/extension-list@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1))': + '@tiptap/extension-ordered-list@3.19.0(@tiptap/extension-list@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/extension-list': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + '@tiptap/extension-list': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) - '@tiptap/extension-paragraph@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))': + '@tiptap/extension-paragraph@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extension-placeholder@3.30.1(@tiptap/extensions@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1))': + '@tiptap/extension-placeholder@3.19.0(@tiptap/extensions@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/extensions': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + '@tiptap/extensions': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) - '@tiptap/extension-strike@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))': + '@tiptap/extension-strike@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extension-subscript@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)': + '@tiptap/extension-subscript@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) - '@tiptap/pm': 3.30.1 + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) + '@tiptap/pm': 3.19.0 - '@tiptap/extension-superscript@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)': + '@tiptap/extension-superscript@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) - '@tiptap/pm': 3.30.1 + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) + '@tiptap/pm': 3.19.0 - '@tiptap/extension-table-cell@3.30.1(@tiptap/extension-table@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1))': + '@tiptap/extension-table-cell@3.19.0(@tiptap/extension-table@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/extension-table': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + '@tiptap/extension-table': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) - '@tiptap/extension-table-header@3.30.1(@tiptap/extension-table@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1))': + '@tiptap/extension-table-header@3.19.0(@tiptap/extension-table@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/extension-table': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + '@tiptap/extension-table': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) - '@tiptap/extension-table-row@3.30.1(@tiptap/extension-table@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1))': + '@tiptap/extension-table-row@3.19.0(@tiptap/extension-table@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/extension-table': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + '@tiptap/extension-table': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) - '@tiptap/extension-table@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)': + '@tiptap/extension-table@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) - '@tiptap/pm': 3.30.1 + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) + '@tiptap/pm': 3.19.0 - '@tiptap/extension-task-item@3.30.1(@tiptap/extension-list@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1))': + '@tiptap/extension-task-item@3.19.0(@tiptap/extension-list@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/extension-list': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + '@tiptap/extension-list': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) - '@tiptap/extension-task-list@3.30.1(@tiptap/extension-list@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1))': + '@tiptap/extension-task-list@3.19.0(@tiptap/extension-list@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/extension-list': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) + '@tiptap/extension-list': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) - '@tiptap/extension-text-align@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))': + '@tiptap/extension-text-align@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extension-text-style@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))': + '@tiptap/extension-text-style@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extension-text@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))': + '@tiptap/extension-text@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extension-typography@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))': + '@tiptap/extension-typography@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extension-underline@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))': + '@tiptap/extension-underline@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) - '@tiptap/extensions@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)': + '@tiptap/extensions@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) - '@tiptap/pm': 3.30.1 + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) + '@tiptap/pm': 3.19.0 - '@tiptap/pm@3.30.1': + '@tiptap/pm@3.19.0': dependencies: - prosemirror-changeset: 2.4.1 - prosemirror-commands: 1.7.2 - prosemirror-dropcursor: 1.8.3 - prosemirror-gapcursor: 1.4.1 + prosemirror-changeset: 2.3.1 + prosemirror-collab: 1.3.1 + prosemirror-commands: 1.7.1 + prosemirror-dropcursor: 1.8.2 + prosemirror-gapcursor: 1.4.0 prosemirror-history: 1.5.0 prosemirror-inputrules: 1.5.1 prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.11 + prosemirror-markdown: 1.13.4 + prosemirror-menu: 1.2.5 + prosemirror-model: 1.25.4 + prosemirror-schema-basic: 1.2.4 prosemirror-schema-list: 1.5.1 prosemirror-state: 1.4.4 prosemirror-tables: 1.8.5 - prosemirror-transform: 1.12.0 - prosemirror-view: 1.42.2 + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6) + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 - '@tiptap/starter-kit@3.30.1': + '@tiptap/starter-kit@3.19.0': dependencies: - '@tiptap/core': 3.30.1(@tiptap/pm@3.30.1) - '@tiptap/extension-blockquote': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) - '@tiptap/extension-bold': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) - '@tiptap/extension-bullet-list': 3.30.1(@tiptap/extension-list@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)) - '@tiptap/extension-code': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) - '@tiptap/extension-code-block': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) - '@tiptap/extension-document': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) - '@tiptap/extension-dropcursor': 3.30.1(@tiptap/extensions@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)) - '@tiptap/extension-gapcursor': 3.30.1(@tiptap/extensions@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)) - '@tiptap/extension-hard-break': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) - '@tiptap/extension-heading': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) - '@tiptap/extension-horizontal-rule': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) - '@tiptap/extension-italic': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) - '@tiptap/extension-link': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) - '@tiptap/extension-list': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) - '@tiptap/extension-list-item': 3.30.1(@tiptap/extension-list@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)) - '@tiptap/extension-list-keymap': 3.30.1(@tiptap/extension-list@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)) - '@tiptap/extension-ordered-list': 3.30.1(@tiptap/extension-list@3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1)) - '@tiptap/extension-paragraph': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) - '@tiptap/extension-strike': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) - '@tiptap/extension-text': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) - '@tiptap/extension-underline': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1)) - '@tiptap/extensions': 3.30.1(@tiptap/core@3.30.1(@tiptap/pm@3.30.1))(@tiptap/pm@3.30.1) - '@tiptap/pm': 3.30.1 + '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) + '@tiptap/extension-blockquote': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) + '@tiptap/extension-bold': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) + '@tiptap/extension-bullet-list': 3.19.0(@tiptap/extension-list@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)) + '@tiptap/extension-code': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) + '@tiptap/extension-code-block': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) + '@tiptap/extension-document': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) + '@tiptap/extension-dropcursor': 3.19.0(@tiptap/extensions@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)) + '@tiptap/extension-gapcursor': 3.19.0(@tiptap/extensions@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)) + '@tiptap/extension-hard-break': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) + '@tiptap/extension-heading': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) + '@tiptap/extension-horizontal-rule': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) + '@tiptap/extension-italic': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) + '@tiptap/extension-link': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) + '@tiptap/extension-list': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) + '@tiptap/extension-list-item': 3.19.0(@tiptap/extension-list@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)) + '@tiptap/extension-list-keymap': 3.19.0(@tiptap/extension-list@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)) + '@tiptap/extension-ordered-list': 3.19.0(@tiptap/extension-list@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)) + '@tiptap/extension-paragraph': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) + '@tiptap/extension-strike': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) + '@tiptap/extension-text': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) + '@tiptap/extension-underline': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0)) + '@tiptap/extensions': 3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0) + '@tiptap/pm': 3.19.0 '@types/cookie@0.6.0': {} @@ -2423,7 +2495,7 @@ snapshots: '@types/d3-format@3.0.4': {} - '@types/d3-geo@3.1.1': + '@types/d3-geo@3.1.0': dependencies: '@types/geojson': 7946.0.16 @@ -2439,7 +2511,7 @@ snapshots: '@types/d3-quadtree@3.0.6': {} - '@types/d3-random@3.0.4': {} + '@types/d3-random@3.0.3': {} '@types/d3-scale-chromatic@3.1.0': {} @@ -2484,13 +2556,13 @@ snapshots: '@types/d3-fetch': 3.0.7 '@types/d3-force': 3.0.10 '@types/d3-format': 3.0.4 - '@types/d3-geo': 3.1.1 + '@types/d3-geo': 3.1.0 '@types/d3-hierarchy': 3.1.7 '@types/d3-interpolate': 3.0.4 '@types/d3-path': 3.1.1 '@types/d3-polygon': 3.0.2 '@types/d3-quadtree': 3.0.6 - '@types/d3-random': 3.0.4 + '@types/d3-random': 3.0.3 '@types/d3-scale': 4.0.9 '@types/d3-scale-chromatic': 3.1.0 '@types/d3-selection': 3.0.11 @@ -2501,11 +2573,11 @@ snapshots: '@types/d3-transition': 3.0.9 '@types/d3-zoom': 3.0.8 - '@types/estree@1.0.9': {} + '@types/estree@1.0.8': {} '@types/geojson@7946.0.16': {} - '@types/hast@3.0.5': + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 @@ -2520,11 +2592,8 @@ snapshots: '@types/mdurl@2.0.0': {} - '@types/node@26.2.0': - dependencies: - undici-types: 8.3.0 - - '@types/trusted-types@2.0.7': {} + '@types/trusted-types@2.0.7': + optional: true '@types/unist@3.0.3': {} @@ -2533,14 +2602,29 @@ snapshots: d3-selection: 3.0.0 d3-transition: 3.0.1(d3-selection@3.0.0) - acorn@8.18.0: {} + acorn@8.15.0: {} + + acorn@8.16.0: {} argparse@2.0.1: {} - aria-query@5.3.1: {} + aria-query@5.3.2: {} axobject-query@4.1.0: {} + chevrotain-allstar@0.4.1(chevrotain@12.0.0): + dependencies: + chevrotain: 12.0.0 + lodash-es: 4.18.1 + + chevrotain@12.0.0: + dependencies: + '@chevrotain/cst-dts-gen': 12.0.0 + '@chevrotain/gast': 12.0.0 + '@chevrotain/regexp-to-ast': 12.0.0 + '@chevrotain/types': 12.0.0 + '@chevrotain/utils': 12.0.0 + chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -2551,6 +2635,8 @@ snapshots: commander@8.3.0: {} + confbox@0.1.8: {} + cookie@0.6.0: {} cose-base@1.0.3: @@ -2561,17 +2647,19 @@ snapshots: dependencies: layout-base: 2.0.1 - cytoscape-cose-bilkent@4.1.0(cytoscape@3.34.1): + crelt@1.0.6: {} + + cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.2): dependencies: cose-base: 1.0.3 - cytoscape: 3.34.1 + cytoscape: 3.33.2 - cytoscape-fcose@2.2.0(cytoscape@3.34.1): + cytoscape-fcose@2.2.0(cytoscape@3.33.2): dependencies: cose-base: 2.2.0 - cytoscape: 3.34.1 + cytoscape: 3.33.2 - cytoscape@3.34.1: {} + cytoscape@3.33.2: {} d3-array@2.12.1: dependencies: @@ -2745,7 +2833,7 @@ snapshots: d3: 7.9.0 lodash-es: 4.18.1 - dayjs@1.11.22: {} + dayjs@1.11.20: {} deepmerge@4.3.1: {} @@ -2757,63 +2845,63 @@ snapshots: detect-libc@2.1.2: {} - devalue@5.9.0: {} + devalue@5.6.2: {} devlop@1.1.0: dependencies: dequal: 2.0.3 - dompurify@3.4.13: + dompurify@3.4.1: optionalDependencies: '@types/trusted-types': 2.0.7 - enhanced-resolve@5.24.5: + enhanced-resolve@5.19.0: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.3 + tapable: 2.3.0 entities@4.5.0: {} - es-toolkit@1.50.0: {} - - esbuild@0.28.2: + esbuild@0.27.3: optionalDependencies: - '@esbuild/aix-ppc64': 0.28.2 - '@esbuild/android-arm': 0.28.2 - '@esbuild/android-arm64': 0.28.2 - '@esbuild/android-x64': 0.28.2 - '@esbuild/darwin-arm64': 0.28.2 - '@esbuild/darwin-x64': 0.28.2 - '@esbuild/freebsd-arm64': 0.28.2 - '@esbuild/freebsd-x64': 0.28.2 - '@esbuild/linux-arm': 0.28.2 - '@esbuild/linux-arm64': 0.28.2 - '@esbuild/linux-ia32': 0.28.2 - '@esbuild/linux-loong64': 0.28.2 - '@esbuild/linux-mips64el': 0.28.2 - '@esbuild/linux-ppc64': 0.28.2 - '@esbuild/linux-riscv64': 0.28.2 - '@esbuild/linux-s390x': 0.28.2 - '@esbuild/linux-x64': 0.28.2 - '@esbuild/netbsd-arm64': 0.28.2 - '@esbuild/netbsd-x64': 0.28.2 - '@esbuild/openbsd-arm64': 0.28.2 - '@esbuild/openbsd-x64': 0.28.2 - '@esbuild/openharmony-arm64': 0.28.2 - '@esbuild/sunos-x64': 0.28.2 - '@esbuild/win32-arm64': 0.28.2 - '@esbuild/win32-ia32': 0.28.2 - '@esbuild/win32-x64': 0.28.2 + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 + + escape-string-regexp@4.0.0: {} esm-env@1.2.2: {} - esrap@2.3.4: + esrap@2.2.2: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - fdir@6.5.0(picomatch@4.0.5): + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: - picomatch: 4.0.5 + picomatch: 4.0.3 fsevents@2.3.3: optional: true @@ -2822,27 +2910,23 @@ snapshots: hachure-fill@0.5.2: {} - highlight.js@11.11.2: {} - - highlight.js@11.12.0: {} + highlight.js@11.11.1: {} iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - import-meta-resolve@4.2.0: {} - internmap@1.0.1: {} internmap@2.0.3: {} is-reference@3.0.3: dependencies: - '@types/estree': 1.0.9 + '@types/estree': 1.0.8 - jiti@2.7.0: {} + jiti@2.6.1: {} - katex@0.16.47: + katex@0.16.28: dependencies: commander: 8.3.0 @@ -2850,64 +2934,73 @@ snapshots: kleur@4.1.5: {} + langium@4.2.2: + dependencies: + '@chevrotain/regexp-to-ast': 12.0.0 + chevrotain: 12.0.0 + chevrotain-allstar: 0.4.1(chevrotain@12.0.0) + vscode-languageserver: 9.0.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + layout-base@1.0.2: {} layout-base@2.0.1: {} - lightningcss-android-arm64@1.32.0: + lightningcss-android-arm64@1.30.2: optional: true - lightningcss-darwin-arm64@1.32.0: + lightningcss-darwin-arm64@1.30.2: optional: true - lightningcss-darwin-x64@1.32.0: + lightningcss-darwin-x64@1.30.2: optional: true - lightningcss-freebsd-x64@1.32.0: + lightningcss-freebsd-x64@1.30.2: optional: true - lightningcss-linux-arm-gnueabihf@1.32.0: + lightningcss-linux-arm-gnueabihf@1.30.2: optional: true - lightningcss-linux-arm64-gnu@1.32.0: + lightningcss-linux-arm64-gnu@1.30.2: optional: true - lightningcss-linux-arm64-musl@1.32.0: + lightningcss-linux-arm64-musl@1.30.2: optional: true - lightningcss-linux-x64-gnu@1.32.0: + lightningcss-linux-x64-gnu@1.30.2: optional: true - lightningcss-linux-x64-musl@1.32.0: + lightningcss-linux-x64-musl@1.30.2: optional: true - lightningcss-win32-arm64-msvc@1.32.0: + lightningcss-win32-arm64-msvc@1.30.2: optional: true - lightningcss-win32-x64-msvc@1.32.0: + lightningcss-win32-x64-msvc@1.30.2: optional: true - lightningcss@1.32.0: + lightningcss@1.30.2: dependencies: detect-libc: 2.1.2 optionalDependencies: - lightningcss-android-arm64: 1.32.0 - lightningcss-darwin-arm64: 1.32.0 - lightningcss-darwin-x64: 1.32.0 - lightningcss-freebsd-x64: 1.32.0 - lightningcss-linux-arm-gnueabihf: 1.32.0 - lightningcss-linux-arm64-gnu: 1.32.0 - lightningcss-linux-arm64-musl: 1.32.0 - lightningcss-linux-x64-gnu: 1.32.0 - lightningcss-linux-x64-musl: 1.32.0 - lightningcss-win32-arm64-msvc: 1.32.0 - lightningcss-win32-x64-msvc: 1.32.0 + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 - linkify-it@5.0.2: + linkify-it@5.0.0: dependencies: uc.micro: 2.1.0 - linkifyjs@4.3.3: {} + linkifyjs@4.3.2: {} locate-character@3.0.0: {} @@ -2915,9 +3008,9 @@ snapshots: lowlight@3.3.0: dependencies: - '@types/hast': 3.0.5 + '@types/hast': 3.0.4 devlop: 1.1.0 - highlight.js: 11.11.2 + highlight.js: 11.11.1 magic-string@0.30.21: dependencies: @@ -2931,60 +3024,75 @@ snapshots: markdown-it-task-lists@2.1.1: {} - markdown-it@14.3.0: + markdown-it@14.1.0: dependencies: argparse: 2.0.1 entities: 4.5.0 - linkify-it: 5.0.2 - mdurl: 2.1.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 punycode.js: 2.3.1 uc.micro: 2.1.0 marked@16.4.2: {} - mdurl@2.1.0: {} + mdurl@2.0.0: {} - mermaid@11.16.1: + mermaid@11.14.0: dependencies: '@braintree/sanitize-url': 7.1.2 - '@iconify/utils': 3.1.4 - '@mermaid-js/parser': 1.2.0 + '@iconify/utils': 3.1.1 + '@mermaid-js/parser': 1.1.0 '@types/d3': 7.4.3 '@upsetjs/venn.js': 2.0.0 - cytoscape: 3.34.1 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.34.1) - cytoscape-fcose: 2.2.0(cytoscape@3.34.1) + cytoscape: 3.33.2 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.2) + cytoscape-fcose: 2.2.0(cytoscape@3.33.2) d3: 7.9.0 d3-sankey: 0.12.3 dagre-d3-es: 7.0.14 - dayjs: 1.11.22 - dompurify: 3.4.13 - es-toolkit: 1.50.0 - katex: 0.16.47 + dayjs: 1.11.20 + dompurify: 3.4.1 + katex: 0.16.28 khroma: 2.1.0 + lodash-es: 4.18.1 marked: 16.4.2 roughjs: 4.6.6 stylis: 4.4.0 - ts-dedent: 2.3.0 - uuid: 14.0.1 + ts-dedent: 2.2.0 + uuid: 11.1.0 + + mlly@1.8.2: + dependencies: + acorn: 8.16.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.3 mri@1.2.0: {} mrmime@2.0.1: {} - nanoid@3.3.18: {} + nanoid@3.3.11: {} - obug@2.1.4: {} + obug@2.1.1: {} orderedmap@2.1.1: {} - package-manager-detector@1.8.0: {} + package-manager-detector@1.6.0: {} path-data-parser@0.1.0: {} + pathe@2.0.3: {} + picocolors@1.1.1: {} - picomatch@4.0.5: {} + picomatch@4.0.3: {} + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.2 + pathe: 2.0.3 points-on-curve@0.2.0: {} @@ -2993,85 +3101,114 @@ snapshots: path-data-parser: 0.1.0 points-on-curve: 0.2.0 - postcss@8.5.26: + postcss@8.5.6: dependencies: - nanoid: 3.3.18 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 - prosemirror-changeset@2.4.1: + prosemirror-changeset@2.3.1: dependencies: - prosemirror-transform: 1.12.0 + prosemirror-transform: 1.11.0 - prosemirror-commands@1.7.2: - dependencies: - prosemirror-model: 1.25.11 - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - - prosemirror-dropcursor@1.8.3: + prosemirror-collab@1.3.1: dependencies: prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - prosemirror-view: 1.42.2 - prosemirror-gapcursor@1.4.1: + prosemirror-commands@1.7.1: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + prosemirror-dropcursor@1.8.2: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 + + prosemirror-gapcursor@1.4.0: dependencies: prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.11 + prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-view: 1.42.2 + prosemirror-view: 1.41.6 prosemirror-history@1.5.0: dependencies: prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - prosemirror-view: 1.42.2 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 rope-sequence: 1.3.4 prosemirror-inputrules@1.5.1: dependencies: prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 + prosemirror-transform: 1.11.0 prosemirror-keymap@1.2.3: dependencies: prosemirror-state: 1.4.4 w3c-keyname: 2.2.8 - prosemirror-model@1.25.11: + prosemirror-markdown@1.13.4: + dependencies: + '@types/markdown-it': 14.1.2 + markdown-it: 14.1.0 + prosemirror-model: 1.25.4 + + prosemirror-menu@1.2.5: + dependencies: + crelt: 1.0.6 + prosemirror-commands: 1.7.1 + prosemirror-history: 1.5.0 + prosemirror-state: 1.4.4 + + prosemirror-model@1.25.4: dependencies: orderedmap: 2.1.1 + prosemirror-schema-basic@1.2.4: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-schema-list@1.5.1: dependencies: - prosemirror-model: 1.25.11 + prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 + prosemirror-transform: 1.11.0 prosemirror-state@1.4.4: dependencies: - prosemirror-model: 1.25.11 - prosemirror-transform: 1.12.0 - prosemirror-view: 1.42.2 + prosemirror-model: 1.25.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 prosemirror-tables@1.8.5: dependencies: prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.11 + prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - prosemirror-view: 1.42.2 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 - prosemirror-transform@1.12.0: + prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6): dependencies: - prosemirror-model: 1.25.11 - - prosemirror-view@1.42.2: - dependencies: - prosemirror-model: 1.25.11 + '@remirror/core-constants': 3.0.0 + escape-string-regexp: 4.0.0 + prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 + prosemirror-view: 1.41.6 + + prosemirror-transform@1.11.0: + dependencies: + prosemirror-model: 1.25.4 + + prosemirror-view@1.41.6: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 punycode.js@2.3.1: {} @@ -3079,36 +3216,35 @@ snapshots: robust-predicates@3.0.3: {} - rollup@4.62.4: + rollup@4.57.1: dependencies: - '@types/estree': 1.0.9 + '@types/estree': 1.0.8 optionalDependencies: - '@napi-rs/lzma-linux-x64-gnu': 1.5.1 - '@rollup/rollup-android-arm-eabi': 4.62.4 - '@rollup/rollup-android-arm64': 4.62.4 - '@rollup/rollup-darwin-arm64': 4.62.4 - '@rollup/rollup-darwin-x64': 4.62.4 - '@rollup/rollup-freebsd-arm64': 4.62.4 - '@rollup/rollup-freebsd-x64': 4.62.4 - '@rollup/rollup-linux-arm-gnueabihf': 4.62.4 - '@rollup/rollup-linux-arm-musleabihf': 4.62.4 - '@rollup/rollup-linux-arm64-gnu': 4.62.4 - '@rollup/rollup-linux-arm64-musl': 4.62.4 - '@rollup/rollup-linux-loong64-gnu': 4.62.4 - '@rollup/rollup-linux-loong64-musl': 4.62.4 - '@rollup/rollup-linux-ppc64-gnu': 4.62.4 - '@rollup/rollup-linux-ppc64-musl': 4.62.4 - '@rollup/rollup-linux-riscv64-gnu': 4.62.4 - '@rollup/rollup-linux-riscv64-musl': 4.62.4 - '@rollup/rollup-linux-s390x-gnu': 4.62.4 - '@rollup/rollup-linux-x64-gnu': 4.62.4 - '@rollup/rollup-linux-x64-musl': 4.62.4 - '@rollup/rollup-openbsd-x64': 4.62.4 - '@rollup/rollup-openharmony-arm64': 4.62.4 - '@rollup/rollup-win32-arm64-msvc': 4.62.4 - '@rollup/rollup-win32-ia32-msvc': 4.62.4 - '@rollup/rollup-win32-x64-gnu': 4.62.4 - '@rollup/rollup-win32-x64-msvc': 4.62.4 + '@rollup/rollup-android-arm-eabi': 4.57.1 + '@rollup/rollup-android-arm64': 4.57.1 + '@rollup/rollup-darwin-arm64': 4.57.1 + '@rollup/rollup-darwin-x64': 4.57.1 + '@rollup/rollup-freebsd-arm64': 4.57.1 + '@rollup/rollup-freebsd-x64': 4.57.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 + '@rollup/rollup-linux-arm-musleabihf': 4.57.1 + '@rollup/rollup-linux-arm64-gnu': 4.57.1 + '@rollup/rollup-linux-arm64-musl': 4.57.1 + '@rollup/rollup-linux-loong64-gnu': 4.57.1 + '@rollup/rollup-linux-loong64-musl': 4.57.1 + '@rollup/rollup-linux-ppc64-gnu': 4.57.1 + '@rollup/rollup-linux-ppc64-musl': 4.57.1 + '@rollup/rollup-linux-riscv64-gnu': 4.57.1 + '@rollup/rollup-linux-riscv64-musl': 4.57.1 + '@rollup/rollup-linux-s390x-gnu': 4.57.1 + '@rollup/rollup-linux-x64-gnu': 4.57.1 + '@rollup/rollup-linux-x64-musl': 4.57.1 + '@rollup/rollup-openbsd-x64': 4.57.1 + '@rollup/rollup-openharmony-arm64': 4.57.1 + '@rollup/rollup-win32-arm64-msvc': 4.57.1 + '@rollup/rollup-win32-ia32-msvc': 4.57.1 + '@rollup/rollup-win32-x64-gnu': 4.57.1 + '@rollup/rollup-win32-x64-msvc': 4.57.1 fsevents: 2.3.3 rope-sequence@1.3.4: {} @@ -3128,7 +3264,7 @@ snapshots: safer-buffer@2.1.2: {} - set-cookie-parser@3.1.2: {} + set-cookie-parser@3.0.1: {} sirv@3.0.2: dependencies: @@ -3140,80 +3276,92 @@ snapshots: stylis@4.4.0: {} - svelte-check@4.7.6(picomatch@4.0.5)(svelte@5.56.9)(typescript@5.9.3): + svelte-check@4.3.6(picomatch@4.0.3)(svelte@5.50.0)(typescript@5.9.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 - '@sveltejs/load-config': 0.2.3 chokidar: 4.0.3 - fdir: 6.5.0(picomatch@4.0.5) + fdir: 6.5.0(picomatch@4.0.3) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.56.9 + svelte: 5.50.0 typescript: 5.9.3 transitivePeerDependencies: - picomatch - svelte@5.56.9: + svelte@5.50.0: dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 - '@sveltejs/acorn-typescript': 1.0.13(acorn@8.18.0) - '@types/estree': 1.0.9 - '@types/trusted-types': 2.0.7 - acorn: 8.18.0 - aria-query: 5.3.1 + '@sveltejs/acorn-typescript': 1.0.8(acorn@8.15.0) + '@types/estree': 1.0.8 + acorn: 8.15.0 + aria-query: 5.3.2 axobject-query: 4.1.0 clsx: 2.1.1 - devalue: 5.9.0 + devalue: 5.6.2 esm-env: 1.2.2 - esrap: 2.3.4 + esrap: 2.2.2 is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 zimmerframe: 1.1.4 - transitivePeerDependencies: - - '@typescript-eslint/types' - tailwindcss@4.3.3: {} + tailwindcss@4.1.18: {} - tapable@2.3.3: {} + tapable@2.3.0: {} - tinyexec@1.3.0: {} + tinyexec@1.1.1: {} - tinyglobby@0.2.17: + tinyglobby@0.2.15: dependencies: - fdir: 6.5.0(picomatch@4.0.5) - picomatch: 4.0.5 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 totalist@3.0.1: {} - ts-dedent@2.3.0: {} + ts-dedent@2.2.0: {} typescript@5.9.3: {} uc.micro@2.1.0: {} - undici-types@8.3.0: {} + ufo@1.6.3: {} - uuid@14.0.1: {} + uuid@11.1.0: {} - vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0): + vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2): dependencies: - esbuild: 0.28.2 - fdir: 6.5.0(picomatch@4.0.5) - picomatch: 4.0.5 - postcss: 8.5.26 - rollup: 4.62.4 - tinyglobby: 0.2.17 + esbuild: 0.27.3 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.57.1 + tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 26.2.0 fsevents: 2.3.3 - jiti: 2.7.0 - lightningcss: 1.32.0 + jiti: 2.6.1 + lightningcss: 1.30.2 - vitefu@1.1.3(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)): + vitefu@1.1.1(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)): optionalDependencies: - vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0) + vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2) + + vscode-jsonrpc@8.2.0: {} + + vscode-languageserver-protocol@3.17.5: + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + + vscode-languageserver-textdocument@1.0.12: {} + + vscode-languageserver-types@3.17.5: {} + + vscode-languageserver@9.0.1: + dependencies: + vscode-languageserver-protocol: 3.17.5 + + vscode-uri@3.1.0: {} w3c-keyname@2.2.8: {} diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index f826b99..14346f8 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 4 +version = 3 [[package]] name = "adler2" @@ -8,6 +8,17 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.17", + "once_cell", + "version_check", +] + [[package]] name = "ahash" version = "0.8.12" @@ -22,9 +33,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.5" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -37,9 +48,9 @@ checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" [[package]] name = "alloc-stdlib" -version = "0.2.4" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" dependencies = [ "alloc-no-stdlib", ] @@ -69,18 +80,18 @@ dependencies = [ [[package]] name = "android_system_properties" -version = "0.1.6" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ "libc", ] [[package]] name = "anyhow" -version = "1.0.104" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "arbitrary" @@ -114,9 +125,9 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.9.2" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" +checksum = "f9f3647c145568cec02c42054e07bdf9a5a698e15b466fb2341bfc393cd24aa5" dependencies = [ "rustversion", ] @@ -127,6 +138,12 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + [[package]] name = "async-broadcast" version = "0.7.2" @@ -220,14 +237,14 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] name = "async-signal" -version = "0.2.14" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485" +checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" dependencies = [ "async-io", "async-lock", @@ -249,13 +266,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.92" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 2.0.117", ] [[package]] @@ -289,9 +306,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "base64" @@ -305,21 +322,6 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[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" @@ -328,9 +330,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" dependencies = [ "serde_core", ] @@ -344,6 +346,18 @@ dependencies = [ "crunchy", ] +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -376,10 +390,33 @@ dependencies = [ ] [[package]] -name = "brotli" -version = "8.0.4" +name = "borsh" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3" +checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f" +dependencies = [ + "borsh-derive", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0686c856aa6aac0c4498f936d7d6a02df690f614c03e4d906d1018062b5c5e2c" +dependencies = [ + "once_cell", + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "brotli" +version = "8.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -388,34 +425,59 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "5.0.3" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", ] [[package]] -name = "bs58" -version = "0.5.1" +name = "bumpalo" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" + +[[package]] +name = "byte-unit" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6d47a4e2961fb8721bcfc54feae6455f2f64e7054f9bc67e875f0e77f4c58d" dependencies = [ - "tinyvec", + "rust_decimal", + "schemars 1.2.1", + "serde", + "utf8-width", ] [[package]] -name = "bumpalo" -version = "3.20.3" +name = "bytecheck" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] name = "bytemuck" -version = "1.25.2" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" [[package]] name = "byteorder" @@ -431,9 +493,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.12.1" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" dependencies = [ "serde", ] @@ -444,7 +506,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "cairo-sys-rs", "glib", "libc", @@ -465,9 +527,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.2.5" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb1307f12aa967b5a58416e87b3653360e0fd614a016b6e970db08fecbb1b80d" +checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" dependencies = [ "serde_core", ] @@ -492,7 +554,7 @@ dependencies = [ "semver", "serde", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.18", ] [[package]] @@ -507,9 +569,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.3" +version = "1.2.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "509591b7bcd67f4ef775afad7662703b4935daaa6ec0e5605cfb1090b32a2b6d" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" dependencies = [ "find-msvc-tools", "jobserver", @@ -558,26 +620,15 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" -version = "0.2.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" - -[[package]] -name = "chacha20" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" -dependencies = [ - "cfg-if", - "cpufeatures 0.3.0", - "rand_core 0.10.1", -] +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.45" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ "iana-time-zone", "js-sys", @@ -623,10 +674,16 @@ dependencies = [ ] [[package]] -name = "cookie" -version = "0.18.2" +name = "convert_case" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a373e3602691c3cdea496d2f0ee5935151e6168fe87739483c463db1b2f2f87" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" dependencies = [ "time", "version_check", @@ -650,11 +707,11 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core-graphics" -version = "0.25.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "core-foundation", "core-graphics-types", "foreign-types", @@ -667,7 +724,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "core-foundation", "libc", ] @@ -681,15 +738,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cpufeatures" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" -dependencies = [ - "libc", -] - [[package]] name = "crc32fast" version = "1.5.0" @@ -701,18 +749,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.16" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.7" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -720,18 +768,18 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.20" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.22" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" @@ -751,15 +799,19 @@ dependencies = [ [[package]] name = "cssparser" -version = "0.36.0" +version = "0.29.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2" +checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa" dependencies = [ "cssparser-macros", "dtoa-short", "itoa", - "phf", + "matches", + "phf 0.10.1", + "proc-macro2", + "quote", "smallvec", + "syn 1.0.109", ] [[package]] @@ -769,30 +821,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] name = "ctor" -version = "0.8.0" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "352d39c2f7bef1d6ad73db6f5160efcaed66d94ef8c6c573a8410c00bf909a98" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ - "ctor-proc-macro", - "dtor", + "quote", + "syn 2.0.117", ] -[[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.23.0" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ "darling_core", "darling_macro", @@ -800,68 +846,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.23.0" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" dependencies = [ + "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] name = "darling_macro" -version = "0.23.0" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote", - "syn 2.0.119", -] - -[[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", + "syn 2.0.117", ] [[package]] @@ -870,6 +875,7 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ + "powerfmt", "serde_core", ] @@ -881,28 +887,20 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] name = "derive_more" -version = "2.1.1" +version = "0.99.20" 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" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" dependencies = [ + "convert_case", "proc-macro2", "quote", "rustc_version", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] @@ -937,12 +935,18 @@ dependencies = [ ] [[package]] -name = "dispatch2" -version = "0.3.1" +name = "dispatch" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "block2", "libc", "objc2", @@ -950,13 +954,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.7" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 2.0.117", ] [[package]] @@ -979,22 +983,7 @@ 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 0.2.0", - "html5ever", - "precomputed-hash", - "selectors", - "tendril", + "syn 2.0.117", ] [[package]] @@ -1027,21 +1016,6 @@ 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" @@ -1056,20 +1030,20 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" -version = "1.17.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "embed-resource" -version = "3.0.11" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbfdaacccebec3b28e4866b8973543c7647797db5ada1bdab552e48fe665fbbd" +checksum = "55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e" dependencies = [ "cc", "memchr", "rustc_version", - "toml 1.1.4+spec-1.1.0", + "toml 0.9.12+spec-1.1.0", "vswhom", "winreg", ] @@ -1113,7 +1087,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] @@ -1134,9 +1108,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "erased-serde" -version = "0.4.10" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3" dependencies = [ "serde", "serde_core", @@ -1155,16 +1129,17 @@ dependencies = [ [[package]] name = "error-code" -version = "3.4.0" +version = "3.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5343afd4a8365a643ac588dab4cf234a190c7f6c88c9f6dd6ffe00837661b7" +checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" [[package]] name = "event-listener" -version = "5.4.2" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ + "concurrent-queue", "parking", "pin-project-lite", ] @@ -1187,15 +1162,29 @@ checksum = "9afc2bd4d5a73106dd53d10d73d3401c2f32730ba2c0b93ddb888a8983680471" [[package]] name = "fastrand" -version = "2.5.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fax" -version = "0.2.7" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf1079563223d5d59d83c85886a56e586cfd5c1a26292e971a0fa266531ac5a" +checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" +dependencies = [ + "fax_derive", +] + +[[package]] +name = "fax_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] [[package]] name = "fdeflate" @@ -1227,19 +1216,20 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.29" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" +checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" dependencies = [ "cfg-if", "libc", + "libredox", ] [[package]] name = "find-msvc-tools" -version = "0.1.11" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "fixedbitset" @@ -1269,12 +1259,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" -[[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" @@ -1287,13 +1271,13 @@ dependencies = [ [[package]] name = "foreign-types-macros" -version = "0.2.4" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 2.0.117", ] [[package]] @@ -1331,10 +1315,26 @@ dependencies = [ ] [[package]] -name = "futures" -version = "0.3.34" +name = "funty" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -1347,9 +1347,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -1357,15 +1357,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", @@ -1374,9 +1374,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-lite" @@ -1393,32 +1393,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 2.0.117", ] [[package]] name = "futures-sink" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -1431,6 +1431,15 @@ dependencies = [ "slab", ] +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "gdk" version = "0.18.2" @@ -1550,6 +1559,17 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + [[package]] name = "getrandom" version = "0.2.17" @@ -1559,7 +1579,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.1+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -1568,32 +1588,33 @@ 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", "js-sys", "libc", - "r-efi 6.0.0", - "rand_core 0.10.1", + "r-efi", + "wasip2", "wasm-bindgen", ] [[package]] -name = "gif" -version = "0.14.2" +name = "getrandom" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee8cfcc411d9adbbaba82fb72661cc1bcca13e8bba98b364e62b2dba8f960159" +checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", + "wasip3", +] + +[[package]] +name = "gif" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e" dependencies = [ "color_quant", "weezl", @@ -1637,7 +1658,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "futures-channel", "futures-core", "futures-executor", @@ -1665,7 +1686,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] @@ -1680,9 +1701,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.4" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "gobject-sys" @@ -1756,7 +1777,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] @@ -1775,6 +1796,9 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] [[package]] name = "hashbrown" @@ -1782,7 +1806,7 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "ahash", + "ahash 0.8.12", "allocator-api2", ] @@ -1794,14 +1818,14 @@ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash 0.1.5", + "foldhash", ] [[package]] name = "hashbrown" -version = "0.17.1" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" [[package]] name = "hashlink" @@ -1826,7 +1850,7 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "helixnotes" -version = "1.3.5" +version = "1.3.4" dependencies = [ "arboard", "chrono", @@ -1838,7 +1862,7 @@ dependencies = [ "notify", "objc2-app-kit", "png 0.17.16", - "quick-xml", + "quick-xml 0.36.2", "rayon", "regex", "reqwest 0.12.28", @@ -1880,12 +1904,14 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "html5ever" -version = "0.38.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2" +checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c" dependencies = [ "log", + "mac", "markup5ever", + "match_token", ] [[package]] @@ -1896,9 +1922,9 @@ checksum = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163" [[package]] name = "http" -version = "1.5.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", "itoa", @@ -1906,9 +1932,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.1.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", @@ -1916,9 +1942,9 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.5" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", @@ -1941,9 +1967,9 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hyper" -version = "1.11.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ "atomic-waker", "bytes", @@ -1954,6 +1980,7 @@ dependencies = [ "httparse", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -1961,14 +1988,15 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.9" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http", "hyper", "hyper-util", "rustls", + "rustls-pki-types", "tokio", "tokio-rustls", "tower-service", @@ -2034,13 +2062,12 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.3.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", - "utf8_iter", "yoke", "zerofrom", "zerovec", @@ -2048,9 +2075,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.3.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -2061,9 +2088,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.3.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -2075,17 +2102,16 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.3.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.3.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", @@ -2096,15 +2122,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.3.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" -version = "2.3.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92a7ed671a6aad807a8651a2e1782a6598fda9ce5185dd8158549e95a91c6428" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", @@ -2115,6 +2141,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "ident_case" version = "1.0.1" @@ -2134,9 +2166,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.2" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -2144,9 +2176,9 @@ dependencies = [ [[package]] name = "image" -version = "0.25.10" +version = "0.25.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" +checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a" dependencies = [ "bytemuck", "byteorder-lite", @@ -2157,8 +2189,8 @@ dependencies = [ "num-traits", "png 0.18.1", "tiff", - "zune-core", - "zune-jpeg", + "zune-core 0.5.1", + "zune-jpeg 0.5.12", ] [[package]] @@ -2184,12 +2216,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.14.0" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", - "hashbrown 0.17.1", + "hashbrown 0.16.1", "serde", "serde_core", ] @@ -2205,20 +2237,20 @@ dependencies = [ [[package]] name = "inotify" -version = "0.11.5" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cc00ea907cab49550b7da656f80ebb97be1b997d931fbcd28d39734e17ce592" +checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "inotify-sys", "libc", ] [[package]] name = "inotify-sys" -version = "0.1.8" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c033f80b2c113cdf91ab7a33faa9cbc014726dcad99880c8609af2a370edf37d" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" dependencies = [ "libc", ] @@ -2237,9 +2269,19 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.12.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a756c3fac73139e83f14c2d742155dd2b78d3ee56597b419a0579b7bdd6dd78" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +dependencies = [ + "memchr", + "serde", +] [[package]] name = "is-docker" @@ -2271,9 +2313,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.18" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "javascriptcore-rs" @@ -2298,59 +2340,6 @@ dependencies = [ "system-deps", ] -[[package]] -name = "jiff" -version = "0.2.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" -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.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" -dependencies = [ - "defmt", -] - -[[package]] -name = "jiff-static" -version = "0.2.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" -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" @@ -2360,89 +2349,36 @@ dependencies = [ "cesu8", "cfg-if", "combine", - "jni-sys 0.3.1", + "jni-sys", "log", "thiserror 1.0.69", "walkdir", "windows-sys 0.45.0", ] -[[package]] -name = "jni" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" -dependencies = [ - "cfg-if", - "combine", - "jni-macros", - "jni-sys 0.4.1", - "log", - "simd_cesu8", - "thiserror 2.0.20", - "walkdir", - "windows-link 0.2.1", -] - -[[package]] -name = "jni-macros" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" -dependencies = [ - "proc-macro2", - "quote", - "rustc_version", - "simd_cesu8", - "syn 2.0.119", -] - [[package]] name = "jni-sys" -version = "0.3.1" +version = "0.3.0" 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", -] +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.35" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ - "getrandom 0.4.3", + "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" -version = "0.3.104" +version = "0.3.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" +checksum = "f4eacb0641a310445a4c513f2a5e23e19952e269c6a38887254d5f837a305506" dependencies = [ - "cfg-if", - "futures-util", + "once_cell", "wasm-bindgen", ] @@ -2474,16 +2410,16 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "serde", "unicode-segmentation", ] [[package]] name = "kqueue" -version = "1.2.1" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d763e5b24120b4ddf50de6c92308156765aabfbbccebf401da7cff2d70a41ea" +checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" dependencies = [ "kqueue-sys", "libc", @@ -2491,14 +2427,38 @@ dependencies = [ [[package]] name = "kqueue-sys" -version = "1.1.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" dependencies = [ - "bitflags 2.13.1", + "bitflags 1.3.2", "libc", ] +[[package]] +name = "kuchikiki" +version = "0.8.8-speedreader" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" +dependencies = [ + "cssparser", + "html5ever", + "indexmap 2.13.0", + "selectors", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + [[package]] name = "levenshtein_automata" version = "0.2.1" @@ -2531,18 +2491,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.189" +version = "0.2.182" 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", -] +checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" [[package]] name = "libloading" @@ -2562,11 +2513,13 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.20" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d0a00925a9f930d679b6789b721e3a7f9ed110f41b86d2497caa780c3a070a" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ + "bitflags 2.11.0", "libc", + "redox_syscall 0.7.2", ] [[package]] @@ -2583,9 +2536,9 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "lock_api" @@ -2598,9 +2551,12 @@ dependencies = [ [[package]] name = "log" -version = "0.4.33" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +dependencies = [ + "value-bag", +] [[package]] name = "lru" @@ -2619,21 +2575,47 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] name = "lz4_flex" -version = "0.11.6" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373f5eceeeab7925e0c1098212f2fbc4d416adec9d35051a6ab251e824c1854a" +checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a" + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" [[package]] name = "markup5ever" -version = "0.38.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862" +checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" dependencies = [ "log", + "phf 0.11.3", + "phf_codegen 0.11.3", + "string_cache", + "string_cache_codegen", "tendril", - "web_atoms", ] +[[package]] +name = "match_token" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + [[package]] name = "measure_time" version = "0.8.3" @@ -2646,15 +2628,15 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.3" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memmap2" -version = "0.9.11" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" +checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" dependencies = [ "libc", ] @@ -2682,9 +2664,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "minisign-verify" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f9645cb765ea72b8111f36c522475d2daa0d22c957a9826437e97534bc4e9e" +checksum = "e856fdd13623a2f5f2f54676a4ee49502a96a80ef4a62bcedd23d52427c44d43" [[package]] name = "miniz_oxide" @@ -2698,21 +2680,21 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.2" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "log", - "wasi", + "wasi 0.11.1+wasi-snapshot-preview1", "windows-sys 0.61.2", ] [[package]] name = "moxcms" -version = "0.8.1" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" +checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" dependencies = [ "num-traits", "pxfm", @@ -2720,9 +2702,9 @@ dependencies = [ [[package]] name = "muda" -version = "0.19.3" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd04e60bc0b07438a6771710ee1698f98f6ebbc7f89b61264af1563b8aeb878" +checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" dependencies = [ "crossbeam-channel", "dpi", @@ -2733,10 +2715,10 @@ dependencies = [ "objc2-core-foundation", "objc2-foundation", "once_cell", - "png 0.18.1", + "png 0.17.16", "serde", - "thiserror 2.0.20", - "windows-sys 0.61.2", + "thiserror 2.0.18", + "windows-sys 0.60.2", ] [[package]] @@ -2751,8 +2733,8 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.13.1", - "jni-sys 0.3.1", + "bitflags 2.11.0", + "jni-sys", "log", "ndk-sys", "num_enum", @@ -2760,13 +2742,19 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + [[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", + "jni-sys", ] [[package]] @@ -2775,6 +2763,12 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + [[package]] name = "nom" version = "7.1.3" @@ -2800,7 +2794,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "fsevent-sys", "inotify", "kqueue", @@ -2818,14 +2812,14 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42b8cfee0e339a0337359f3c88165702ac6e600dc01c0cc9579a92d62b08477a" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", ] [[package]] name = "num-conv" -version = "0.2.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-traits" @@ -2849,9 +2843,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.6" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", "rustversion", @@ -2859,14 +2853,14 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.6" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ - "proc-macro-crate 3.5.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] @@ -2880,9 +2874,9 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.4" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" dependencies = [ "objc2-encode", "objc2-exception-helper", @@ -2894,7 +2888,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "block2", "libc", "objc2", @@ -2915,7 +2909,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "objc2", "objc2-foundation", ] @@ -2926,7 +2920,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "objc2", "objc2-foundation", ] @@ -2937,7 +2931,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "dispatch2", "objc2", ] @@ -2948,7 +2942,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "dispatch2", "objc2", "objc2-core-foundation", @@ -2965,23 +2959,13 @@ dependencies = [ "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.1", + "bitflags 2.11.0", "objc2", "objc2-core-foundation", "objc2-core-graphics", @@ -2993,7 +2977,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "objc2", "objc2-core-foundation", "objc2-core-graphics", @@ -3021,7 +3005,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "block2", "libc", "objc2", @@ -3034,7 +3018,17 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-javascript-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a1e6550c4caed348956ce3370c9ffeca70bb1dbed4fa96112e7c6170e074586" +dependencies = [ "objc2", "objc2-core-foundation", ] @@ -3045,7 +3039,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f112d1746737b0da274ef79a23aac283376f335f4095a083a267a082f21db0c0" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "objc2", "objc2-app-kit", "objc2-foundation", @@ -3057,40 +3051,32 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "objc2", "objc2-core-foundation", "objc2-foundation", ] +[[package]] +name = "objc2-security" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" +dependencies = [ + "bitflags 2.11.0", + "objc2", + "objc2-core-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.1", - "block2", + "bitflags 2.11.0", "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", ] @@ -3100,19 +3086,21 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "block2", "objc2", "objc2-app-kit", "objc2-core-foundation", "objc2-foundation", + "objc2-javascript-core", + "objc2-security", ] [[package]] name = "once_cell" -version = "1.21.4" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "oneshot" @@ -3122,13 +3110,14 @@ checksum = "269bca4c2591a28585d6bf10d9ed0332b7d76900a1b02bec41bdc3a2cdcda107" [[package]] name = "open" -version = "5.4.1" +version = "5.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9cfef937e9c486488c7e3d949ae31c0f1d06bdacd75b99c086cb35356e30408" +checksum = "43bb73a7fa3799b198970490a51174027ba0d4ec504b03cd08caf513d40024bc" dependencies = [ "dunce", "is-wsl", "libc", + "pathdiff", ] [[package]] @@ -3174,7 +3163,7 @@ dependencies = [ "objc2-osa-kit", "serde", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.18", ] [[package]] @@ -3235,11 +3224,17 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.5.18", "smallvec", "windows-link 0.2.1", ] +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + [[package]] name = "percent-encoding" version = "2.3.2" @@ -3254,73 +3249,160 @@ checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" dependencies = [ "fixedbitset", "hashbrown 0.15.5", - "indexmap 2.14.0", + "indexmap 2.13.0", ] [[package]] name = "phf" -version = "0.13.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" dependencies = [ - "phf_macros", - "phf_shared", - "serde", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_macros 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros 0.11.3", + "phf_shared 0.11.3", ] [[package]] name = "phf_codegen" -version = "0.13.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" dependencies = [ - "phf_generator", - "phf_shared", + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", ] [[package]] name = "phf_generator" -version = "0.13.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" dependencies = [ - "fastrand", - "phf_shared", + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared 0.11.3", + "rand 0.8.5", ] [[package]] name = "phf_macros" -version = "0.13.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" dependencies = [ - "phf_generator", - "phf_shared", + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", "proc-macro2", "quote", - "syn 2.0.119", + "syn 1.0.109", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] name = "phf_shared" -version = "0.13.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" dependencies = [ - "siphasher", + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher 1.0.2", ] [[package]] name = "pin-project-lite" -version = "0.2.17" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", "fastrand", @@ -3329,19 +3411,19 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.34" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plist" -version = "1.10.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da1d65da6dd5d1e44199ac0f58712d241c0f439f80adea8924d832384087f85" +checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" dependencies = [ "base64 0.22.1", - "indexmap 2.14.0", - "quick-xml", + "indexmap 2.13.0", + "quick-xml 0.38.4", "serde", "time", ] @@ -3365,7 +3447,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "crc32fast", "fdeflate", "flate2", @@ -3386,26 +3468,11 @@ dependencies = [ "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.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" -dependencies = [ - "portable-atomic", -] - [[package]] name = "potential_utf" -version = "0.1.6" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] @@ -3431,6 +3498,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.117", +] + [[package]] name = "proc-macro-crate" version = "1.3.1" @@ -3453,11 +3530,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.5.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.25.13+spec-1.1.0", + "toml_edit 0.23.10+spec-1.0.0", ] [[package]] @@ -3485,14 +3562,40 @@ dependencies = [ ] [[package]] -name = "proc-macro2" -version = "1.0.107" +name = "proc-macro-hack" +version = "0.5.20+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "pure-rust-locales" version = "0.8.2" @@ -3501,9 +3604,12 @@ checksum = "869675ad2d7541aea90c6d88c81f46a7f4ea9af8cd0395d38f11a95126998a0d" [[package]] name = "pxfm" -version = "0.1.30" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" +checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" +dependencies = [ + "num-traits", +] [[package]] name = "quick-error" @@ -3513,28 +3619,37 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" -version = "0.41.0" +version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1" +checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" +dependencies = [ + "memchr", +] + +[[package]] +name = "quick-xml" +version = "0.38.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" dependencies = [ "memchr", ] [[package]] name = "quinn" -version = "0.11.11" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases", "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.1.3", + "rustc-hash 2.1.1", "rustls", "socket2", - "thiserror 2.0.20", + "thiserror 2.0.18", "tokio", "tracing", "web-time", @@ -3542,21 +3657,20 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.16" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", - "getrandom 0.4.3", + "getrandom 0.3.4", "lru-slab", - "rand 0.10.2", - "rand_pcg", + "rand 0.9.2", "ring", - "rustc-hash 2.1.3", + "rustc-hash 2.1.1", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.20", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -3564,23 +3678,23 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.15" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases", "libc", "once_cell", "socket2", "tracing", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.47" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] @@ -3592,31 +3706,54 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] -name = "r-efi" -version = "6.0.0" +name = "radium" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rand" -version = "0.8.7" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", + "rand_chacha 0.3.1", "rand_core 0.6.4", ] [[package]] name = "rand" -version = "0.10.2" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ - "chacha20", - "getrandom 0.4.3", - "rand_core 0.10.1", + "rand_chacha 0.9.0", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", ] [[package]] @@ -3629,6 +3766,25 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + [[package]] name = "rand_core" version = "0.6.4" @@ -3640,9 +3796,12 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.10.1" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] [[package]] name = "rand_distr" @@ -3651,16 +3810,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" dependencies = [ "num-traits", - "rand 0.8.7", + "rand 0.8.5", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", ] [[package]] name = "rand_pcg" -version = "0.10.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" dependencies = [ - "rand_core 0.10.1", + "rand_core 0.5.1", ] [[package]] @@ -3671,9 +3839,9 @@ checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "rayon" -version = "1.12.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -3695,7 +3863,16 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", +] + +[[package]] +name = "redox_syscall" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d94dd2f7cd932d4dc02cc8b2b50dfd38bd079a4e5d79198b99743d7fcf9a4b4" +dependencies = [ + "bitflags 2.11.0", ] [[package]] @@ -3706,34 +3883,34 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.17", "libredox", - "thiserror 2.0.20", + "thiserror 2.0.18", ] [[package]] name = "ref-cast" -version = "1.0.26" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.26" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 2.0.117", ] [[package]] name = "regex" -version = "1.13.1" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -3743,9 +3920,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.18" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -3754,9 +3931,18 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.11" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] [[package]] name = "reqwest" @@ -3802,9 +3988,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.13.4" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" dependencies = [ "base64 0.22.1", "bytes", @@ -3877,6 +4063,35 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rkyv" +version = "0.7.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2297bf9c81a3f0dc96bc9521370b88f054168c29826a75e89c55ff196e7ed6a1" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d7b42d4b8d06048d3ac8db0eb31bcb942cbeb709f0b5f2b2ebde398d3038f5" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "rust-stemmers" version = "1.2.0" @@ -3887,6 +4102,22 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "rust_decimal" +version = "1.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61f703d19852dbf87cbc513643fa81428361eb6940f1ac14fd58155d295a3eb0" +dependencies = [ + "arrayvec", + "borsh", + "bytes", + "num-traits", + "rand 0.8.5", + "rkyv", + "serde", + "serde_json", +] + [[package]] name = "rustc-hash" version = "1.1.0" @@ -3895,9 +4126,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.3" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc_version" @@ -3914,7 +4145,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -3927,7 +4158,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "errno", "libc", "linux-raw-sys 0.12.1", @@ -3936,9 +4167,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.43" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "log", "once_cell", @@ -3951,9 +4182,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -3963,9 +4194,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.15.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ "web-time", "zeroize", @@ -3973,13 +4204,13 @@ dependencies = [ [[package]] name = "rustls-platform-verifier" -version = "0.7.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" dependencies = [ "core-foundation", "core-foundation-sys", - "jni 0.22.4", + "jni", "log", "once_cell", "rustls", @@ -4000,9 +4231,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.14" +version = "0.103.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0527518605e68109d875e248ea259b6758801cf165e4b2c2733ae3b51f12535a" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" dependencies = [ "ring", "rustls-pki-types", @@ -4011,9 +4242,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.23" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" @@ -4032,9 +4263,9 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.29" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ "windows-sys 0.61.2", ] @@ -4068,9 +4299,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.2.2" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" dependencies = [ "dyn-clone", "ref-cast", @@ -4087,7 +4318,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] @@ -4096,13 +4327,19 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + [[package]] name = "security-framework" version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "core-foundation", "core-foundation-sys", "libc", @@ -4121,28 +4358,27 @@ dependencies = [ [[package]] name = "selectors" -version = "0.36.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" +checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416" dependencies = [ - "bitflags 2.13.1", + "bitflags 1.3.2", "cssparser", "derive_more", + "fxhash", "log", - "new_debug_unreachable", - "phf", - "phf_codegen", + "phf 0.8.0", + "phf_codegen 0.8.0", "precomputed-hash", - "rustc-hash 2.1.3", "servo_arc", "smallvec", ] [[package]] name = "semver" -version = "1.0.28" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" dependencies = [ "serde", "serde_core", @@ -4150,9 +4386,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.229" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", @@ -4172,22 +4408,22 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.229" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.229" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 2.0.117", ] [[package]] @@ -4198,14 +4434,14 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] name = "serde_json" -version = "1.0.151" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", @@ -4216,13 +4452,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.21" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 2.0.117", ] [[package]] @@ -4236,9 +4472,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.1.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" dependencies = [ "serde_core", ] @@ -4257,19 +4493,17 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.22.0" +version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee78f1fbe43ac4a0e47aadb3dbd357b69eb0d3793e948624cd03dd2750ab1c0a" +checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" dependencies = [ "base64 0.22.1", - "bs58", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.14.0", - "jiff", + "indexmap 2.13.0", "schemars 0.9.0", - "schemars 1.2.2", + "schemars 1.2.1", "serde_core", "serde_json", "serde_with_macros", @@ -4278,14 +4512,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.22.0" +version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8705578779c2b6bd90d84d66eb2e206b708b1a4d7b9f17641b293545bf1c7e46" +checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] @@ -4294,7 +4528,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.14.0", + "indexmap 2.13.0", "itoa", "ryu", "serde", @@ -4320,15 +4554,16 @@ checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] name = "servo_arc" -version = "0.4.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" +checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741" dependencies = [ + "nodrop", "stable_deref_trait", ] @@ -4339,15 +4574,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures 0.2.17", + "cpufeatures", "digest", ] [[package]] name = "shlex" -version = "2.0.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" @@ -4361,19 +4596,9 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.10" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" - -[[package]] -name = "simd_cesu8" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" -dependencies = [ - "rustc_version", - "simdutf8", -] +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "simdutf8" @@ -4383,9 +4608,15 @@ checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "siphasher" -version = "1.0.3" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "siphasher" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "sketches-ddsketch" @@ -4404,18 +4635,18 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.2" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.6.5" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -4433,7 +4664,7 @@ dependencies = [ "objc2-foundation", "objc2-quartz-core", "raw-window-handle", - "redox_syscall", + "redox_syscall 0.5.18", "tracing", "wasm-bindgen", "web-sys", @@ -4474,24 +4705,25 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "string_cache" -version = "0.9.0" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" dependencies = [ "new_debug_unreachable", "parking_lot", - "phf_shared", + "phf_shared 0.11.3", "precomputed-hash", + "serde", ] [[package]] name = "string_cache_codegen" -version = "0.6.1" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" dependencies = [ - "phf_generator", - "phf_shared", + "phf_generator 0.11.3", + "phf_shared 0.11.3", "proc-macro2", "quote", ] @@ -4524,16 +4756,6 @@ 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", @@ -4542,9 +4764,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.3" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -4568,7 +4790,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] @@ -4736,35 +4958,35 @@ dependencies = [ [[package]] name = "tao" -version = "0.35.3" +version = "0.34.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1c93047acf68669466a34690ac58cca7010bd1b201e1ec86f1fd0a75d3dd4a9" +checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "block2", "core-foundation", "core-graphics", "crossbeam-channel", - "dbus", - "dispatch2", + "dispatch", "dlopen2", "dpi", "gdkwayland-sys", "gdkx11-sys", "gtk", - "jni 0.21.1", + "jni", + "lazy_static", "libc", "log", "ndk", + "ndk-context", "ndk-sys", "objc2", "objc2-app-kit", "objc2-foundation", - "objc2-ui-kit", "once_cell", "parking_lot", - "percent-encoding", "raw-window-handle", + "scopeguard", "tao-macros", "unicode-segmentation", "url", @@ -4776,20 +4998,26 @@ dependencies = [ [[package]] name = "tao-macros" -version = "0.1.4" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f7eeb6d99155545da6150a1795945f16ac9c178deb2a5f2e74d776107bd5849" +checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] -name = "tar" -version = "0.4.46" +name = "tap" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6221d9a6003c78398e3b239969f352578258df48c8eb051caadae0015bc840" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tar" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" dependencies = [ "filetime", "libc", @@ -4804,9 +5032,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.11.5" +version = "2.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "667b20e2726d572dea2de7370da16e188eb06008faf9a92fab7cdc46791190b5" +checksum = "463ae8677aa6d0f063a900b9c41ecd4ac2b7ca82f0b058cc4491540e55b20129" dependencies = [ "anyhow", "bytes", @@ -4821,7 +5049,7 @@ dependencies = [ "http", "http-range", "image", - "jni 0.21.1", + "jni", "libc", "log", "mime", @@ -4834,7 +5062,7 @@ dependencies = [ "percent-encoding", "plist", "raw-window-handle", - "reqwest 0.13.4", + "reqwest 0.13.2", "serde", "serde_json", "serde_repr", @@ -4845,7 +5073,7 @@ dependencies = [ "tauri-runtime", "tauri-runtime-wry", "tauri-utils", - "thiserror 2.0.20", + "thiserror 2.0.18", "tokio", "tray-icon", "url", @@ -4857,9 +5085,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.6.3" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9ce40b16101cb6ea63d3e221567affd1c3a9205f95d7bc574941a10636b632" +checksum = "ca7bd893329425df750813e95bd2b643d5369d929438da96d5bbb7cc2c918f74" dependencies = [ "anyhow", "cargo_toml", @@ -4873,14 +5101,15 @@ dependencies = [ "serde_json", "tauri-utils", "tauri-winres", + "toml 0.9.12+spec-1.1.0", "walkdir", ] [[package]] name = "tauri-codegen" -version = "2.6.3" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08279169ff42f8fc45a1dbc9dcae888893ba95288142e5880c59b93a26d2cfc5" +checksum = "aac423e5859d9f9ccdd32e3cf6a5866a15bedbf25aa6630bcb2acde9468f6ae3" dependencies = [ "base64 0.22.1", "brotli", @@ -4894,9 +5123,9 @@ dependencies = [ "serde", "serde_json", "sha2", - "syn 2.0.119", + "syn 2.0.117", "tauri-utils", - "thiserror 2.0.20", + "thiserror 2.0.18", "time", "url", "uuid", @@ -4905,23 +5134,23 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.6.3" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8b394794f399a421811d06966343e7933fcae92d59f5180b9388d1174497a45" +checksum = "1b6a1bd2861ff0c8766b1d38b32a6a410f6dc6532d4ef534c47cfb2236092f59" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", "tauri-codegen", "tauri-utils", ] [[package]] name = "tauri-plugin" -version = "2.6.3" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74be5dd4bed9afbd145e5716b5fa2ec28cbc29c34ffa61c258c9273d896c8020" +checksum = "692a77abd8b8773e107a42ec0e05b767b8d2b7ece76ab36c6c3947e34df9f53f" dependencies = [ "anyhow", "glob", @@ -4930,14 +5159,15 @@ dependencies = [ "serde", "serde_json", "tauri-utils", + "toml 0.9.12+spec-1.1.0", "walkdir", ] [[package]] name = "tauri-plugin-dialog" -version = "2.7.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2d3c1dbe38037e7f590cdf2492594d5ceebe031e7bc7e827509b22a999d2940" +checksum = "9204b425d9be8d12aa60c2a83a289cf7d1caae40f57f336ed1155b3a5c0e359b" dependencies = [ "log", "raw-window-handle", @@ -4947,21 +5177,19 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-plugin-fs", - "thiserror 2.0.20", + "thiserror 2.0.18", "url", ] [[package]] name = "tauri-plugin-fs" -version = "2.5.1" +version = "2.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7ecc274121aca0c036a2b42d1cbe83d368d348f54e0bb8a735c2b1548e8f371" +checksum = "ed390cc669f937afeb8b28032ce837bac8ea023d975a2e207375ec05afaf1804" dependencies = [ "anyhow", "dunce", "glob", - "log", - "objc2-foundation", "percent-encoding", "schemars 0.8.22", "serde", @@ -4970,8 +5198,8 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-utils", - "thiserror 2.0.20", - "toml 1.1.4+spec-1.1.0", + "thiserror 2.0.18", + "toml 0.9.12+spec-1.1.0", "url", ] @@ -4986,11 +5214,12 @@ dependencies = [ [[package]] name = "tauri-plugin-log" -version = "2.9.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6792296e6f389268016c77db21ebae1fc0568f2fccf88b1ec7e2ea71330afb4c" +checksum = "7545bd67f070a4500432c826e2e0682146a1d6712aee22a2786490156b574d93" dependencies = [ "android_logger", + "byte-unit", "fern", "log", "objc2", @@ -5001,15 +5230,15 @@ dependencies = [ "swift-rs", "tauri", "tauri-plugin", - "thiserror 2.0.20", + "thiserror 2.0.18", "time", ] [[package]] name = "tauri-plugin-opener" -version = "2.5.4" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17e1bea14edce6b793a04e2417e3fd924b9bc4faae83cdee7d714156cceeed29" +checksum = "fc624469b06f59f5a29f874bbc61a2ed737c0f9c23ef09855a292c389c42e83f" dependencies = [ "dunce", "glob", @@ -5021,7 +5250,7 @@ dependencies = [ "serde_json", "tauri", "tauri-plugin", - "thiserror 2.0.20", + "thiserror 2.0.18", "url", "windows", "zbus", @@ -5029,15 +5258,14 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" -version = "2.4.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3214becf9ef5783c0ae99a3bb25adf5353a7a16ebf53e74b909e29205735c6c" +checksum = "dc61e4822b8f74d68278e09161d3e3fdd1b14b9eb781e24edccaabf10c420e8c" dependencies = [ "serde", "serde_json", "tauri", - "thiserror 2.0.20", - "tokio", + "thiserror 2.0.18", "tracing", "windows-sys 0.60.2", "zbus", @@ -5045,9 +5273,9 @@ dependencies = [ [[package]] name = "tauri-plugin-updater" -version = "2.10.1" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806d9dac662c2e4594ff03c647a552f2c9bd544e7d0f683ec58f872f952ce4af" +checksum = "3fe8e9bebd88fc222938ffdfbdcfa0307081423bd01e3252fc337d8bde81fc61" dependencies = [ "base64 0.22.1", "dirs", @@ -5059,7 +5287,7 @@ dependencies = [ "minisign-verify", "osakit", "percent-encoding", - "reqwest 0.13.4", + "reqwest 0.13.2", "rustls", "semver", "serde", @@ -5068,7 +5296,7 @@ dependencies = [ "tauri", "tauri-plugin", "tempfile", - "thiserror 2.0.20", + "thiserror 2.0.18", "time", "tokio", "url", @@ -5082,26 +5310,26 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73736611e14142408d15353e21e3cca2f12a3cfb523ad0ce85999b6d2ef1a704" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "log", "serde", "serde_json", "tauri", "tauri-plugin", - "thiserror 2.0.20", + "thiserror 2.0.18", ] [[package]] name = "tauri-runtime" -version = "2.11.3" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0b4bc95aed361b0019067d189a1174a603d460d0f6c72606512d59fc9c12ec8" +checksum = "b885ffeac82b00f1f6fd292b6e5aabfa7435d537cef57d11e38a489956535651" dependencies = [ "cookie", "dpi", "gtk", "http", - "jni 0.21.1", + "jni", "objc2", "objc2-ui-kit", "objc2-web-kit", @@ -5109,7 +5337,7 @@ dependencies = [ "serde", "serde_json", "tauri-utils", - "thiserror 2.0.20", + "thiserror 2.0.18", "url", "webkit2gtk", "webview2-com", @@ -5118,16 +5346,17 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.11.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e6fac707727b7a2f48e4ded90976324267371073edbb415ffb73bb0458d203f" +checksum = "5204682391625e867d16584fedc83fc292fb998814c9f7918605c789cd876314" dependencies = [ "gtk", "http", - "jni 0.21.1", + "jni", "log", "objc2", "objc2-app-kit", + "objc2-foundation", "once_cell", "percent-encoding", "raw-window-handle", @@ -5144,24 +5373,24 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.9.3" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e176a18e67764923c4f1ce66f25ae4abe5f688384d5eb1a0fa6c77f3d90f887" +checksum = "fcd169fccdff05eff2c1033210b9b94acd07a47e6fa9a3431cf09cfd4f01c87e" dependencies = [ "anyhow", "brotli", "cargo_metadata", "ctor", - "dom_query", "dunce", "glob", + "html5ever", "http", "infer", "json-patch", + "kuchikiki", "log", "memchr", - "phf", - "plist", + "phf 0.11.3", "proc-macro2", "quote", "regex", @@ -5172,8 +5401,8 @@ dependencies = [ "serde_json", "serde_with", "swift-rs", - "thiserror 2.0.20", - "toml 1.1.4+spec-1.1.0", + "thiserror 2.0.18", + "toml 0.9.12+spec-1.1.0", "url", "urlpattern", "uuid", @@ -5182,23 +5411,23 @@ dependencies = [ [[package]] name = "tauri-winres" -version = "0.3.6" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc65d45c68858bfe420dd29e834b5d15dbecf8a07a8a16cf4d532c7b1f69d4b6" +checksum = "1087b111fe2b005e42dbdc1990fc18593234238d47453b0c99b7de1c9ab2c1e0" dependencies = [ "dunce", "embed-resource", - "toml 1.1.4+spec-1.1.0", + "toml 0.9.12+spec-1.1.0", ] [[package]] name = "tempfile" -version = "3.27.0" +version = "3.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0" dependencies = [ "fastrand", - "getrandom 0.4.3", + "getrandom 0.4.1", "once_cell", "rustix 1.1.4", "windows-sys 0.61.2", @@ -5206,11 +5435,13 @@ dependencies = [ [[package]] name = "tendril" -version = "0.5.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fed54709c5b3a53d09bb1c113ea4f5ceafd1e772ddcb0030a82e1d56c087b08" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" dependencies = [ - "new_debug_unreachable", + "futf", + "mac", + "utf-8", ] [[package]] @@ -5224,11 +5455,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.20" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.20", + "thiserror-impl 2.0.18", ] [[package]] @@ -5239,41 +5470,42 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] name = "thiserror-impl" -version = "2.0.20" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 2.0.117", ] [[package]] name = "tiff" -version = "0.11.3" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b63feaf3343d35b6ca4d50483f94843803b0f51634937cc2ec519fc32232bc52" +checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" dependencies = [ "fax", "flate2", "half", "quick-error", "weezl", - "zune-jpeg", + "zune-jpeg 0.4.21", ] [[package]] name = "time" -version = "0.3.55" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", + "itoa", "libc", "num-conv", "num_threads", @@ -5285,15 +5517,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.9" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.32" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", @@ -5301,9 +5533,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.4" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -5311,9 +5543,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.12.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -5326,9 +5558,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.53.1" +version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ "bytes", "libc", @@ -5343,13 +5575,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.7.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 2.0.117", ] [[package]] @@ -5364,9 +5596,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.19" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -5402,28 +5634,13 @@ version = "0.9.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ - "indexmap 2.14.0", + "indexmap 2.13.0", "serde_core", - "serde_spanned 1.1.1", + "serde_spanned 1.0.4", "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", - "winnow 0.7.15", -] - -[[package]] -name = "toml" -version = "1.1.4+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" -dependencies = [ - "indexmap 2.14.0", - "serde_core", - "serde_spanned 1.1.1", - "toml_datetime 1.1.1+spec-1.1.0", - "toml_parser", - "toml_writer", - "winnow 1.0.4", + "winnow 0.7.14", ] [[package]] @@ -5444,22 +5661,13 @@ 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.0", + "indexmap 2.13.0", "toml_datetime 0.6.3", "winnow 0.5.40", ] @@ -5470,7 +5678,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.14.0", + "indexmap 2.13.0", "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.3", @@ -5479,30 +5687,30 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.13+spec-1.1.0" +version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ - "indexmap 2.14.0", - "toml_datetime 1.1.1+spec-1.1.0", + "indexmap 2.13.0", + "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", - "winnow 1.0.4", + "winnow 0.7.14", ] [[package]] name = "toml_parser" -version = "1.1.3+spec-1.1.0" +version = "1.0.9+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" +checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" dependencies = [ - "winnow 1.0.4", + "winnow 0.7.14", ] [[package]] name = "toml_writer" -version = "1.1.2+spec-1.1.0" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" +checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] name = "tower" @@ -5521,20 +5729,20 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.11" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "bytes", "futures-util", "http", "http-body", + "iri-string", "pin-project-lite", "tower", "tower-layer", "tower-service", - "url", ] [[package]] @@ -5568,7 +5776,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] @@ -5582,9 +5790,9 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.24.2" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "045979e3f037cd18ad1cb2a419dfda133c5c29c9f3453370079f2255d46c257e" +checksum = "a5e85aa143ceb072062fc4d6356c1b520a51d636e7bc8e77ec94be3608e5e80c" dependencies = [ "crossbeam-channel", "dirs", @@ -5596,10 +5804,10 @@ dependencies = [ "objc2-core-graphics", "objc2-foundation", "once_cell", - "png 0.18.1", + "png 0.17.16", "serde", - "thiserror 2.0.20", - "windows-sys 0.61.2", + "thiserror 2.0.18", + "windows-sys 0.60.2", ] [[package]] @@ -5627,19 +5835,19 @@ checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" [[package]] name = "typenum" -version = "1.20.1" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "uds_windows" -version = "1.2.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" dependencies = [ "memoffset", "tempfile", - "windows-sys 0.61.2", + "winapi", ] [[package]] @@ -5691,9 +5899,15 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" -version = "1.13.3" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "unsafe-libyaml" @@ -5738,12 +5952,24 @@ dependencies = [ "url", ] +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + [[package]] name = "utf8-ranges" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba" +[[package]] +name = "utf8-width" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1292c0d970b54115d14f2492fe0170adf21d68a1de108eebc51c1df4f346a091" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -5752,16 +5978,22 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.24.1" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cefc03fd367c0c6d4305de1b312cf00248c4114f4a0418ce6a6af769e3b0bd9" +checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" dependencies = [ - "getrandom 0.4.3", + "getrandom 0.4.1", "js-sys", "serde_core", "wasm-bindgen", ] +[[package]] +name = "value-bag" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba6f5989077681266825251a52748b8c1d8a4ad098cc37e440103d0ea717fc0" + [[package]] name = "version-compare" version = "0.2.1" @@ -5813,6 +6045,12 @@ dependencies = [ "try-lock", ] +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -5821,18 +6059,27 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.4+wasi-0.2.12" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.127" +version = "0.2.112" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" +checksum = "05d7d0fce354c88b7982aec4400b3e7fcf723c32737cef571bd165f7613557ee" dependencies = [ "cfg-if", "once_cell", @@ -5843,19 +6090,23 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.77" +version = "0.4.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950" +checksum = "ee85afca410ac4abba5b584b12e77ea225db6ee5471d0aebaae0861166f9378a" dependencies = [ + "cfg-if", + "futures-util", "js-sys", + "once_cell", "wasm-bindgen", + "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.127" +version = "0.2.112" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" +checksum = "55839b71ba921e4f75b674cb16f843f4b1f3b26ddfcb3454de1cf65cc021ec0f" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5863,26 +6114,48 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.127" +version = "0.2.112" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" +checksum = "caf2e969c2d60ff52e7e98b7392ff1588bffdd1ccd4769eba27222fd3d621571" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.127" +version = "0.2.112" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" +checksum = "0861f0dcdf46ea819407495634953cdcc8a8c7215ab799a7a7ce366be71c7b30" dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap 2.13.0", + "wasm-encoder", + "wasmparser", +] + [[package]] name = "wasm-streams" version = "0.4.2" @@ -5910,10 +6183,22 @@ dependencies = [ ] [[package]] -name = "wayland-backend" -version = "0.3.17" +name = "wasmparser" +version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38a91b4eaddff87b1cd1074985e3713da4af2c49742d1b356b2c01670a67a078" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.11.0", + "hashbrown 0.15.5", + "indexmap 2.13.0", + "semver", +] + +[[package]] +name = "wayland-backend" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fee64194ccd96bf648f42a65a7e589547096dfa702f7cadef84347b66ad164f9" dependencies = [ "cc", "downcast-rs", @@ -5924,11 +6209,11 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.15" +version = "0.31.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c36a0f861ad76d0901f2800b46321410d9f73f2ea88aac0650d86c32688073" +checksum = "b8e6faa537fbb6c186cb9f1d41f2f811a4120d1b57ec61f50da451a0c5122bec" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "rustix 1.1.4", "wayland-backend", "wayland-scanner", @@ -5936,11 +6221,11 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.32.13" +version = "0.32.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d0c813de3daa2ed6520af85a3bd49b0e722a3078506899aa9686fea58dc4b6" +checksum = "baeda9ffbcfc8cd6ddaade385eaf2393bd2115a69523c735f12242353c3df4f3" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -5948,11 +6233,11 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.12" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" +checksum = "e9597cdf02cf0c34cd5823786dce6b5ae8598f05c2daf5621b6e178d4f7345f3" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.11.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -5961,29 +6246,29 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.11" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "338e30461b3a2b67d70eb30a6d89f8e0c93a833e07d2ae89085cd070c4a00ac0" +checksum = "5423e94b6a63e68e439803a3e153a9252d5ead12fd853334e2ad33997e3889e3" dependencies = [ "proc-macro2", - "quick-xml", + "quick-xml 0.38.4", "quote", ] [[package]] name = "wayland-sys" -version = "0.31.11" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8eab23fefc9e41f8e841df4a9c707e8a8c4ed26e944ef69297184de2785e3be" +checksum = "1e6dbfc3ac5ef974c92a2235805cc0114033018ae1290a72e474aa8b28cbbdfd" dependencies = [ "pkg-config", ] [[package]] name = "web-sys" -version = "0.3.104" +version = "0.3.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30" +checksum = "10053fbf9a374174094915bbce141e87a6bf32ecd9a002980db4b638405e8962" dependencies = [ "js-sys", "wasm-bindgen", @@ -5999,18 +6284,6 @@ dependencies = [ "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" @@ -6057,18 +6330,18 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.9" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" +checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca" dependencies = [ "rustls-pki-types", ] [[package]] name = "webpki-roots" -version = "1.0.9" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" +checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" dependencies = [ "rustls-pki-types", ] @@ -6095,7 +6368,7 @@ checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] @@ -6104,7 +6377,7 @@ version = "0.38.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" dependencies = [ - "thiserror 2.0.20", + "thiserror 2.0.18", "windows", "windows-core 0.61.2", ] @@ -6228,7 +6501,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] @@ -6239,7 +6512,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] @@ -6560,15 +6833,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.15" +version = "0.7.14" 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" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] @@ -6585,9 +6852,91 @@ dependencies = [ [[package]] name = "wit-bindgen" -version = "0.57.1" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.13.0", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.0", + "indexmap 2.13.0", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.13.0", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] [[package]] name = "wl-clipboard-rs" @@ -6599,7 +6948,7 @@ dependencies = [ "log", "os_pipe", "rustix 1.1.4", - "thiserror 2.0.20", + "thiserror 2.0.18", "tree_magic_mini", "wayland-backend", "wayland-client", @@ -6609,29 +6958,30 @@ dependencies = [ [[package]] name = "writeable" -version = "0.6.4" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "wry" -version = "0.55.1" +version = "0.54.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186f9871daa55fd9c016578b810d149de58367113db7fb72b462d2323ce19514" +checksum = "bb26159b420aa77684589a744ae9a9461a95395b848764ad12290a14d960a11a" dependencies = [ "base64 0.22.1", "block2", "cookie", "crossbeam-channel", "dirs", - "dom_query", "dpi", "dunce", "gdkx11", "gtk", + "html5ever", "http", "javascriptcore-rs", - "jni 0.21.1", + "jni", + "kuchikiki", "libc", "ndk", "objc2", @@ -6646,7 +6996,7 @@ dependencies = [ "sha2", "soup3", "tao-macros", - "thiserror 2.0.20", + "thiserror 2.0.18", "url", "webkit2gtk", "webkit2gtk-sys", @@ -6657,6 +7007,15 @@ dependencies = [ "x11-dl", ] +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + [[package]] name = "x11" version = "2.21.0" @@ -6718,9 +7077,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -6729,21 +7088,21 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.2" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", "synstructure", ] [[package]] name = "zbus" -version = "5.19.0" +version = "5.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db4be7c075cb421e4b7ee645541604239bd243ba7c357511f4ff3a74b555907" +checksum = "ca82f95dbd3943a40a53cfded6c2d0a2ca26192011846a1810c4256ef92c60bc" dependencies = [ "async-broadcast", "async-executor", @@ -6768,7 +7127,7 @@ dependencies = [ "uds_windows", "uuid", "windows-sys 0.61.2", - "winnow 1.0.4", + "winnow 0.7.14", "zbus_macros", "zbus_names", "zvariant", @@ -6776,14 +7135,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.19.0" +version = "5.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2990635d09ade6df1868f72f8cac69a876a90981e8bd3c40b1be413f8dc88f40" +checksum = "897e79616e84aac4b2c46e9132a4f63b93105d54fe8c0e8f6bffc21fa8d49222" dependencies = [ - "proc-macro-crate 3.5.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 3.0.3", + "syn 2.0.117", "zbus_names", "zvariant", "zvariant_utils", @@ -6791,76 +7150,67 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.4" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" +checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" dependencies = [ "serde", - "winnow 1.0.4", + "winnow 0.7.14", "zvariant", ] -[[package]] -name = "zcheapstr" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1afec51604565183aeb5c54c20aeab286120d4e4460f7f76e3e8bb8c0d99473" -dependencies = [ - "serde", -] - [[package]] name = "zerocopy" -version = "0.8.56" +version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" +checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.56" +version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" +checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", ] [[package]] name = "zerofrom" -version = "0.1.8" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.7" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 2.0.117", "synstructure", ] [[package]] name = "zeroize" -version = "1.9.0" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" [[package]] name = "zerotrie" -version = "0.2.5" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", @@ -6869,9 +7219,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.7" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b5c6b5976d66c1d703c4fd17d3f5e43c8cedaacf604961b171adc7130896d8" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", @@ -6880,13 +7230,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.4" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47402523226a02bfe5230160dc3ccc089aa6f6f19e7fcbb4e6f824bbb1b4aa62" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 2.0.117", ] [[package]] @@ -6900,9 +7250,9 @@ dependencies = [ "crossbeam-utils", "displaydoc", "flate2", - "indexmap 2.14.0", + "indexmap 2.13.0", "memchr", - "thiserror 2.0.20", + "thiserror 2.0.18", "zopfli", ] @@ -6914,15 +7264,15 @@ checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1" dependencies = [ "arbitrary", "crc32fast", - "indexmap 2.14.0", + "indexmap 2.13.0", "memchr", ] [[package]] name = "zmij" -version = "1.0.23" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" [[package]] name = "zopfli" @@ -6966,56 +7316,70 @@ dependencies = [ [[package]] name = "zune-core" -version = "0.5.3" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" [[package]] name = "zune-jpeg" -version = "0.5.15" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" +checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" dependencies = [ - "zune-core", + "zune-core 0.4.12", +] + +[[package]] +name = "zune-jpeg" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "410e9ecef634c709e3831c2cfdb8d9c32164fae1c67496d5b68fff728eec37fe" +dependencies = [ + "zune-core 0.5.1", ] [[package]] name = "zvariant" -version = "5.14.0" +version = "5.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e28c25bd8bb8da5a1f3e7065d0c156b9ee9a7973adf78b0e35eaefdf3b1b5c" +checksum = "5708299b21903bbe348e94729f22c49c55d04720a004aa350f1f9c122fd2540b" dependencies = [ "endi", "enumflags2", "serde", - "winnow 1.0.4", - "zcheapstr", + "winnow 0.7.14", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.14.0" +version = "5.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d496a145685283b67e232bd9e47377f6b60ad9d51e3601b23867f77c42477f96" +checksum = "5b59b012ebe9c46656f9cc08d8da8b4c726510aef12559da3e5f1bf72780752c" dependencies = [ - "proc-macro-crate 3.5.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 3.0.3", + "syn 2.0.117", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "4.1.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b84ebb462416c27cdb97f2e7f5f0ccc844da1fe2ecc7121e1b690b41318bf42" +checksum = "f75c23a64ef8f40f13a6989991e643554d9bef1d682a281160cf0c1bc389c5e9" dependencies = [ "proc-macro2", "quote", "serde", - "syn 3.0.3", - "winnow 1.0.4", + "syn 2.0.117", + "winnow 0.7.14", ] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index bdaacdd..4c310fa 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,11 +1,11 @@ [package] name = "helixnotes" -version = "1.3.5" +version = "1.3.4" description = "Local markdown note-taking app" authors = ["HelixNotes"] license = "AGPL-3.0-or-later" edition = "2021" -rust-version = "1.88.0" +rust-version = "1.77.2" [lib] name = "app_lib" @@ -38,7 +38,7 @@ zip = { version = "2", default-features = false, features = ["deflate"] } reqwest = { version = "0.12", default-features = false, features = ["json", "stream", "rustls-tls", "blocking"] } futures = "0.3" rayon = "1" -quick-xml = "0.41" +quick-xml = "0.36" urlencoding = "2" sha2 = "0.10" rustls = { version = "0.23", default-features = false, features = ["ring", "logging", "std", "tls12"] } diff --git a/src-tauri/build.rs b/src-tauri/build.rs index d860e1e..795b9b7 100644 --- a/src-tauri/build.rs +++ b/src-tauri/build.rs @@ -1,3 +1,3 @@ fn main() { - tauri_build::build() + tauri_build::build() } diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index 2f64537..f7ed022 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -26,7 +26,30 @@ "dialog:allow-confirm", "fs:default", "fs:allow-read", + "fs:allow-write", + "fs:allow-exists", + "fs:allow-mkdir", + "fs:allow-remove", + "fs:allow-rename", + "fs:allow-copy-file", + "fs:allow-stat", + "fs:allow-read-dir", "fs:allow-read-file", + "fs:allow-write-file", + "fs:allow-watch", + "opener:default", + { + "identifier": "opener:allow-open-path", + "allow": [{ "path": "/**" }] + }, + { + "identifier": "opener:allow-open-url", + "allow": [ + { "url": "https://**" }, + { "url": "http://**" }, + { "url": "mailto:*" } + ] + }, "opener:allow-reveal-item-in-dir" ] } diff --git a/src-tauri/src/ai.rs b/src-tauri/src/ai.rs index d68472f..c4d2ec4 100644 --- a/src-tauri/src/ai.rs +++ b/src-tauri/src/ai.rs @@ -8,7 +8,6 @@ const ANTHROPIC_API_URL: &str = "https://api.anthropic.com/v1/messages"; const OPENAI_API_URL: &str = "https://api.openai.com/v1/chat/completions"; const OLLAMA_DEFAULT_URL: &str = "http://localhost:11434"; -#[allow(clippy::too_many_arguments)] pub fn ai_request( app: AppHandle, provider: String, @@ -23,11 +22,7 @@ pub fn ai_request( let rt = tokio::runtime::Runtime::new().unwrap(); rt.block_on(async { // Handle all API keys as optional; ollama and v1 completions doesnt always require it. - let key_opt = if api_key.is_empty() { - None - } else { - Some(api_key.as_str()) - }; + let key_opt = if api_key.is_empty() { None } else { Some(api_key.as_str()) }; let result = match provider.as_str() { "openai" => { stream_openai( @@ -103,10 +98,7 @@ pub fn ai_request( /// so both `https://host` and `https://host/v1` work (we append `/v1/chat/completions`). fn normalize_openai_base(base: &str) -> String { let b = base.trim().trim_end_matches('/'); - b.strip_suffix("/v1") - .unwrap_or(b) - .trim_end_matches('/') - .to_string() + b.strip_suffix("/v1").unwrap_or(b).trim_end_matches('/').to_string() } async fn stream_anthropic( @@ -276,7 +268,9 @@ async fn stream_openai( body["temperature"] = json!(0.7); } - let mut req = client.post(url).header("content-type", "application/json"); + let mut req = client + .post(url) + .header("content-type", "application/json"); if let Some(key) = api_key { req = req.header("Authorization", format!("Bearer {}", key)); @@ -386,11 +380,7 @@ pub async fn test_connection( model: &str, base_url: Option<&str>, ) -> Result { - let key_opt = if api_key.is_empty() { - None - } else { - Some(api_key) - }; + let key_opt = if api_key.is_empty() { None } else { Some(api_key) }; match provider { "openai" => test_openai(OPENAI_API_URL, Some(api_key), model).await, "ollama" => { @@ -444,18 +434,14 @@ async fn test_anthropic(api_key: &str, model: &str) -> Result { } async fn test_openai(url: &str, api_key: Option<&str>, model: &str) -> Result { - let client = Client::new(); - let is_gpt5 = model.starts_with("gpt-5"); - let token_key = if is_gpt5 { - "max_completion_tokens" - } else { - "max_tokens" - }; + let client = Client::new(); + let is_gpt5 = model.starts_with("gpt-5"); + let token_key = if is_gpt5 { "max_completion_tokens" } else { "max_tokens" }; - let body = json!({ - "model": model, - token_key: 20, - "messages": [ + let body = json!({ + "model": model, + token_key: 20, + "messages": [ { "role": "user", "content": "Hi" @@ -463,7 +449,9 @@ async fn test_openai(url: &str, api_key: Option<&str>, model: &str) -> Result Result, String> { let entry = entry.map_err(|e| e.to_string())?; let path = entry.path(); - if path.extension().is_some_and(|ext| ext == "zip") { + if path.extension().map_or(false, |ext| ext == "zip") { let filename = path .file_name() .unwrap_or_default() @@ -184,28 +184,14 @@ pub fn list_backups(backup_dir: &Path) -> Result, String> { Ok(entries) } -fn validated_backup_file(backup_dir: &Path, backup_path: &str) -> Result { - let backup_dir = fs::canonicalize(backup_dir).map_err(|error| error.to_string())?; - let backup = fs::canonicalize(backup_path).map_err(|error| error.to_string())?; - if backup.parent() != Some(backup_dir.as_path()) - || backup.extension().and_then(|extension| extension.to_str()) != Some("zip") - || !backup.is_file() - { - return Err( - "Backup path must point to a ZIP file in the configured backup directory".to_string(), - ); - } - Ok(backup) -} - /// Restore a backup by extracting the zip over the vault directory -pub fn restore_backup( - vault_path: &str, - backup_dir: &Path, - backup_path: &str, -) -> Result<(), String> { +pub fn restore_backup(vault_path: &str, backup_path: &str) -> Result<(), String> { let vault = Path::new(vault_path); - let backup = validated_backup_file(backup_dir, backup_path)?; + let backup = Path::new(backup_path); + + if !backup.exists() { + return Err("Backup file does not exist".to_string()); + } let file = fs::File::open(backup).map_err(|e| format!("Failed to open backup: {}", e))?; let mut archive = @@ -259,9 +245,12 @@ pub fn restore_backup( } /// Delete a single backup file -pub fn delete_backup(backup_dir: &Path, backup_path: &str) -> Result<(), String> { - let path = validated_backup_file(backup_dir, backup_path)?; - fs::remove_file(path).map_err(|error| error.to_string()) +pub fn delete_backup(backup_path: &str) -> Result<(), String> { + let path = Path::new(backup_path); + if path.exists() { + fs::remove_file(path).map_err(|e| e.to_string())?; + } + Ok(()) } /// Remove old backups keeping only the newest `max_count` @@ -272,31 +261,9 @@ pub fn cleanup_old_backups(backup_dir: &Path, max_count: u32) -> Result<(), Stri if backups.len() as u32 > max_count { let to_remove = backups.split_off(max_count as usize); for entry in to_remove { - delete_backup(backup_dir, &entry.path)?; + delete_backup(&entry.path)?; } } Ok(()) } - -#[cfg(test)] -mod tests { - use super::delete_backup; - use std::fs; - use uuid::Uuid; - - #[test] - fn delete_backup_rejects_files_outside_backup_directory() { - let root = std::env::temp_dir().join(format!("helixnotes-backup-test-{}", Uuid::new_v4())); - let backup_dir = root.join("backups"); - let outside = root.join("outside.zip"); - fs::create_dir_all(&backup_dir).unwrap(); - fs::write(&outside, "must survive").unwrap(); - - let result = delete_backup(&backup_dir, &outside.to_string_lossy()); - - assert!(result.is_err()); - assert!(outside.exists()); - fs::remove_dir_all(root).unwrap(); - } -} diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 83bb76d..dffd096 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -6,23 +6,19 @@ use std::path::Path; use tauri::{AppHandle, Manager, State}; fn index_note_bg(state: &State<'_, AppState>, path: &str) { - let search = state.search_index.lock().ok().and_then(|g| g.clone()); - if let Some(search) = search { - let p = path.to_string(); - std::thread::spawn(move || { - let _ = search.index_note(&p); - }); - } + let search = state.search_index.lock().ok().and_then(|g| g.clone()); + if let Some(search) = search { + let p = path.to_string(); + std::thread::spawn(move || { let _ = search.index_note(&p); }); + } } fn remove_note_bg(state: &State<'_, AppState>, path: &str) { - let search = state.search_index.lock().ok().and_then(|g| g.clone()); - if let Some(search) = search { - let p = path.to_string(); - std::thread::spawn(move || { - let _ = search.remove_note(&p); - }); - } + let search = state.search_index.lock().ok().and_then(|g| g.clone()); + if let Some(search) = search { + let p = path.to_string(); + std::thread::spawn(move || { let _ = search.remove_note(&p); }); + } } fn clear_vault_runtime(state: &State<'_, AppState>) -> Result<(), String> { @@ -193,7 +189,9 @@ pub async fn choose_external_vault( if bookmark_was_registered { let _ = app.ios_vault_access().rollback_staged(); } else { - let _ = app.ios_vault_access().forget_bookmark(&result.bookmark_id); + let _ = app + .ios_vault_access() + .forget_bookmark(&result.bookmark_id); } return Err(error); } @@ -355,10 +353,7 @@ pub fn set_accent_color(state: State<'_, AppState>, color: String) -> Result<(), } #[tauri::command] -pub fn save_custom_theme( - state: State<'_, AppState>, - theme: crate::types::CustomTheme, -) -> Result<(), String> { +pub fn save_custom_theme(state: State<'_, AppState>, theme: crate::types::CustomTheme) -> Result<(), String> { let mut config = state.config.lock().map_err(|e| e.to_string())?; if let Some(pos) = config.custom_themes.iter().position(|t| t.id == theme.id) { config.custom_themes[pos] = theme; @@ -396,12 +391,10 @@ mod custom_theme_reference_tests { #[test] fn deleting_custom_theme_resets_system_pair_references() { - let mut config = AppConfig { - theme: "custom-work".to_string(), - system_light_theme: "custom-work".to_string(), - system_dark_theme: "custom-work".to_string(), - ..Default::default() - }; + let mut config = AppConfig::default(); + config.theme = "custom-work".to_string(); + config.system_light_theme = "custom-work".to_string(); + config.system_dark_theme = "custom-work".to_string(); clear_custom_theme_references(&mut config, "custom-work"); @@ -412,16 +405,9 @@ mod custom_theme_reference_tests { } #[tauri::command] -pub fn export_custom_theme( - state: State<'_, AppState>, - id: String, - path: String, -) -> Result<(), String> { +pub fn export_custom_theme(state: State<'_, AppState>, id: String, path: String) -> Result<(), String> { let config = state.config.lock().map_err(|e| e.to_string())?; - let theme = config - .custom_themes - .iter() - .find(|t| t.id == id) + let theme = config.custom_themes.iter().find(|t| t.id == id) .ok_or_else(|| "Theme not found".to_string())?; let export = serde_json::json!({ "version": 1, "themes": [theme] }); let data = serde_json::to_string_pretty(&export).map_err(|e| e.to_string())?; @@ -430,15 +416,11 @@ pub fn export_custom_theme( } #[tauri::command] -pub fn import_custom_themes( - state: State<'_, AppState>, - path: String, -) -> Result, String> { +pub fn import_custom_themes(state: State<'_, AppState>, path: String) -> Result, String> { let data = std::fs::read_to_string(&path).map_err(|e| e.to_string())?; let parsed: serde_json::Value = serde_json::from_str(&data).map_err(|e| e.to_string())?; - let themes: Vec = - serde_json::from_value(parsed["themes"].clone()) - .map_err(|e| format!("Invalid theme file: {}", e))?; + let themes: Vec = serde_json::from_value(parsed["themes"].clone()) + .map_err(|e| format!("Invalid theme file: {}", e))?; let mut config = state.config.lock().map_err(|e| e.to_string())?; for theme in &themes { if let Some(pos) = config.custom_themes.iter().position(|t| t.id == theme.id) { @@ -480,7 +462,11 @@ pub fn set_line_height(state: State<'_, AppState>, height: f64) -> Result<(), St } #[tauri::command] -pub fn set_ui_scale(app: AppHandle, state: State<'_, AppState>, scale: f64) -> Result<(), String> { +pub fn set_ui_scale( + app: AppHandle, + state: State<'_, AppState>, + scale: f64, +) -> Result<(), String> { let mut config = state.config.lock().map_err(|e| e.to_string())?; config.ui_scale = Some(scale); save_app_config(&config)?; @@ -527,14 +513,8 @@ pub fn create_notebook( } #[tauri::command] -pub fn rename_notebook( - state: State<'_, AppState>, - path: String, - new_name: String, -) -> Result { - let config = state.config.lock().map_err(|error| error.to_string())?; - let vault_path = config.active_vault.as_ref().ok_or("No active vault")?; - operations::rename_notebook(vault_path, &path, &new_name) +pub fn rename_notebook(path: String, new_name: String) -> Result { + operations::rename_notebook(&path, &new_name) } #[tauri::command] @@ -551,7 +531,7 @@ pub fn move_notebook( .map(|p| p.to_string_lossy().to_string()) .unwrap_or_default(); - let new_full_path = operations::move_notebook(vault_path, ¬ebook_path, &dest_parent)?; + let new_full_path = operations::move_notebook(¬ebook_path, &dest_parent)?; let new_relative = Path::new(&new_full_path) .strip_prefix(vault_path.as_str()) @@ -614,11 +594,7 @@ pub fn move_notebook( pub fn delete_notebook(state: State<'_, AppState>, path: String) -> Result<(), String> { let vault_path = { let config = state.config.lock().map_err(|e| e.to_string())?; - config - .active_vault - .as_ref() - .ok_or("No active vault")? - .clone() + config.active_vault.as_ref().ok_or("No active vault")?.clone() }; operations::delete_notebook(&vault_path, &path) } @@ -636,10 +612,8 @@ pub fn get_notes( } #[tauri::command] -pub fn read_note(state: State<'_, AppState>, path: String) -> Result { - let config = state.config.lock().map_err(|error| error.to_string())?; - let vault_path = config.active_vault.as_ref().ok_or("No active vault")?; - operations::read_note(vault_path, &path) +pub fn read_note(path: String) -> Result { + operations::read_note(&path) } #[tauri::command] @@ -649,26 +623,27 @@ pub fn save_note( meta: NoteMeta, body: String, ) -> Result<(), String> { - let config = state.config.lock().map_err(|error| error.to_string())?; - let vault_path = config - .active_vault - .as_ref() - .ok_or("No active vault")? - .clone(); - let max_versions = config.max_versions_per_note; - let old_raw = operations::read_vault_note(&vault_path, &path)?.raw; + // Snapshot current content before overwriting (if file exists) + let config = state.config.lock().map_err(|e| e.to_string())?; + if let Some(vault_path) = &config.active_vault { + if std::path::Path::new(&path).exists() { + if let Ok(old_raw) = std::fs::read_to_string(&path) { + let max_versions = config.max_versions_per_note; + let note_id = meta.id.clone(); + let vp = vault_path.clone(); + // Snapshot in background so save isn't slowed down + std::thread::spawn(move || { + crate::history::maybe_snapshot(&vp, ¬e_id, &old_raw, max_versions); + }); + } + } + } drop(config); - let note_id = meta.id.clone(); - let snapshot_vault = vault_path.clone(); - std::thread::spawn(move || { - crate::history::maybe_snapshot(&snapshot_vault, ¬e_id, &old_raw, max_versions); - }); + operations::save_note(&path, &meta, &body)?; - operations::save_note(&vault_path, &path, &meta, &body)?; - - // Re-index note so search picks up changes (background to avoid blocking on FUSE fsync) - index_note_bg(&state, &path); + // Re-index note so search picks up changes (background to avoid blocking on FUSE fsync) + index_note_bg(&state, &path); Ok(()) } @@ -679,11 +654,7 @@ pub fn duplicate_note( path: String, ) -> Result { let config = state.config.lock().map_err(|e| e.to_string())?; - let vault = config - .active_vault - .as_ref() - .ok_or("No active vault")? - .clone(); + let vault = config.active_vault.as_ref().ok_or("No active vault")?.clone(); drop(config); let entry = operations::duplicate_note(&path, &vault)?; @@ -697,43 +668,31 @@ pub fn create_note( notebook_relative: Option, title: String, ) -> Result { + let config = state.config.lock().map_err(|e| e.to_string())?; + let vault_path = config.active_vault.as_ref().ok_or("No active vault")?; + let entry = operations::create_note(vault_path, notebook_relative.as_deref(), &title)?; + + // Index new note (background to avoid blocking on FUSE fsync) + index_note_bg(&state, &entry.path); + + Ok(entry) +} + +#[tauri::command] +pub fn create_daily_note(state: State<'_, AppState>, date: Option) -> Result { let config = state.config.lock().map_err(|e| e.to_string())?; let vault_path = config.active_vault.as_ref().ok_or("No active vault")?; - let entry = operations::create_note(vault_path, notebook_relative.as_deref(), &title)?; + let entry = operations::create_daily_note(vault_path, date.as_deref(), &config.daily_title_format)?; - // Index new note (background to avoid blocking on FUSE fsync) - index_note_bg(&state, &entry.path); + index_note_bg(&state, &entry.path); Ok(entry) } #[tauri::command] -pub fn create_daily_note( - state: State<'_, AppState>, - date: Option, -) -> Result { +pub fn rename_note(state: State<'_, AppState>, path: String, new_title: String) -> Result { let config = state.config.lock().map_err(|e| e.to_string())?; - let vault_path = config.active_vault.as_ref().ok_or("No active vault")?; - let entry = - operations::create_daily_note(vault_path, date.as_deref(), &config.daily_title_format)?; - - index_note_bg(&state, &entry.path); - - Ok(entry) -} - -#[tauri::command] -pub fn rename_note( - state: State<'_, AppState>, - path: String, - new_title: String, -) -> Result { - let config = state.config.lock().map_err(|e| e.to_string())?; - let vault_path = config - .active_vault - .as_ref() - .ok_or("No active vault")? - .clone(); + let vault_path = config.active_vault.as_ref().ok_or("No active vault")?.clone(); drop(config); operations::rename_note(&path, &new_title, &vault_path) } @@ -744,8 +703,8 @@ pub fn delete_note(state: State<'_, AppState>, path: String) -> Result<(), Strin let vault_path = config.active_vault.as_ref().ok_or("No active vault")?; operations::delete_note(vault_path, &path)?; - // Remove from index (background to avoid blocking on FUSE fsync) - remove_note_bg(&state, &path); + // Remove from index (background to avoid blocking on FUSE fsync) + remove_note_bg(&state, &path); Ok(()) } @@ -765,7 +724,7 @@ pub fn move_note( .map(|p| p.to_string_lossy().to_string()) .unwrap_or_default(); - let new_full_path = operations::move_note(vault_path, ¬e_path, &dest_notebook)?; + let new_full_path = operations::move_note(¬e_path, &dest_notebook)?; // Update quick access if the moved note was in it if !old_relative.is_empty() { @@ -841,7 +800,10 @@ pub fn get_all_note_titles(state: State<'_, AppState>) -> Result) -> Result) -> Result) -> Result = Vec::new(); let mut edge_map: HashMap<(usize, usize), usize> = HashMap::new(); - let add_edge = |edges: &mut Vec, - edge_map: &mut HashMap<(usize, usize), usize>, - src: usize, - tgt: usize| { - if src == tgt { - return; - } - if edge_map.contains_key(&(src, tgt)) { - return; - } // exact duplicate + let add_edge = |edges: &mut Vec, edge_map: &mut HashMap<(usize, usize), usize>, src: usize, tgt: usize| { + if src == tgt { return; } + if edge_map.contains_key(&(src, tgt)) { return; } // exact duplicate if let Some(&rev_idx) = edge_map.get(&(tgt, src)) { // Reverse direction already exists - mark it as bidirectional edges[rev_idx].bidirectional = true; } else { let idx = edges.len(); edge_map.insert((src, tgt), idx); - edges.push(crate::types::GraphEdge { - source: src, - target: tgt, - bidirectional: false, - }); + edges.push(crate::types::GraphEdge { source: src, target: tgt, bidirectional: false }); } }; @@ -1024,32 +961,25 @@ pub fn get_graph_data(state: State<'_, AppState>) -> Result Option { let trimmed = raw.trim_start(); - if !trimmed.starts_with("---") { - return None; - } + if !trimmed.starts_with("---") { return None; } // Find the closing --- let after_open = &trimmed[3..]; let end = after_open.find("\n---")?; let frontmatter = &after_open[..end]; for line in frontmatter.lines() { let line = line.trim(); - if let Some(title) = line.strip_prefix("title:") { - let val = title.trim(); + if line.starts_with("title:") { + let val = line[6..].trim(); // Strip surrounding quotes - if (val.starts_with('"') && val.ends_with('"')) - || (val.starts_with('\'') && val.ends_with('\'')) - { - return Some(val[1..val.len() - 1].to_string()); + if (val.starts_with('"') && val.ends_with('"')) || (val.starts_with('\'') && val.ends_with('\'')) { + return Some(val[1..val.len()-1].to_string()); } if !val.is_empty() { return Some(val.to_string()); @@ -1092,11 +1022,7 @@ pub fn get_tasks(state: State<'_, AppState>) -> Result r, Err(_) => return out, }; - let filename = path - .file_name() - .unwrap_or_default() - .to_string_lossy() - .to_string(); + let filename = path.file_name().unwrap_or_default().to_string_lossy().to_string(); let (meta, body) = crate::vault::frontmatter::parse_note(&raw, &filename); let note_path = path.to_string_lossy().to_string(); for (i, line) in body.lines().enumerate() { @@ -1109,11 +1035,7 @@ pub fn get_tasks(state: State<'_, AppState>) -> Result) -> Result, - note_path: &str, -) -> Result<(String, NoteMeta, String), String> { - let config = state.config.lock().map_err(|error| error.to_string())?; - let vault_path = config - .active_vault - .as_ref() - .ok_or("No active vault")? - .clone(); - drop(config); - let note = operations::read_vault_note(&vault_path, note_path)?; - Ok((vault_path, note.meta, note.content)) -} - fn toggle_checkbox_line(line: &str, done: bool) -> String { let mut s = line.to_string(); if done { @@ -1175,8 +1082,12 @@ pub fn set_task_done( raw_line: String, done: bool, ) -> Result<(), String> { - let (vault_path, meta, body) = read_task_note(&state, ¬e_path)?; - let mut lines: Vec = body.lines().map(|line| line.to_string()).collect(); + let p = std::path::Path::new(¬e_path); + let raw = std::fs::read_to_string(p).map_err(|e| e.to_string())?; + let filename = p.file_name().unwrap_or_default().to_string_lossy().to_string(); + let (meta, body) = crate::vault::frontmatter::parse_note(&raw, &filename); + + let mut lines: Vec = body.lines().map(|l| l.to_string()).collect(); // Verify the expected line; if the note drifted, fall back to the first exact match. let idx = if lines.get(line).map(|l| *l == raw_line).unwrap_or(false) { line @@ -1196,9 +1107,9 @@ pub fn set_task_done( if body.ends_with('\n') && !new_body.ends_with('\n') { new_body.push('\n'); } - operations::save_note(&vault_path, ¬e_path, &meta, &new_body)?; + operations::save_note(¬e_path, &meta, &new_body)?; - index_note_bg(&state, ¬e_path); + index_note_bg(&state, ¬e_path); Ok(()) } @@ -1229,18 +1140,18 @@ pub fn set_task_priority( Some(_) => return Err("Invalid priority".to_string()), }; - let (vault_path, meta, body) = read_task_note(&state, ¬e_path)?; - let mut lines: Vec = body.lines().map(|line| line.to_string()).collect(); - let idx = if lines - .get(line) - .map(|item| *item == raw_line) - .unwrap_or(false) - { + let p = std::path::Path::new(¬e_path); + let raw = std::fs::read_to_string(p).map_err(|e| e.to_string())?; + let filename = p.file_name().unwrap_or_default().to_string_lossy().to_string(); + let (meta, body) = crate::vault::frontmatter::parse_note(&raw, &filename); + + let mut lines: Vec = body.lines().map(|l| l.to_string()).collect(); + let idx = if lines.get(line).map(|l| *l == raw_line).unwrap_or(false) { line } else { lines .iter() - .position(|item| *item == raw_line) + .position(|l| *l == raw_line) .ok_or("Task line not found (note changed)")? }; @@ -1253,7 +1164,7 @@ pub fn set_task_priority( if body.ends_with('\n') && !new_body.ends_with('\n') { new_body.push('\n'); } - operations::save_note(&vault_path, ¬e_path, &meta, &new_body)?; + operations::save_note(¬e_path, &meta, &new_body)?; index_note_bg(&state, ¬e_path); Ok(()) @@ -1285,18 +1196,18 @@ pub fn set_task_due( Some(_) => return Err("Invalid due date".to_string()), }; - let (vault_path, meta, body) = read_task_note(&state, ¬e_path)?; - let mut lines: Vec = body.lines().map(|line| line.to_string()).collect(); - let idx = if lines - .get(line) - .map(|item| *item == raw_line) - .unwrap_or(false) - { + let p = std::path::Path::new(¬e_path); + let raw = std::fs::read_to_string(p).map_err(|e| e.to_string())?; + let filename = p.file_name().unwrap_or_default().to_string_lossy().to_string(); + let (meta, body) = crate::vault::frontmatter::parse_note(&raw, &filename); + + let mut lines: Vec = body.lines().map(|l| l.to_string()).collect(); + let idx = if lines.get(line).map(|l| *l == raw_line).unwrap_or(false) { line } else { lines .iter() - .position(|item| *item == raw_line) + .position(|l| *l == raw_line) .ok_or("Task line not found (note changed)")? }; @@ -1309,7 +1220,7 @@ pub fn set_task_due( if body.ends_with('\n') && !new_body.ends_with('\n') { new_body.push('\n'); } - operations::save_note(&vault_path, ¬e_path, &meta, &new_body)?; + operations::save_note(¬e_path, &meta, &new_body)?; index_note_bg(&state, ¬e_path); Ok(()) @@ -1358,11 +1269,7 @@ pub fn restore_note( ) -> Result { let vault_path = { let config = state.config.lock().map_err(|e| e.to_string())?; - config - .active_vault - .as_ref() - .ok_or("No active vault")? - .clone() + config.active_vault.as_ref().ok_or("No active vault")?.clone() }; operations::restore_note(&vault_path, &trash_path, dest_notebook.as_deref()) } @@ -1371,11 +1278,7 @@ pub fn restore_note( pub fn restore_notebook(state: State<'_, AppState>, trash_path: String) -> Result { let vault_path = { let config = state.config.lock().map_err(|e| e.to_string())?; - config - .active_vault - .as_ref() - .ok_or("No active vault")? - .clone() + config.active_vault.as_ref().ok_or("No active vault")?.clone() }; operations::restore_notebook(&vault_path, &trash_path) } @@ -1384,11 +1287,7 @@ pub fn restore_notebook(state: State<'_, AppState>, trash_path: String) -> Resul pub fn permanent_delete(state: State<'_, AppState>, path: String) -> Result<(), String> { let vault_path = { let config = state.config.lock().map_err(|e| e.to_string())?; - config - .active_vault - .as_ref() - .ok_or("No active vault")? - .clone() + config.active_vault.as_ref().ok_or("No active vault")?.clone() }; operations::permanent_delete(&vault_path, &path) } @@ -1448,11 +1347,8 @@ pub fn read_clipboard_image() -> Result, String> { // Encode RGBA data to PNG let mut buf: Vec = Vec::new(); { - let mut encoder = png::Encoder::new( - std::io::Cursor::new(&mut buf), - img.width as u32, - img.height as u32, - ); + let mut encoder = + png::Encoder::new(std::io::Cursor::new(&mut buf), img.width as u32, img.height as u32); encoder.set_color(png::ColorType::Rgba); encoder.set_depth(png::BitDepth::Eight); let mut writer = encoder @@ -1476,8 +1372,8 @@ pub fn read_clipboard_image() -> Result, String> { #[tauri::command] pub fn copy_image_to_clipboard(path: String) -> Result<(), String> { let data = std::fs::read(&path).map_err(|e| format!("Failed to read image: {}", e))?; - let img = - image::load_from_memory(&data).map_err(|e| format!("Failed to decode image: {}", e))?; + let img = image::load_from_memory(&data) + .map_err(|e| format!("Failed to decode image: {}", e))?; let rgba = img.to_rgba8(); let (w, h) = rgba.dimensions(); let img_data = arboard::ImageData { @@ -1485,10 +1381,9 @@ pub fn copy_image_to_clipboard(path: String) -> Result<(), String> { height: h as usize, bytes: std::borrow::Cow::Owned(rgba.into_raw()), }; - let mut clipboard = - arboard::Clipboard::new().map_err(|e| format!("Clipboard init failed: {}", e))?; - clipboard - .set_image(img_data) + let mut clipboard = arboard::Clipboard::new() + .map_err(|e| format!("Clipboard init failed: {}", e))?; + clipboard.set_image(img_data) .map_err(|e| format!("Failed to set clipboard image: {}", e))?; Ok(()) } @@ -1503,8 +1398,8 @@ pub fn copy_image_to_clipboard(_path: String) -> Result<(), String> { #[cfg(desktop)] #[tauri::command] pub fn copy_png_to_clipboard(data: Vec) -> Result<(), String> { - let img = - image::load_from_memory(&data).map_err(|e| format!("Failed to decode image: {}", e))?; + let img = image::load_from_memory(&data) + .map_err(|e| format!("Failed to decode image: {}", e))?; let rgba = img.to_rgba8(); let (w, h) = rgba.dimensions(); let img_data = arboard::ImageData { @@ -1512,10 +1407,9 @@ pub fn copy_png_to_clipboard(data: Vec) -> Result<(), String> { height: h as usize, bytes: std::borrow::Cow::Owned(rgba.into_raw()), }; - let mut clipboard = - arboard::Clipboard::new().map_err(|e| format!("Clipboard init failed: {}", e))?; - clipboard - .set_image(img_data) + let mut clipboard = arboard::Clipboard::new() + .map_err(|e| format!("Clipboard init failed: {}", e))?; + clipboard.set_image(img_data) .map_err(|e| format!("Failed to set clipboard image: {}", e))?; Ok(()) } @@ -1575,7 +1469,6 @@ pub fn set_notebook_icon( // ── General Settings ── #[tauri::command] -#[allow(clippy::too_many_arguments)] pub fn set_general_settings( state: State<'_, AppState>, compact_notes: bool, @@ -1800,11 +1693,7 @@ fn scan_orphaned_attachments(vault: &str) -> Result, String> let entry = entry.map_err(|e| e.to_string())?; let p = entry.path(); if p.is_file() { - let name = p - .file_name() - .unwrap_or_default() - .to_string_lossy() - .to_string(); + let name = p.file_name().unwrap_or_default().to_string_lossy().to_string(); let size = entry.metadata().map(|m| m.len()).unwrap_or(0); files.push((name, size)); } @@ -1813,10 +1702,7 @@ fn scan_orphaned_attachments(vault: &str) -> Result, String> return Ok(Vec::new()); } let mut haystack = String::new(); - for entry in walkdir::WalkDir::new(vault) - .into_iter() - .filter_map(|e| e.ok()) - { + for entry in walkdir::WalkDir::new(vault).into_iter().filter_map(|e| e.ok()) { let p = entry.path(); if p.is_file() && p.extension().and_then(|x| x.to_str()) == Some("md") { if let Ok(content) = std::fs::read_to_string(p) { @@ -1988,6 +1874,7 @@ pub fn write_bytes_to(destination: String, data: Vec) -> Result<(), String> Ok(()) } + // ── Backup ── #[tauri::command] @@ -2048,18 +1935,15 @@ pub fn list_backups(state: State<'_, AppState>) -> Result, Stri #[tauri::command] pub fn restore_backup(app: AppHandle, backup_path: String) -> Result<(), String> { - let (vault_path, backup_dir) = { + let vault_path = { let state = app.state::(); let config = state.config.lock().map_err(|e| e.to_string())?; - ( - config.active_vault.clone().ok_or("No active vault")?, - crate::backup::get_backup_dir(&config.backup_location)?, - ) + config.active_vault.clone().ok_or("No active vault")? }; std::thread::spawn(move || { use tauri::Emitter; - match crate::backup::restore_backup(&vault_path, &backup_dir, &backup_path) { + match crate::backup::restore_backup(&vault_path, &backup_path) { Ok(()) => { let _ = app.emit( "restore-done", @@ -2083,10 +1967,8 @@ pub fn restore_backup(app: AppHandle, backup_path: String) -> Result<(), String> } #[tauri::command] -pub fn delete_backup(state: State<'_, AppState>, backup_path: String) -> Result<(), String> { - let config = state.config.lock().map_err(|error| error.to_string())?; - let backup_dir = crate::backup::get_backup_dir(&config.backup_location)?; - crate::backup::delete_backup(&backup_dir, &backup_path) +pub fn delete_backup(backup_path: String) -> Result<(), String> { + crate::backup::delete_backup(&backup_path) } #[tauri::command] @@ -2129,8 +2011,9 @@ pub fn create_version( let config = state.config.lock().map_err(|e| e.to_string())?; let vault_path = config.active_vault.as_ref().ok_or("No active vault")?; let max_versions = config.max_versions_per_note; - let raw = operations::read_vault_note(vault_path, &path)?.raw; - crate::history::force_snapshot(vault_path, ¬e_id, &raw, max_versions) + let raw = std::fs::read_to_string(&path).map_err(|e| e.to_string())?; + crate::history::force_snapshot(vault_path, ¬e_id, &raw, max_versions); + Ok(()) } #[tauri::command] @@ -2147,7 +2030,6 @@ pub fn get_note_version_content( // ── AI ── #[tauri::command] -#[allow(clippy::too_many_arguments)] pub fn set_ai_settings( state: State<'_, AppState>, provider: Option, @@ -2168,8 +2050,7 @@ pub fn set_ai_settings( config.ollama_api_key = ollama_api_key.filter(|k| !k.is_empty()); } Some("openai_compatible") => { - config.openai_compatible_base_url = - openai_compatible_base_url.filter(|u| !u.trim().is_empty()); + config.openai_compatible_base_url = openai_compatible_base_url.filter(|u| !u.trim().is_empty()); config.openai_compatible_api_key = openai_compatible_api_key.filter(|k| !k.is_empty()); } _ => config.ai_api_key = key, @@ -2192,9 +2073,7 @@ pub fn test_ai_connection(app: AppHandle) -> Result<(), String> { .unwrap_or_else(|| "anthropic".to_string()); let key = match provider.as_str() { "ollama" => Some(config.ollama_api_key.clone().unwrap_or_default()), - "openai_compatible" => { - Some(config.openai_compatible_api_key.clone().unwrap_or_default()) - } + "openai_compatible" => Some(config.openai_compatible_api_key.clone().unwrap_or_default()), "openai" => config.openai_api_key.clone(), _ => config.ai_api_key.clone(), } @@ -2236,7 +2115,11 @@ pub fn test_ai_connection(app: AppHandle) -> Result<(), String> { // ── Sync (WebDAV) ── -fn vault_matches_identity(vault: &VaultConfig, path: &str, bookmark_id: Option<&str>) -> bool { +fn vault_matches_identity( + vault: &VaultConfig, + path: &str, + bookmark_id: Option<&str>, +) -> bool { if let Some(bookmark_id) = bookmark_id { vault.bookmark_id.as_deref() == Some(bookmark_id) } else { @@ -2265,25 +2148,23 @@ mod vault_identity_tests { #[test] fn bookmark_identity_disambiguates_vaults_with_the_same_path() { - let mut config = AppConfig { - active_vault: Some("/same/path".to_string()), - vaults: vec![ - VaultConfig { - path: "/same/path".to_string(), - name: "Local".to_string(), - ..Default::default() - }, - VaultConfig { - path: "/same/path".to_string(), - name: "Files".to_string(), - bookmark_id: Some("bookmark".to_string()), - ..Default::default() - }, - ], - active_bookmark_id: Some("bookmark".to_string()), - ..Default::default() - }; + let mut config = AppConfig::default(); + config.active_vault = Some("/same/path".to_string()); + config.vaults = vec![ + VaultConfig { + path: "/same/path".to_string(), + name: "Local".to_string(), + ..Default::default() + }, + VaultConfig { + path: "/same/path".to_string(), + name: "Files".to_string(), + bookmark_id: Some("bookmark".to_string()), + ..Default::default() + }, + ]; + config.active_bookmark_id = Some("bookmark".to_string()); assert_eq!(active_vault_config(&config).unwrap().name, "Files"); config.active_bookmark_id = None; @@ -2309,7 +2190,6 @@ fn sync_config_from(config: &AppConfig) -> Result, provider: Option, @@ -2382,7 +2262,9 @@ pub fn sync_now(app: AppHandle) -> Result<(), String> { .clone() .ok_or_else(|| "No active vault".to_string()) .and_then(|vault| { - sync_config_from(&config).map(|cfg| (vault, config.active_bookmark_id.clone(), cfg)) + sync_config_from(&config).map(|cfg| { + (vault, config.active_bookmark_id.clone(), cfg) + }) }); match gathered { Ok(vault_config) => vault_config, @@ -2396,9 +2278,7 @@ pub fn sync_now(app: AppHandle) -> Result<(), String> { std::thread::spawn(move || { use tauri::Emitter; let result = crate::sync::run_sync(app.clone(), vault.clone(), cfg); - app.state::() - .syncing - .store(false, Ordering::SeqCst); + app.state::().syncing.store(false, Ordering::SeqCst); match result { Ok(summary) => { let ts = chrono::Utc::now().to_rfc3339(); @@ -2416,10 +2296,7 @@ pub fn sync_now(app: AppHandle) -> Result<(), String> { ); } Err(e) => { - let _ = app.emit( - "sync-error", - serde_json::json!({ "success": false, "error": e }), - ); + let _ = app.emit("sync-error", serde_json::json!({ "success": false, "error": e })); } } }); @@ -2443,9 +2320,7 @@ pub fn ai_ask( .unwrap_or_else(|| "anthropic".to_string()); let key = match provider.as_str() { "ollama" => Some(config.ollama_api_key.clone().unwrap_or_default()), - "openai_compatible" => { - Some(config.openai_compatible_api_key.clone().unwrap_or_default()) - } + "openai_compatible" => Some(config.openai_compatible_api_key.clone().unwrap_or_default()), "openai" => config.openai_api_key.clone(), _ => config.ai_api_key.clone(), } @@ -2550,9 +2425,7 @@ fn migrate_global_sync_to_vault(config: &mut AppConfig) -> bool { if config.sync_provider.is_none() && config.webdav_url.is_none() { return false; } - let Ok(active_index) = active_vault_index(config) else { - return false; - }; + let Ok(active_index) = active_vault_index(config) else { return false; }; let g_provider = config.sync_provider.clone(); let g_url = config.webdav_url.clone(); let g_user = config.webdav_username.clone(); @@ -2576,56 +2449,10 @@ fn migrate_global_sync_to_vault(config: &mut AppConfig) -> bool { true } -fn write_private_file(path: &std::path::Path, data: &[u8]) -> Result<(), String> { - use std::io::Write; - - let mut options = std::fs::OpenOptions::new(); - options.create(true).truncate(true).write(true); - #[cfg(unix)] - { - use std::os::unix::fs::OpenOptionsExt; - options.mode(0o600); - } - - let mut file = options.open(path).map_err(|error| error.to_string())?; - #[cfg(unix)] - { - use std::os::unix::fs::PermissionsExt; - file.set_permissions(std::fs::Permissions::from_mode(0o600)) - .map_err(|error| error.to_string())?; - } - file.write_all(data).map_err(|error| error.to_string()) -} - -#[cfg(all(test, unix))] -mod config_permission_tests { - use super::write_private_file; - use std::os::unix::fs::PermissionsExt; - - #[test] - fn config_files_are_owner_only() { - let path = std::env::temp_dir().join(format!( - "helixnotes-config-permissions-{}.json", - uuid::Uuid::new_v4() - )); - std::fs::write(&path, "old").unwrap(); - std::fs::set_permissions(&path, std::fs::Permissions::from_mode(0o644)).unwrap(); - - write_private_file(&path, b"secret").unwrap(); - - assert_eq!( - std::fs::metadata(&path).unwrap().permissions().mode() & 0o777, - 0o600 - ); - assert_eq!(std::fs::read(&path).unwrap(), b"secret"); - std::fs::remove_file(path).unwrap(); - } -} - fn save_app_config(config: &AppConfig) -> Result<(), String> { let path = app_config_path()?; let data = serde_json::to_string_pretty(config).map_err(|e| e.to_string())?; - write_private_file(&path, data.as_bytes())?; + std::fs::write(path, data).map_err(|e| e.to_string())?; Ok(()) } @@ -2662,15 +2489,13 @@ pub fn get_install_type() -> String { } else if std::path::Path::new("/var/lib/dpkg/info/helix-notes.list").exists() { "deb".to_string() } else if std::path::Path::new("/var/lib/pacman/local").exists() - && ["helixnotes", "helixnotes-bin", "helixnotes-appimage-bin"] - .iter() - .any(|pkg| { - std::process::Command::new("pacman") - .args(["-Q", pkg]) - .output() - .map(|o| o.status.success()) - .unwrap_or(false) - }) + && ["helixnotes", "helixnotes-bin", "helixnotes-appimage-bin"].iter().any(|pkg| { + std::process::Command::new("pacman") + .args(["-Q", pkg]) + .output() + .map(|o| o.status.success()) + .unwrap_or(false) + }) { "aur".to_string() } else if std::env::var("APPIMAGE").is_ok() { diff --git a/src-tauri/src/history.rs b/src-tauri/src/history.rs index c005a07..8ba518b 100644 --- a/src-tauri/src/history.rs +++ b/src-tauri/src/history.rs @@ -1,36 +1,22 @@ use std::fs; -use std::path::{Component, Path, PathBuf}; +use std::path::{Path, PathBuf}; use chrono::{DateTime, Utc}; use crate::types::VersionEntry; -fn safe_path_component<'a>(value: &'a str, label: &str) -> Result<&'a str, String> { - let mut components = Path::new(value).components(); - if value.is_empty() - || !matches!(components.next(), Some(Component::Normal(_))) - || components.next().is_some() - { - return Err(format!("Invalid {label}")); - } - Ok(value) -} - /// Directory: .helixnotes/history// -fn history_dir(vault_path: &str, note_id: &str) -> Result { - Ok(Path::new(vault_path) +fn history_dir(vault_path: &str, note_id: &str) -> PathBuf { + Path::new(vault_path) .join(".helixnotes") .join("history") - .join(safe_path_component(note_id, "note ID")?)) + .join(note_id) } /// Save a version snapshot if enough time has passed since the last one. /// Minimum interval: 5 minutes between snapshots. pub fn maybe_snapshot(vault_path: &str, note_id: &str, raw_content: &str, max_versions: u32) { - let Ok(dir) = history_dir(vault_path, note_id) else { - log::warn!("Skipping history snapshot with an invalid note ID"); - return; - }; + let dir = history_dir(vault_path, note_id); // Check if we should create a snapshot (5 min cooldown) if let Ok(entries) = fs::read_dir(&dir) { @@ -82,30 +68,31 @@ pub fn maybe_snapshot(vault_path: &str, note_id: &str, raw_content: &str, max_ve } /// Force-create a version snapshot, bypassing the cooldown. -pub fn force_snapshot( - vault_path: &str, - note_id: &str, - raw_content: &str, - max_versions: u32, -) -> Result<(), String> { - let dir = history_dir(vault_path, note_id)?; - fs::create_dir_all(&dir).map_err(|error| error.to_string())?; +pub fn force_snapshot(vault_path: &str, note_id: &str, raw_content: &str, max_versions: u32) { + let dir = history_dir(vault_path, note_id); + + if let Err(e) = fs::create_dir_all(&dir) { + eprintln!("Failed to create history dir: {}", e); + return; + } let timestamp = Utc::now().format("%Y-%m-%dT%H-%M-%S").to_string(); let filename = format!("{}.md", timestamp); let path = dir.join(&filename); - fs::write(&path, raw_content).map_err(|error| error.to_string())?; + if let Err(e) = fs::write(&path, raw_content) { + eprintln!("Failed to write version snapshot: {}", e); + return; + } if max_versions > 0 { - prune_versions(&dir, max_versions)?; + let _ = prune_versions(&dir, max_versions); } - Ok(()) } /// List all version snapshots for a note, newest first. pub fn list_versions(vault_path: &str, note_id: &str) -> Result, String> { - let dir = history_dir(vault_path, note_id)?; + let dir = history_dir(vault_path, note_id); if !dir.exists() { return Ok(Vec::new()); } @@ -115,7 +102,7 @@ pub fn list_versions(vault_path: &str, note_id: &str) -> Result Result Result { - safe_path_component(timestamp, "version timestamp")?; // Convert ISO timestamp back to filename: 2026-02-08T18:30:00Z → 2026-02-08T18-30-00.md let filename = if let Some(t_pos) = timestamp.find('T') { let date_part = ×tamp[..t_pos]; let time_part = timestamp[t_pos + 1..].trim_end_matches('Z'); let time_dashes = time_part.replace(':', "-"); - format!("{date_part}T{time_dashes}.md") + format!("{}.md", format!("{}T{}", date_part, time_dashes)) } else { format!("{}.md", timestamp) }; - let path = history_dir(vault_path, note_id)?.join(&filename); + let path = history_dir(vault_path, note_id).join(&filename); fs::read_to_string(&path).map_err(|e| format!("Version not found: {}", e)) } @@ -168,7 +154,7 @@ fn prune_versions(dir: &Path, max: u32) -> Result<(), String> { .map_err(|e| e.to_string())? .filter_map(|e| e.ok()) .map(|e| e.path()) - .filter(|p| p.extension().is_some_and(|ext| ext == "md")) + .filter(|p| p.extension().map_or(false, |ext| ext == "md")) .collect(); // Sort by name (timestamps sort lexicographically) - newest last @@ -183,27 +169,3 @@ fn prune_versions(dir: &Path, max: u32) -> Result<(), String> { Ok(()) } - -#[cfg(test)] -mod tests { - use super::{get_version, list_versions}; - use std::fs; - use uuid::Uuid; - - #[test] - fn rejects_history_path_traversal() { - let vault = - std::env::temp_dir().join(format!("helixnotes-history-test-{}", Uuid::new_v4())); - let metadata = vault.join(".helixnotes"); - let escaped_history = metadata.join("escaped"); - fs::create_dir_all(&escaped_history).unwrap(); - fs::write(escaped_history.join("2026-01-01T00-00-00.md"), "escaped").unwrap(); - fs::create_dir_all(metadata.join("history").join("safe")).unwrap(); - fs::write(metadata.join("secret.md"), "secret").unwrap(); - - assert!(list_versions(&vault.to_string_lossy(), "../escaped").is_err()); - assert!(get_version(&vault.to_string_lossy(), "safe", "../../secret").is_err()); - - fs::remove_dir_all(vault).unwrap(); - } -} diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 41ccebf..4d7be6b 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -219,7 +219,7 @@ pub fn run() { let external_url = percent_decode(encoded); if !external_url.starts_with("http://") && !external_url.starts_with("https://") { - responder.respond( + let _ = responder.respond( tauri::http::Response::builder() .status(400) .body(Vec::new()) @@ -234,7 +234,7 @@ pub fn run() { { Ok(c) => c, Err(_) => { - responder.respond( + let _ = responder.respond( tauri::http::Response::builder() .status(502) .body(Vec::new()) @@ -255,7 +255,7 @@ pub fn run() { let status = resp.status().as_u16(); match resp.bytes() { Ok(bytes) => { - responder.respond( + let _ = responder.respond( tauri::http::Response::builder() .status(status) .header("Content-Type", &content_type) @@ -265,7 +265,7 @@ pub fn run() { ); } Err(_) => { - responder.respond( + let _ = responder.respond( tauri::http::Response::builder() .status(502) .body(Vec::new()) @@ -275,7 +275,7 @@ pub fn run() { } } Err(_) => { - responder.respond( + let _ = responder.respond( tauri::http::Response::builder() .status(502) .body(Vec::new()) @@ -350,9 +350,9 @@ pub fn run() { let _ = window.hide(); } } - tauri::WindowEvent::Destroyed + tauri::WindowEvent::Destroyed => { // When main window is destroyed, close all note windows - if window.label() == "main" => { + if window.label() == "main" { let app = window.app_handle(); for (label, win) in app.webview_windows() { if label.starts_with("note-") { @@ -360,6 +360,7 @@ pub fn run() { } } } + } _ => {} } }); diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 69c3a72..ad5fe83 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -2,5 +2,5 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] fn main() { - app_lib::run(); + app_lib::run(); } diff --git a/src-tauri/src/search/mod.rs b/src-tauri/src/search/mod.rs index 6d0f6a9..af40674 100644 --- a/src-tauri/src/search/mod.rs +++ b/src-tauri/src/search/mod.rs @@ -26,10 +26,7 @@ fn vault_index_base(vault_path: &str) -> Option { use sha2::{Digest, Sha256}; let mut hasher = Sha256::new(); hasher.update(vault_path.as_bytes()); - let key: String = hasher.finalize()[..8] - .iter() - .map(|b| format!("{:02x}", b)) - .collect(); + let key: String = hasher.finalize()[..8].iter().map(|b| format!("{:02x}", b)).collect(); dirs::data_local_dir().map(|d| d.join("helixnotes").join("search").join(key)) } @@ -238,9 +235,7 @@ impl SearchIndex { // before the writer is created, so both indexing and querying use it). index.tokenizers().register( "cjk", - TextAnalyzer::builder(CjkTokenizer) - .filter(LowerCaser) - .build(), + TextAnalyzer::builder(CjkTokenizer).filter(LowerCaser).build(), ); #[cfg(mobile)] @@ -295,7 +290,7 @@ impl SearchIndex { doc.add_text(self.path_field, &path_str); doc.add_text(self.title_field, &meta.title); doc.add_text(self.body_field, &content); - doc.add_text(self.tags_field, meta.tags.join(" ")); + doc.add_text(self.tags_field, &meta.tags.join(" ")); let _ = writer.add_document(doc); } } @@ -326,7 +321,7 @@ impl SearchIndex { doc.add_text(self.path_field, path); doc.add_text(self.title_field, &meta.title); doc.add_text(self.body_field, &content); - doc.add_text(self.tags_field, meta.tags.join(" ")); + doc.add_text(self.tags_field, &meta.tags.join(" ")); let _ = writer.add_document(doc); writer.commit().map_err(|e| e.to_string())?; @@ -346,7 +341,7 @@ impl SearchIndex { let reader = self.index.reader().map_err(|e| e.to_string())?; let searcher = reader.searcher(); - let fields = [self.title_field, self.body_field, self.tags_field]; + let fields = vec![self.title_field, self.body_field, self.tags_field]; // Tokenize the query with the SAME CJK-aware analyzer used for indexing, so a // Chinese/Japanese/Korean query becomes the same uni/bigram tokens as the docs. // (For pure-ASCII queries this yields the same lowercased word tokens as before.) @@ -381,10 +376,9 @@ impl SearchIndex { )); vec![(Occur::Should, exact)] } else { - let prefix: Box = - Box::new(PhrasePrefixQuery::new(vec![Term::from_field_text( - field, term, - )])); + let prefix: Box = Box::new(PhrasePrefixQuery::new( + vec![Term::from_field_text(field, term)], + )); let fuzzy: Box = Box::new(FuzzyTermQuery::new( Term::from_field_text(field, term), 1, diff --git a/src-tauri/src/sync.rs b/src-tauri/src/sync.rs index b1433f5..5306c44 100644 --- a/src-tauri/src/sync.rs +++ b/src-tauri/src/sync.rs @@ -81,10 +81,7 @@ fn sha256_hex(bytes: &[u8]) -> String { } fn normalize_etag(s: &str) -> String { - s.trim() - .trim_start_matches("W/") - .trim_matches('"') - .to_string() + s.trim().trim_start_matches("W/").trim_matches('"').to_string() } /// Percent-encode each path segment, keeping the `/` separators. @@ -268,11 +265,7 @@ impl WebdavClient { .send() .map_err(|e| e.to_string())?; if !resp.status().is_success() { - return Err(format!( - "GET {} failed: HTTP {}", - relpath, - resp.status().as_u16() - )); + return Err(format!("GET {} failed: HTTP {}", relpath, resp.status().as_u16())); } Ok(resp.bytes().map_err(|e| e.to_string())?.to_vec()) } @@ -286,11 +279,7 @@ impl WebdavClient { .send() .map_err(|e| e.to_string())?; if !resp.status().is_success() { - return Err(format!( - "PUT {} failed: HTTP {}", - relpath, - resp.status().as_u16() - )); + return Err(format!("PUT {} failed: HTTP {}", relpath, resp.status().as_u16())); } Ok(resp .headers() @@ -464,10 +453,8 @@ fn parse_multistatus(xml: &str, base_path: &str) -> Result, Str } Ok(Event::Text(e)) => { if cap != Cap::None { - if let Ok(decoded) = e.decode() { - if let Ok(text) = quick_xml::escape::unescape(&decoded) { - buf.push_str(&text); - } + if let Ok(t) = e.unescape() { + buf.push_str(&t); } } } @@ -528,8 +515,8 @@ fn apply_changes( match (l, r) { (Some(lf), Some(re)) => { - let local_changed = m.is_none_or(|me| me.local_hash != lf.hash); - let remote_changed = m.is_none_or(|me| &me.remote_etag != re); + let local_changed = m.map_or(true, |me| me.local_hash != lf.hash); + let remote_changed = m.map_or(true, |me| &me.remote_etag != re); if !local_changed && !remote_changed { new_m.files.insert( key.clone(), @@ -682,11 +669,7 @@ pub fn test_connection(cfg: WebdavConfig) -> Result { /// Run a full sync. Mutes the file watcher while applying local writes, then /// rebuilds the search index. Returns a summary of what changed. -pub fn run_sync( - app: tauri::AppHandle, - vault: String, - cfg: WebdavConfig, -) -> Result { +pub fn run_sync(app: tauri::AppHandle, vault: String, cfg: WebdavConfig) -> Result { use std::sync::atomic::Ordering; let state = app.state::(); diff --git a/src-tauri/src/types.rs b/src-tauri/src/types.rs index e5080b9..b8b278c 100644 --- a/src-tauri/src/types.rs +++ b/src-tauri/src/types.rs @@ -549,7 +549,10 @@ mod startup_view_tests { assert!(!config.show_note_switcher); let mut value = serde_json::to_value(config).unwrap(); - value.as_object_mut().unwrap().remove("show_note_switcher"); + value + .as_object_mut() + .unwrap() + .remove("show_note_switcher"); let config: AppConfig = serde_json::from_value(value).unwrap(); assert!(!config.show_note_switcher); diff --git a/src-tauri/src/vault/frontmatter.rs b/src-tauri/src/vault/frontmatter.rs index 55e0ca6..6d7491d 100644 --- a/src-tauri/src/vault/frontmatter.rs +++ b/src-tauri/src/vault/frontmatter.rs @@ -108,7 +108,7 @@ pub fn serialize_frontmatter(meta: &NoteMeta) -> String { "[{}]", meta.tags .iter() - .map(|t| t.to_string()) + .map(|t| format!("{}", t)) .collect::>() .join(", ") ) @@ -279,7 +279,7 @@ fn strip_html_and_markdown(input: &str) -> String { chars.next(); // skip '[' let mut depth = 1; // Skip alt text - for c in chars.by_ref() { + while let Some(c) = chars.next() { if c == '[' { depth += 1; } @@ -294,7 +294,7 @@ fn strip_html_and_markdown(input: &str) -> String { if chars.peek() == Some(&'(') { chars.next(); let mut depth = 1; - for c in chars.by_ref() { + while let Some(c) = chars.next() { if c == '(' { depth += 1; } @@ -313,7 +313,7 @@ fn strip_html_and_markdown(input: &str) -> String { if ch == '[' { let mut link_text = String::new(); let mut depth = 1; - for c in chars.by_ref() { + while let Some(c) = chars.next() { if c == '[' { depth += 1; } @@ -329,7 +329,7 @@ fn strip_html_and_markdown(input: &str) -> String { if chars.peek() == Some(&'(') { chars.next(); let mut depth = 1; - for c in chars.by_ref() { + while let Some(c) = chars.next() { if c == '(' { depth += 1; } diff --git a/src-tauri/src/vault/import.rs b/src-tauri/src/vault/import.rs index 9f840ec..c7291f4 100644 --- a/src-tauri/src/vault/import.rs +++ b/src-tauri/src/vault/import.rs @@ -112,15 +112,13 @@ pub fn import(vault_path: &str) -> Result { "png" | "jpg" | "jpeg" | "gif" | "svg" | "webp" | "bmp" | "ico" | "pdf" ); if is_embeddable { - let alt = if is_dimension_spec(alt_param) { - "" - } else { - alt_param - }; + let alt = if is_dimension_spec(alt_param) { "" } else { alt_param }; result.links_converted += 1; format!("![{}]({})", alt, link_target) } else { - let display = if alt_param.is_empty() || is_dimension_spec(alt_param) { + let display = if alt_param.is_empty() { + file_part.rsplit('/').next().unwrap_or(file_part) + } else if is_dimension_spec(alt_param) { file_part.rsplit('/').next().unwrap_or(file_part) } else { alt_param @@ -139,11 +137,7 @@ pub fn import(vault_path: &str) -> Result { let (file_part, anchor) = split_anchor(note_ref); if file_part.is_empty() { if let Some(a) = anchor { - let display = if display_param.is_empty() { - a - } else { - display_param - }; + let display = if display_param.is_empty() { a } else { display_param }; result.links_converted += 1; return format!("[{}](#{})", display, a); } @@ -171,22 +165,8 @@ pub fn import(vault_path: &str) -> Result { .to_string(); content = after_links; - content = fix_md_image_refs( - &content, - &md_img_re, - vault, - note_dir, - &file_index, - &mut result.links_converted, - ); - content = fix_md_link_refs( - &content, - &md_link_re, - vault, - note_dir, - &file_index, - &mut result.links_converted, - ); + content = fix_md_image_refs(&content, &md_img_re, vault, note_dir, &file_index, &mut result.links_converted); + content = fix_md_link_refs(&content, &md_link_re, vault, note_dir, &file_index, &mut result.links_converted); if result.links_converted > links_before { changed = true; @@ -287,7 +267,7 @@ fn normalize_frontmatter(raw: &str, path: &Path) -> (NoteMeta, String) { let tags = normalize_tags(&mapping); let title = mapping - .get(serde_yaml::Value::String("title".into())) + .get(&serde_yaml::Value::String("title".into())) .and_then(|v| v.as_str()) .map(|s| s.to_string()) .unwrap_or_else(|| { @@ -303,7 +283,7 @@ fn normalize_frontmatter(raw: &str, path: &Path) -> (NoteMeta, String) { }); let id = mapping - .get(serde_yaml::Value::String("id".into())) + .get(&serde_yaml::Value::String("id".into())) .and_then(|v| v.as_str()) .map(|s| s.to_string()) .filter(|s| !s.is_empty()) @@ -313,9 +293,9 @@ fn normalize_frontmatter(raw: &str, path: &Path) -> (NoteMeta, String) { .iter() .find_map(|key| { mapping - .get(serde_yaml::Value::String((*key).into())) + .get(&serde_yaml::Value::String((*key).into())) .and_then(|v| v.as_str()) - .and_then(frontmatter::parse_date_flexible) + .and_then(|s| frontmatter::parse_date_flexible(s)) }) .or_else(|| file_created(path)) .unwrap_or_else(Utc::now); @@ -324,15 +304,15 @@ fn normalize_frontmatter(raw: &str, path: &Path) -> (NoteMeta, String) { .iter() .find_map(|key| { mapping - .get(serde_yaml::Value::String((*key).into())) + .get(&serde_yaml::Value::String((*key).into())) .and_then(|v| v.as_str()) - .and_then(frontmatter::parse_date_flexible) + .and_then(|s| frontmatter::parse_date_flexible(s)) }) .or_else(|| file_modified(path)) .unwrap_or_else(Utc::now); let pinned = mapping - .get(serde_yaml::Value::String("pinned".into())) + .get(&serde_yaml::Value::String("pinned".into())) .and_then(|v| v.as_bool()) .unwrap_or(false); @@ -352,7 +332,7 @@ fn normalize_tags(mapping: &serde_yaml::Mapping) -> Vec { let mut seen = HashSet::new(); for key in &["tags", "tag"] { - if let Some(val) = mapping.get(serde_yaml::Value::String((*key).into())) { + if let Some(val) = mapping.get(&serde_yaml::Value::String((*key).into())) { for raw in yaml_value_to_strings(val) { let cleaned = raw.trim().trim_start_matches('#').trim().to_string(); if !cleaned.is_empty() && seen.insert(cleaned.to_lowercase()) { @@ -409,7 +389,9 @@ fn file_created(path: &Path) -> Option> { .ok() .and_then(|m| m.created().ok()) .and_then(|t| t.duration_since(std::time::UNIX_EPOCH).ok()) - .and_then(|d| chrono::DateTime::from_timestamp(d.as_secs() as i64, d.subsec_nanos())) + .and_then(|d| { + chrono::DateTime::from_timestamp(d.as_secs() as i64, d.subsec_nanos()) + }) } fn file_modified(path: &Path) -> Option> { @@ -417,7 +399,9 @@ fn file_modified(path: &Path) -> Option> { .ok() .and_then(|m| m.modified().ok()) .and_then(|t| t.duration_since(std::time::UNIX_EPOCH).ok()) - .and_then(|d| chrono::DateTime::from_timestamp(d.as_secs() as i64, d.subsec_nanos())) + .and_then(|d| { + chrono::DateTime::from_timestamp(d.as_secs() as i64, d.subsec_nanos()) + }) } fn convert_syntax(content: &str, highlight_re: &Regex, comment_re: &Regex) -> String { @@ -529,9 +513,7 @@ fn fix_md_link_refs( let display = &caps[1]; let href = &caps[2]; let decoded = percent_decode(href); - if decoded.starts_with("http") - || decoded.starts_with('/') - || decoded.starts_with("data:") + if decoded.starts_with("http") || decoded.starts_with('/') || decoded.starts_with("data:") || decoded.starts_with('#') { return format!("[{}]({})", display, href); @@ -567,7 +549,9 @@ fn fix_md_link_refs( .to_string() } -fn move_attachments(vault: &Path) -> Result, String> { +fn move_attachments( + vault: &Path, +) -> Result, String> { let attachments_dir = vault.join(".helixnotes").join("attachments"); let _ = std::fs::create_dir_all(&attachments_dir); @@ -617,7 +601,10 @@ fn move_attachments(vault: &Path) -> Result, String> { Ok(moved) } -fn rewrite_attachment_refs(vault: &Path, moved: &HashMap) -> Result<(), String> { +fn rewrite_attachment_refs( + vault: &Path, + moved: &HashMap, +) -> Result<(), String> { let md_ref = Regex::new(r"(!?\[[^\]]*\])\(([^)]+)\)").map_err(|e| e.to_string())?; let md_files: Vec<_> = walkdir::WalkDir::new(vault) @@ -699,7 +686,7 @@ fn cleanup_empty_dirs(root: &Path) { .map(|e| e.path().to_path_buf()) .collect(); - dirs.sort_by_key(|path| std::cmp::Reverse(path.components().count())); + dirs.sort_by(|a, b| b.components().count().cmp(&a.components().count())); for dir in dirs { let dir_str = dir.to_string_lossy(); @@ -732,8 +719,7 @@ fn is_dimension_spec(s: &str) -> bool { if s.is_empty() { return false; } - s.chars() - .all(|c| c.is_ascii_digit() || c == 'x' || c == 'X') + s.chars().all(|c| c.is_ascii_digit() || c == 'x' || c == 'X') } fn resolve_wiki_ref(file_index: &HashMap, reference: &str) -> String { @@ -921,10 +907,7 @@ mod tests { extract_heading_title("# My Title\n\nBody"), Some("My Title".to_string()) ); - assert_eq!( - extract_heading_title("\n\n# Spaced Title"), - Some("Spaced Title".to_string()) - ); + assert_eq!(extract_heading_title("\n\n# Spaced Title"), Some("Spaced Title".to_string())); assert_eq!(extract_heading_title("Body without heading"), None); assert_eq!(extract_heading_title("## Subheading"), None); assert_eq!(extract_heading_title(""), None); @@ -964,7 +947,8 @@ mod tests { #[test] fn test_normalize_tags_strips_hash() { - let mapping: serde_yaml::Mapping = serde_yaml::from_str("tags:\n - \"#hashed\"").unwrap(); + let mapping: serde_yaml::Mapping = + serde_yaml::from_str("tags:\n - \"#hashed\"").unwrap(); let tags = normalize_tags(&mapping); assert_eq!(tags, vec!["hashed"]); } diff --git a/src-tauri/src/vault/operations.rs b/src-tauri/src/vault/operations.rs index 022a0e1..0c10fa4 100644 --- a/src-tauri/src/vault/operations.rs +++ b/src-tauri/src/vault/operations.rs @@ -17,107 +17,6 @@ pub fn helixnotes_dir(vault_path: &str) -> PathBuf { Path::new(vault_path).join(".helixnotes") } -fn canonicalize_path(path: &Path, label: &str) -> Result { - fs::canonicalize(path).map_err(|error| format!("Invalid {label}: {error}")) -} - -fn ensure_vault_content_path( - vault_path: &str, - requested_path: &Path, - allow_root: bool, -) -> Result { - let vault = canonicalize_path(Path::new(vault_path), "vault path")?; - let requested = canonicalize_path(requested_path, "vault item path")?; - let metadata = vault.join(".helixnotes"); - - if !requested.starts_with(&vault) - || requested.starts_with(&metadata) - || (!allow_root && requested == vault) - { - return Err("Path must stay inside the active vault".to_string()); - } - - Ok(requested_path.to_path_buf()) -} - -fn ensure_vault_content_dir(vault_path: &str, requested_path: &Path) -> Result { - let requested = ensure_vault_content_path(vault_path, requested_path, true)?; - if !requested.is_dir() { - return Err("Vault destination is not a directory".to_string()); - } - Ok(requested) -} - -fn ensure_note_path(vault_path: &str, requested_path: &Path) -> Result { - let requested = ensure_vault_content_path(vault_path, requested_path, false)?; - if !requested.is_file() - || requested - .extension() - .and_then(|extension| extension.to_str()) - != Some("md") - { - return Err("Note path must point to a Markdown file".to_string()); - } - Ok(requested) -} - -fn ensure_readable_note_path(vault_path: &str, requested_path: &Path) -> Result { - if let Ok(note) = ensure_note_path(vault_path, requested_path) { - return Ok(note); - } - - let trashed_note = ensure_trash_entry(vault_path, requested_path)?; - if !trashed_note.is_file() - || trashed_note - .extension() - .and_then(|extension| extension.to_str()) - != Some("md") - { - return Err("Note path must point to a Markdown file".to_string()); - } - Ok(trashed_note) -} - -fn ensure_notebook_path(vault_path: &str, requested_path: &Path) -> Result { - let requested = ensure_vault_content_path(vault_path, requested_path, false)?; - if !requested.is_dir() { - return Err("Notebook path must point to a directory".to_string()); - } - Ok(requested) -} - -fn ensure_trash_entry(vault_path: &str, requested_path: &Path) -> Result { - let trash = canonicalize_path(&helixnotes_dir(vault_path).join("trash"), "trash path")?; - let requested = canonicalize_path(requested_path, "trash item path")?; - if requested == trash || !requested.starts_with(&trash) { - return Err("Path must be an item inside the active vault trash".to_string()); - } - Ok(requested_path.to_path_buf()) -} - -fn safe_relative_path(path: &str) -> Result<&Path, String> { - let relative = Path::new(path); - if relative.as_os_str().is_empty() - || !relative - .components() - .all(|component| matches!(component, Component::Normal(_) | Component::CurDir)) - { - return Err("Path must be a safe vault-relative path".to_string()); - } - Ok(relative) -} - -fn safe_child_name(name: &str) -> Result<&str, String> { - let mut components = Path::new(name).components(); - if name.trim().is_empty() - || !matches!(components.next(), Some(Component::Normal(_))) - || components.next().is_some() - { - return Err("Name must not contain path separators".to_string()); - } - Ok(name) -} - pub fn ensure_vault_structure(vault_path: &str) -> Result<(), String> { let hn_dir = helixnotes_dir(vault_path); fs::create_dir_all(hn_dir.join("trash")).map_err(|e| e.to_string())?; @@ -241,11 +140,7 @@ fn scan_dir_recursive(dir: &Path, vault_root: &str) -> Vec { paths .par_iter() .map(|path| { - let name = path - .file_name() - .unwrap_or_default() - .to_string_lossy() - .to_string(); + let name = path.file_name().unwrap_or_default().to_string_lossy().to_string(); let relative = path .strip_prefix(root) .unwrap_or(path) @@ -296,11 +191,7 @@ fn scan_dir_with_count(dir: &Path, vault_root: &str) -> (Vec, usi let entries: Vec = paths .par_iter() .map(|path| { - let name = path - .file_name() - .unwrap_or_default() - .to_string_lossy() - .to_string(); + let name = path.file_name().unwrap_or_default().to_string_lossy().to_string(); let relative = path .strip_prefix(root) .unwrap_or(path) @@ -352,15 +243,9 @@ pub fn count_root_notes(vault_path: &str) -> Result { pub fn scan_notes(vault_path: &str, notebook_path: Option<&str>) -> Result, String> { let scan_path = notebook_path.unwrap_or(vault_path); let root = Path::new(scan_path); - ensure_vault_content_dir(vault_path, root)?; let vault_root = Path::new(vault_path); - log::info!( - "scan_notes: vault={}, scan={}, exists={}", - vault_path, - scan_path, - root.exists() - ); + log::info!("scan_notes: vault={}, scan={}, exists={}", vault_path, scan_path, root.exists()); if !root.exists() { return Err("Path does not exist".to_string()); @@ -416,9 +301,7 @@ pub fn scan_notes(vault_path: &str, notebook_path: Option<&str>) -> Result) -> Result Result { - let validated = ensure_readable_note_path(vault_path, Path::new(path))?; - read_note_content(&validated, path) -} - -pub fn read_vault_note(vault_path: &str, path: &str) -> Result { - let validated = ensure_note_path(vault_path, Path::new(path))?; - read_note_content(&validated, path) -} - -fn read_note_content(validated: &Path, reported_path: &str) -> Result { - let p = validated; +pub fn read_note(path: &str) -> Result { + let p = Path::new(path); let raw = fs::read_to_string(p).map_err(|e| e.to_string())?; let filename = p .file_name() @@ -581,15 +454,14 @@ fn read_note_content(validated: &Path, reported_path: &str) -> Result Result<(), String> { - let path = ensure_note_path(vault_path, Path::new(path))?; +pub fn save_note(path: &str, meta: &NoteMeta, body: &str) -> Result<(), String> { let mut updated_meta = meta.clone(); updated_meta.modified = Utc::now(); @@ -599,7 +471,7 @@ pub fn save_note(vault_path: &str, path: &str, meta: &NoteMeta, body: &str) -> R } // Read existing file to preserve unknown frontmatter fields - let existing = fs::read_to_string(&path).unwrap_or_default(); + let existing = fs::read_to_string(path).unwrap_or_default(); let raw = if existing.is_empty() { frontmatter::update_note_raw(&updated_meta, body) } else { @@ -615,11 +487,14 @@ pub fn create_note( notebook_relative: Option<&str>, title: &str, ) -> Result { - let requested_dir = match notebook_relative { - Some(rel) => Path::new(vault_path).join(safe_relative_path(rel)?), + let dir = match notebook_relative { + Some(rel) => Path::new(vault_path).join(rel), None => PathBuf::from(vault_path), }; - let dir = ensure_vault_content_dir(vault_path, &requested_dir)?; + + if !dir.exists() { + return Err("Notebook directory does not exist".to_string()); + } let filename = sanitize_filename(title); let mut file_path = dir.join(format!("{}.md", filename)); @@ -660,8 +535,10 @@ pub fn create_note( } pub fn duplicate_note(path: &str, vault_path: &str) -> Result { - let validated = ensure_note_path(vault_path, Path::new(path))?; - let src = validated.as_path(); + let src = Path::new(path); + if !src.is_file() { + return Err("Note does not exist".to_string()); + } let parent = src .parent() @@ -795,9 +672,7 @@ pub fn create_daily_note( "eu" => target_date.format("%d/%m/%Y").to_string(), _ => { let locale = get_system_locale(); - target_date - .format_localized("%B %d, %Y", locale) - .to_string() + target_date.format_localized("%B %d, %Y", locale).to_string() } }; @@ -844,12 +719,12 @@ pub fn create_notebook( parent_relative: Option<&str>, name: &str, ) -> Result { - let requested_parent = match parent_relative { - Some(rel) => Path::new(vault_path).join(safe_relative_path(rel)?), + let parent = match parent_relative { + Some(rel) => Path::new(vault_path).join(rel), None => PathBuf::from(vault_path), }; - let parent = ensure_vault_content_dir(vault_path, &requested_parent)?; - let dir_path = parent.join(safe_child_name(name)?); + + let dir_path = parent.join(name); if dir_path.exists() { return Err("Notebook already exists".to_string()); } @@ -873,8 +748,10 @@ pub fn create_notebook( } pub fn delete_note(vault_path: &str, note_path: &str) -> Result<(), String> { - let validated = ensure_note_path(vault_path, Path::new(note_path))?; - let src = validated.as_path(); + let src = Path::new(note_path); + if !src.exists() { + return Err("Note does not exist".to_string()); + } let trash_dir = helixnotes_dir(vault_path).join("trash"); fs::create_dir_all(&trash_dir).map_err(|e| e.to_string())?; @@ -894,8 +771,10 @@ pub fn delete_note(vault_path: &str, note_path: &str) -> Result<(), String> { } pub fn delete_notebook(vault_path: &str, notebook_path: &str) -> Result<(), String> { - let validated = ensure_notebook_path(vault_path, Path::new(notebook_path))?; - let src = validated.as_path(); + let src = Path::new(notebook_path); + if !src.exists() { + return Err("Notebook does not exist".to_string()); + } let trash_dir = helixnotes_dir(vault_path).join("trash"); fs::create_dir_all(&trash_dir).map_err(|e| e.to_string())?; @@ -924,8 +803,10 @@ pub fn delete_notebook(vault_path: &str, notebook_path: &str) -> Result<(), Stri } pub fn rename_note(path: &str, new_title: &str, vault_path: &str) -> Result { - let validated = ensure_note_path(vault_path, Path::new(path))?; - let src = validated.as_path(); + let src = Path::new(path); + if !src.exists() { + return Err("Note does not exist".to_string()); + } // Read old title before renaming let raw = fs::read_to_string(src).map_err(|e| e.to_string())?; @@ -958,13 +839,7 @@ pub fn rename_note(path: &str, new_title: &str, vault_path: &str) -> Result c, @@ -1049,13 +918,22 @@ fn update_wikilinks_after_rename( // If another note shares the same title, these would be ambiguous. if old_title != new_title && title_is_unique { // 1. Short title ref: [[Old Title]] → [[New Title]] - result = result.replace(&format!("[[{}]]", old_title), &format!("[[{}]]", new_title)); + result = result.replace( + &format!("[[{}]]", old_title), + &format!("[[{}]]", new_title), + ); // 2. Short title with alias: [[Old Title|display]] → [[New Title|display]] - result = result.replace(&format!("[[{}|", old_title), &format!("[[{}|", new_title)); + result = result.replace( + &format!("[[{}|", old_title), + &format!("[[{}|", new_title), + ); // 3. Short title as alias display: [[ref|Old Title]] → [[ref|New Title]] - result = result.replace(&format!("|{}]]", old_title), &format!("|{}]]", new_title)); + result = result.replace( + &format!("|{}]]", old_title), + &format!("|{}]]", new_title), + ); } // Path-based rules are always safe (paths are unique). @@ -1088,11 +966,13 @@ fn update_wikilinks_after_rename( } } -pub fn rename_notebook(vault_path: &str, path: &str, new_name: &str) -> Result { - let validated = ensure_notebook_path(vault_path, Path::new(path))?; - let src = validated.as_path(); +pub fn rename_notebook(path: &str, new_name: &str) -> Result { + let src = Path::new(path); + if !src.exists() { + return Err("Notebook does not exist".to_string()); + } - let new_path = src.parent().unwrap().join(safe_child_name(new_name)?); + let new_path = src.parent().unwrap().join(new_name); if new_path.exists() { return Err("A notebook with that name already exists".to_string()); } @@ -1101,12 +981,13 @@ pub fn rename_notebook(vault_path: &str, path: &str, new_name: &str) -> Result Result { - let validated = ensure_note_path(vault_path, Path::new(note_path))?; - let src = validated.as_path(); +pub fn move_note(note_path: &str, dest_notebook: &str) -> Result { + let src = Path::new(note_path); + if !src.exists() { + return Err("Note does not exist".to_string()); + } - let validated_dest = ensure_vault_content_dir(vault_path, Path::new(dest_notebook))?; - let dest_dir = validated_dest.as_path(); + let dest_dir = Path::new(dest_notebook); if !dest_dir.is_dir() { return Err("Destination notebook does not exist".to_string()); } @@ -1118,16 +999,13 @@ pub fn move_note(vault_path: &str, note_path: &str, dest_notebook: &str) -> Resu Ok(dest.to_string_lossy().to_string()) } -pub fn move_notebook( - vault_path: &str, - notebook_path: &str, - dest_parent: &str, -) -> Result { - let validated = ensure_notebook_path(vault_path, Path::new(notebook_path))?; - let src = validated.as_path(); +pub fn move_notebook(notebook_path: &str, dest_parent: &str) -> Result { + let src = Path::new(notebook_path); + if !src.exists() || !src.is_dir() { + return Err("Notebook does not exist".to_string()); + } - let validated_dest = ensure_vault_content_dir(vault_path, Path::new(dest_parent))?; - let dest_parent_path = validated_dest.as_path(); + let dest_parent_path = Path::new(dest_parent); if !dest_parent_path.is_dir() { return Err("Destination does not exist".to_string()); } @@ -1170,10 +1048,7 @@ fn cleanup_empty_trash_dir(vault_path: &str, dir: Option<&Path>) { pub fn get_trash_contents(vault_path: &str) -> Result { let trash_dir = helixnotes_dir(vault_path).join("trash"); if !trash_dir.exists() { - return Ok(TrashContents { - notes: Vec::new(), - notebooks: Vec::new(), - }); + return Ok(TrashContents { notes: Vec::new(), notebooks: Vec::new() }); } let vault_root = Path::new(vault_path); @@ -1192,10 +1067,7 @@ pub fn get_trash_contents(vault_path: &str) -> Result { .min_depth(1) .into_iter() .filter_map(|e| e.ok()) - .filter(|e| { - e.path().is_file() - && e.path().extension().and_then(|x| x.to_str()) == Some("md") - }) + .filter(|e| e.path().is_file() && e.path().extension().and_then(|x| x.to_str()) == Some("md")) .count(); let dirname = path.file_name().unwrap_or_default().to_string_lossy(); // Strip timestamp prefix to get original notebook name @@ -1208,7 +1080,7 @@ pub fn get_trash_contents(vault_path: &str) -> Result { }; let modified = fs::metadata(&path) .and_then(|m| m.modified()) - .map(DateTime::::from) + .map(|t| DateTime::::from(t)) .unwrap_or_else(|_| Utc::now()); notebooks.push(TrashNotebookEntry { name, @@ -1219,8 +1091,8 @@ pub fn get_trash_contents(vault_path: &str) -> Result { } } - notes.sort_by_key(|note| std::cmp::Reverse(note.meta.modified)); - notebooks.sort_by_key(|notebook| std::cmp::Reverse(notebook.modified)); + notes.sort_by(|a, b| b.meta.modified.cmp(&a.meta.modified)); + notebooks.sort_by(|a, b| b.modified.cmp(&a.modified)); Ok(TrashContents { notes, notebooks }) } @@ -1229,17 +1101,15 @@ pub fn restore_note( trash_path: &str, dest_notebook: Option<&str>, ) -> Result { - let validated = ensure_trash_entry(vault_path, Path::new(trash_path))?; - let src = validated.as_path(); - if !src.is_file() { + let src = Path::new(trash_path); + if !src.exists() { return Err("Trashed note does not exist".to_string()); } - let requested_dest = match dest_notebook { + let dest_dir = match dest_notebook { Some(nb) => PathBuf::from(nb), None => PathBuf::from(vault_path), }; - let dest_dir = ensure_vault_content_dir(vault_path, &requested_dest)?; // Strip timestamp prefix from trash filename (17-char with millis or 14-char legacy) let filename = src.file_name().unwrap_or_default().to_string_lossy(); @@ -1262,18 +1132,15 @@ pub fn restore_note( } pub fn restore_notebook(vault_path: &str, trash_path: &str) -> Result { - let validated = ensure_trash_entry(vault_path, Path::new(trash_path))?; - let src = validated.as_path(); - if !src.is_dir() { + let src = Path::new(trash_path); + if !src.exists() || !src.is_dir() { return Err("Trashed notebook does not exist".to_string()); } let dirname = src.file_name().unwrap_or_default().to_string_lossy(); // Try to read original path from sidecar .meta file - let meta_path = src - .with_extension("") - .with_file_name(format!("{}.meta", dirname)); + let meta_path = src.with_extension("").with_file_name(format!("{}.meta", dirname)); let relative = if let Ok(original) = fs::read_to_string(&meta_path) { original } else { @@ -1289,7 +1156,7 @@ pub fn restore_notebook(vault_path: &str, trash_path: &str) -> Result Result Result<(), String> { - let validated = ensure_trash_entry(vault_path, Path::new(path))?; - let p = validated.as_path(); + let p = Path::new(path); let parent = p.parent().map(|pp| pp.to_path_buf()); if p.is_dir() { fs::remove_dir_all(p).map_err(|e| e.to_string())?; @@ -1565,9 +1431,8 @@ pub fn sanitize_filename(name: &str) -> String { #[cfg(test)] mod tests { use super::{ - compare_natural_names, create_notebook, duplicate_note, get_note_switcher_titles, - helixnotes_dir, load_notebook_icons, permanent_delete, read_note, restore_notebook, - scan_notebooks, set_notebook_icon, + compare_natural_names, duplicate_note, get_note_switcher_titles, helixnotes_dir, + load_notebook_icons, scan_notebooks, set_notebook_icon, }; use std::fs; use uuid::Uuid; @@ -1576,7 +1441,10 @@ mod tests { fn compares_numeric_segments_anywhere_in_names() { let mut names = ["Class 10b", "Class 2b", "Class 10a", "Class 2a"]; names.sort_by(|left, right| compare_natural_names(left, right)); - assert_eq!(names, ["Class 2a", "Class 2b", "Class 10a", "Class 10b"]); + assert_eq!( + names, + ["Class 2a", "Class 2b", "Class 10a", "Class 10b"] + ); assert_eq!( compare_natural_names("Class 02", "Class 2b"), std::cmp::Ordering::Less @@ -1724,75 +1592,6 @@ mod tests { fs::remove_file(outside).unwrap(); } - #[test] - fn reads_markdown_notes_from_trash_without_allowing_external_files() { - let test_root = - std::env::temp_dir().join(format!("helixnotes-path-security-test-{}", Uuid::new_v4())); - let vault = test_root.join("vault"); - let trash = helixnotes_dir(&vault.to_string_lossy()).join("trash"); - let trashed_note = trash.join("20240101000000000_Note.md"); - let outside = test_root.join("outside.md"); - fs::create_dir_all(&trash).unwrap(); - fs::write(&trashed_note, "---\ntitle: Note\n---\n\ntrashed").unwrap(); - fs::write(&outside, "outside").unwrap(); - - assert!(read_note(&vault.to_string_lossy(), &trashed_note.to_string_lossy()).is_ok()); - assert!(read_note(&vault.to_string_lossy(), &outside.to_string_lossy()).is_err()); - - fs::remove_dir_all(test_root).unwrap(); - } - - #[test] - fn rejects_permanent_deletion_outside_trash() { - let test_root = - std::env::temp_dir().join(format!("helixnotes-path-security-test-{}", Uuid::new_v4())); - let vault = test_root.join("vault"); - let outside = test_root.join("outside.md"); - fs::create_dir_all(helixnotes_dir(&vault.to_string_lossy()).join("trash")).unwrap(); - fs::write(&outside, "must survive").unwrap(); - - let result = permanent_delete(&vault.to_string_lossy(), &outside.to_string_lossy()); - - assert!(result.is_err()); - assert_eq!(fs::read_to_string(&outside).unwrap(), "must survive"); - fs::remove_dir_all(test_root).unwrap(); - } - - #[test] - fn rejects_notebook_creation_outside_vault() { - let test_root = - std::env::temp_dir().join(format!("helixnotes-path-security-test-{}", Uuid::new_v4())); - let vault = test_root.join("vault"); - fs::create_dir_all(&vault).unwrap(); - - let result = create_notebook(&vault.to_string_lossy(), Some(".."), "escaped"); - - assert!(result.is_err()); - assert!(!test_root.join("escaped").exists()); - fs::remove_dir_all(test_root).unwrap(); - } - - #[test] - fn rejects_traversal_in_restored_notebook_metadata() { - let test_root = - std::env::temp_dir().join(format!("helixnotes-path-security-test-{}", Uuid::new_v4())); - let vault = test_root.join("vault"); - let trash = helixnotes_dir(&vault.to_string_lossy()).join("trash"); - let trashed_notebook = trash.join("20240101000000000_Notebook"); - fs::create_dir_all(&trashed_notebook).unwrap(); - fs::write(trash.join("20240101000000000_Notebook.meta"), "../escaped").unwrap(); - - let result = restore_notebook( - &vault.to_string_lossy(), - &trashed_notebook.to_string_lossy(), - ); - - assert!(result.is_err()); - assert!(trashed_notebook.exists()); - assert!(!test_root.join("escaped").exists()); - fs::remove_dir_all(test_root).unwrap(); - } - #[test] fn duplicates_note_content_and_assigns_unique_identity_and_name() { let vault = @@ -1824,4 +1623,4 @@ mod tests { fs::remove_dir_all(vault).unwrap(); } -} +} \ No newline at end of file diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 48b98da..0c7fca8 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "../node_modules/@tauri-apps/cli/config.schema.json", "productName": "HelixNotes", - "version": "1.3.5", + "version": "1.3.4", "identifier": "com.helixnotes.app", "build": { "frontendDist": "../build", @@ -24,7 +24,7 @@ } ], "security": { - "csp": "default-src 'self'; img-src 'self' asset: http://asset.localhost imgproxy: http://imgproxy.localhost https: blob: data:; font-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-src 'self' asset: http://asset.localhost", + "csp": "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' asset: http://asset.localhost imgproxy: http://imgproxy.localhost https: blob: data:; font-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-src 'self' asset: http://asset.localhost", "assetProtocol": { "enable": true, "scope": ["**/*", "/**", "**/.helixnotes/**"] diff --git a/src/lib/api.ts b/src/lib/api.ts index 7c12d34..a360daf 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -185,7 +185,7 @@ export async function getNoteSwitcherTitles( return invoke("get_note_switcher_titles", { recentPaths }); } -export async function getGraphData(): Promise<{ nodes: { title: string; path: string }[]; edges: { source: number; target: number; bidirectional: boolean }[] }> { +export async function getGraphData(): Promise<{ nodes: { title: string; path: string }[]; edges: { source: number; target: number }[] }> { return invoke("get_graph_data"); } diff --git a/src/lib/components/Editor.svelte b/src/lib/components/Editor.svelte index 7909c53..420c302 100644 --- a/src/lib/components/Editor.svelte +++ b/src/lib/components/Editor.svelte @@ -132,8 +132,6 @@ let highlightDropdown = $state(false); let alignDropdown = $state(false); let insertDropdown = $state(false); - let tablePickerOpen = $state(false); - let tablePickerHover = $state({ rows: 0, cols: 0 }); function scrollEditorBodyToBottom(source: HTMLElement | null | undefined = editorElement) { const editorBody = source?.closest('.editor-body') as HTMLElement | null; @@ -308,22 +306,6 @@ let editorState = $state(0); let editorStateRaf = 0; // RAF handle for batching toolbar updates - function isEditorActive( - nameOrAttributes: string | Record, - attributes?: Record, - ): boolean { - void editorState; - if (!editor) return false; - return typeof nameOrAttributes === 'string' - ? editor.isActive(nameOrAttributes, attributes) - : editor.isActive(nameOrAttributes); - } - - function getEditorAttributes(name: string): Record { - void editorState; - return editor?.getAttributes(name) ?? {}; - } - // AI let aiMenu = $state<{ x: number; y: number } | null>(null); let aiLoading = $state(false); @@ -488,6 +470,8 @@ }); let textContextMenu = $state<{ x: number; y: number; submenuLeft: boolean } | null>(null); let tableContextMenu = $state<{ x: number; y: number; hasStyling: boolean } | null>(null); + let tablePickerOpen = $state(false); + let tablePickerHover = $state({ rows: 0, cols: 0 }); let imageToolbar = $state<{ pos: number; x: number; y: number; size: string; src: string; alt: string } | null>(null); let imageViewer = $state<{ src: string; alt: string } | null>(null); let copyToast = $state<'copying' | 'done' | null>(null); @@ -6583,16 +6567,16 @@
- {#if headingDropdown}
e.stopPropagation()}> - - - - + + + +
{/if}
@@ -6600,36 +6584,36 @@
- - - -
-
- - - @@ -6683,7 +6667,7 @@
- @@ -6752,17 +6736,17 @@
- {#if headingDropdown}
e.stopPropagation()}> - - - - - + + + + +
{/if}
@@ -6770,16 +6754,16 @@
- - - - @@ -6787,14 +6771,14 @@
{#if colorDropdown}
e.stopPropagation()}> {#each textColors as color} @@ -6806,20 +6790,20 @@
-
- - - @@ -6836,25 +6820,25 @@
- - - - - @@ -6895,22 +6879,22 @@
- {#if highlightDropdown}
e.stopPropagation()}> {#each highlightColors as color} {/each}
- - @@ -6933,11 +6917,11 @@
- - - @@ -7119,12 +7103,12 @@ {#if ctxHeadingSubmenu}
- - - - + + + +
- +
{/if}
diff --git a/tests/clear-formatting.test.mjs b/tests/clear-formatting.test.mjs deleted file mode 100644 index 1b208df..0000000 --- a/tests/clear-formatting.test.mjs +++ /dev/null @@ -1,164 +0,0 @@ -import assert from 'node:assert/strict'; -import test from 'node:test'; -import { Schema } from '@tiptap/pm/model'; -import { EditorState, TextSelection } from '@tiptap/pm/state'; -import { applyClearFormatting } from '../src/lib/editor/clearFormatting.ts'; - -const schema = new Schema({ - nodes: { - doc: { content: 'block+' }, - paragraph: { content: 'text*', group: 'block' }, - heading: { attrs: { level: { default: 1 } }, content: 'text*', group: 'block' }, - codeBlock: { content: 'text*', group: 'block', code: true }, - blockquote: { content: 'block+', group: 'block' }, - bulletList: { content: 'listItem+', group: 'block' }, - listItem: { content: 'paragraph block*' }, - taskList: { content: 'taskItem+', group: 'block' }, - taskItem: { attrs: { checked: { default: false } }, content: 'paragraph block*' }, - text: { group: 'inline' }, - }, - marks: { - bold: {}, - italic: {}, - strike: {}, - underline: {}, - highlight: { attrs: { color: { default: null } } }, - code: {}, - link: { attrs: { href: {} } }, - wikiLink: { attrs: { path: { default: null } } }, - }, -}); - -const mark = (name, attrs = null) => schema.mark(name, attrs); -const text = (value, marks = []) => schema.text(value, marks); -const para = (...children) => schema.node('paragraph', null, children); - -function clearedDoc(doc, from, to = from) { - const state = EditorState.create({ schema, doc, selection: TextSelection.create(doc, from, to) }); - const tr = state.tr; - applyClearFormatting(schema, tr); - return state.apply(tr).doc; -} - -function markSummary(doc) { - const summary = []; - doc.descendants((node) => { - if (node.isText) summary.push(`${node.text}→${node.marks.map((m) => m.type.name).join('+') || 'none'}`); - return true; - }); - return summary; -} - -test('strips formatting marks from a selection but keeps link and wikiLink', () => { - // "bold"[1,5) "link"[5,9) "wiki"[9,13) - const doc = schema.node('doc', null, [ - para( - text('bold', [mark('bold')]), - text('link', [mark('link', { href: 'https://example.com' })]), - text('wiki', [mark('wikiLink', { path: 'notes/wiki.md' })]), - ), - ]); - - const result = clearedDoc(doc, 1, 13); - const nodes = []; - result.firstChild.forEach((node) => nodes.push(node)); - - assert.deepEqual(nodes[0].marks, []); - assert.deepEqual(nodes[1].marks.map((m) => m.type.name), ['link']); - assert.equal(nodes[1].marks[0].attrs.href, 'https://example.com'); - assert.deepEqual(nodes[2].marks.map((m) => m.type.name), ['wikiLink']); - assert.equal(nodes[2].marks[0].attrs.path, 'notes/wiki.md'); -}); - -test('empty selection clears the entire current line', () => { - // "one "[1,5) "two"[5,8) " three"[8,14), cursor inside "one" at 2 - const doc = schema.node('doc', null, [ - para(text('one '), text('two', [mark('bold')]), text(' three', [mark('italic')])), - ]); - - const result = clearedDoc(doc, 2); - assert.deepEqual(markSummary(result), ['one two three→none']); -}); - -test('cursor in a heading demotes it to a plain paragraph', () => { - const doc = schema.node('doc', null, [ - schema.node('heading', { level: 2 }, [text('Title', [mark('bold')])]), - ]); - - const result = clearedDoc(doc, 3); - assert.equal(result.firstChild.type.name, 'paragraph'); - assert.equal(result.firstChild.textContent, 'Title'); - assert.deepEqual(markSummary(result), ['Title→none']); -}); - -test('cursor in a code block converts it to a paragraph', () => { - const doc = schema.node('doc', null, [schema.node('codeBlock', null, [text('const x = 1;')])]); - - const result = clearedDoc(doc, 4); - assert.equal(result.firstChild.type.name, 'paragraph'); - assert.equal(result.firstChild.textContent, 'const x = 1;'); -}); - -test('cursor in a blockquote lifts the content out of the wrapper', () => { - const doc = schema.node('doc', null, [ - schema.node('blockquote', null, [para(text('quoted', [mark('italic')]))]), - ]); - - const result = clearedDoc(doc, 3); - assert.equal(result.childCount, 1); - assert.equal(result.firstChild.type.name, 'paragraph'); - assert.deepEqual(markSummary(result), ['quoted→none']); -}); - -test('nested blockquotes are fully unwrapped', () => { - const doc = schema.node('doc', null, [ - schema.node('blockquote', null, [ - schema.node('blockquote', null, [para(text('deep', [mark('bold')]))]), - ]), - ]); - - const result = clearedDoc(doc, 3); - assert.equal(result.childCount, 1); - assert.equal(result.firstChild.type.name, 'paragraph'); - assert.deepEqual(markSummary(result), ['deep→none']); -}); - -test('task list structure and checked state survive clearing', () => { - const doc = schema.node('doc', null, [ - schema.node('taskList', null, [ - schema.node('taskItem', { checked: true }, [para(text('done task', [mark('strike')]))]), - schema.node('taskItem', { checked: false }, [para(text('open task'))]), - ]), - ]); - // cursor inside "done task": taskList at 0, taskItem at 1, paragraph at 2, text from 3 - const result = clearedDoc(doc, 5); - - const list = result.firstChild; - assert.equal(list.type.name, 'taskList'); - assert.equal(list.childCount, 2); - assert.equal(list.firstChild.type.name, 'taskItem'); - assert.equal(list.firstChild.attrs.checked, true); - assert.equal(list.lastChild.attrs.checked, false); - assert.deepEqual(markSummary(result), ['done task→none', 'open task→none']); -}); - -test('partial selection keeps formatting outside the selection', () => { - // "abcd" all bold; clear only [2,4) = "bc" - const doc = schema.node('doc', null, [para(text('abcd', [mark('bold')]))]); - - const result = clearedDoc(doc, 2, 4); - assert.deepEqual(markSummary(result), ['a→bold', 'bc→none', 'd→bold']); -}); - -test('multi-block selection demotes headings and strips marks in range', () => { - // heading "H1" [0,4), paragraph at 4 with "body" bold [5,9) - const doc = schema.node('doc', null, [ - schema.node('heading', { level: 1 }, [text('H1')]), - para(text('body', [mark('bold')])), - ]); - - const result = clearedDoc(doc, 2, 7); - assert.equal(result.firstChild.type.name, 'paragraph'); - // marks removed only up to position 7: "bo" cleared, "dy" still bold - assert.deepEqual(markSummary(result), ['H1→none', 'bo→none', 'dy→bold']); -}); diff --git a/tests/code-block-input-scroll.test.mjs b/tests/code-block-input-scroll.test.mjs deleted file mode 100644 index 6aa3b94..0000000 --- a/tests/code-block-input-scroll.test.mjs +++ /dev/null @@ -1,95 +0,0 @@ -import assert from 'node:assert/strict'; -import test from 'node:test'; -import { Schema } from '@tiptap/pm/model'; -import { EditorState, Plugin, TextSelection } from '@tiptap/pm/state'; -import { createCodeBlockInputScrollPlugin } from '../src/lib/editor/extensions/codeBlockInputScroll.ts'; - -const schema = new Schema({ - nodes: { - doc: { content: 'block+' }, - paragraph: { content: 'text*', group: 'block' }, - codeBlock: { - attrs: { language: { default: null } }, - content: 'text*', - group: 'block', - code: true, - }, - text: { group: 'inline' }, - }, -}); - -const inputRulesPlugin = new Plugin({ isInputRules: true }); - -function textBlock(type, text, attrs = null) { - return schema.node(type, attrs, text ? [schema.text(text)] : undefined); -} - -function stateWithSelection(type, text, options = {}) { - const { attrs = null, from = text.length + 1, to = from } = options; - const doc = schema.node('doc', null, [textBlock(type, text, attrs)]); - - return EditorState.create({ - doc, - selection: TextSelection.create(doc, from, to), - plugins: [inputRulesPlugin, createCodeBlockInputScrollPlugin()], - }); -} - -function convertToCodeBlock(state, language = null, { inputRule = true } = {}) { - const codeBlock = textBlock('codeBlock', '', { language }); - const tr = state.tr.replaceWith(0, state.doc.content.size, codeBlock); - tr.setSelection(TextSelection.create(tr.doc, 1)); - if (inputRule) { - tr.setMeta(inputRulesPlugin, { - transform: tr, - from: state.selection.from, - to: state.selection.to, - text: '\n', - }); - } - - return state.applyTransaction(tr); -} - -function assertAppendedScroll(result) { - assert.equal(result.transactions.length, 2); - assert.equal(result.transactions[0].scrolledIntoView, false); - assert.equal(result.transactions[1].scrolledIntoView, true); - assert.equal(result.state.selection.$from.parent.type.name, 'codeBlock'); -} - -function assertNoAppendedScroll(result) { - assert.equal(result.transactions.length, 1); - assert.equal(result.transactions[0].scrolledIntoView, false); -} - -test('appends a scroll request for backtick and tilde input-rule transitions', () => { - assertAppendedScroll(convertToCodeBlock(stateWithSelection('paragraph', '```'))); - assertAppendedScroll(convertToCodeBlock(stateWithSelection('paragraph', '~~~rust'), 'rust')); -}); - -test('does not append a scroll request for non-fence paragraph conversions', () => { - assertNoAppendedScroll(convertToCodeBlock(stateWithSelection('paragraph', 'ordinary text'))); - assertNoAppendedScroll(convertToCodeBlock(stateWithSelection('paragraph', '```TypeScript'))); - assertNoAppendedScroll(convertToCodeBlock(stateWithSelection('paragraph', '````'))); -}); - -test('does not append a scroll request for toolbar conversions or note loads', () => { - assertNoAppendedScroll( - convertToCodeBlock(stateWithSelection('paragraph', '```'), null, { inputRule: false }) - ); - assertNoAppendedScroll( - convertToCodeBlock(stateWithSelection('paragraph', '~~~rust'), 'rust', { inputRule: false }) - ); -}); - -test('does not append a scroll request for a non-empty fence selection', () => { - const state = stateWithSelection('paragraph', '```', { from: 1, to: 4 }); - assertNoAppendedScroll(convertToCodeBlock(state)); -}); - -test('does not append a scroll request for a transaction already in a code block', () => { - const state = stateWithSelection('codeBlock', '```'); - const tr = state.tr.insertText('x'); - assertNoAppendedScroll(state.applyTransaction(tr)); -}); diff --git a/tests/editor-trash-placement.test.mjs b/tests/editor-trash-placement.test.mjs deleted file mode 100644 index 8223037..0000000 --- a/tests/editor-trash-placement.test.mjs +++ /dev/null @@ -1,27 +0,0 @@ -import assert from 'node:assert/strict'; -import { readFile } from 'node:fs/promises'; -import test from 'node:test'; - -const editor = await readFile( - new URL('../src/lib/components/Editor.svelte', import.meta.url), - 'utf8' -); - -test('Note Info owns the only open-note trash action', () => { - assert.doesNotMatch(editor, /editor-trash-btn/); - assert.match(editor, /class="info-trash-btn"[\s\S]{0,300}onclick=\{moveOpenNoteToTrash\}/); - assert.match(editor, /class="info-trash-btn"[\s\S]{0,500}Move to Trash/); - assert.equal(editor.match(/onclick=\{moveOpenNoteToTrash\}/g)?.length, 1); -}); - -test('Note Info hides the trash action when moving the note is unavailable', () => { - assert.match( - editor, - /\{#if onMoveToTrash && \$viewMode !== 'trash'\}[\s\S]{0,200}class="info-section info-actions"/ - ); -}); - -test('Note Info stays open when clicking another note', () => { - assert.doesNotMatch(editor, /onInfoClickAway/); - assert.match(editor, /class="info-close-btn" onclick=\{\(\) => showInfo = false\}/); -}); diff --git a/tests/mixed-lists.test.mjs b/tests/mixed-lists.test.mjs deleted file mode 100644 index eb071af..0000000 --- a/tests/mixed-lists.test.mjs +++ /dev/null @@ -1,80 +0,0 @@ -import assert from 'node:assert/strict'; -import { readFile } from 'node:fs/promises'; -import test from 'node:test'; -import { Schema } from '@tiptap/pm/model'; -import { transformWithEsbuild } from 'vite'; - -const source = await readFile( - new URL('../src/lib/editor/mixedLists.ts', import.meta.url), - 'utf8' -); -const { code } = await transformWithEsbuild(source, 'mixedLists.ts', { - loader: 'ts', - format: 'esm', - target: 'esnext' -}); -const { convertListNode } = await import( - `data:text/javascript;base64,${Buffer.from(code).toString('base64')}` -); - -const schema = new Schema({ - nodes: { - doc: { content: 'block+' }, - paragraph: { content: 'text*', group: 'block' }, - text: { group: 'inline' }, - bulletList: { content: 'listItem+', group: 'block' }, - listItem: { content: 'paragraph block*' }, - taskList: { content: 'taskItem+', group: 'block' }, - taskItem: { - attrs: { checked: { default: false } }, - content: 'paragraph block*' - } - } -}); - -function paragraph(text) { - return schema.node('paragraph', null, [schema.text(text)]); -} - -test('converts every task item in a list to a bullet item', () => { - const sourceList = schema.node('taskList', null, [ - schema.node('taskItem', { checked: true }, [paragraph('First')]), - schema.node('taskItem', { checked: false }, [paragraph('Second')]) - ]); - - const converted = convertListNode(schema, sourceList, 'bulletList'); - - assert.equal(converted.type.name, 'bulletList'); - assert.deepEqual( - converted.content.content.map((item) => item.type.name), - ['listItem', 'listItem'] - ); - assert.equal(converted.textContent, 'FirstSecond'); - assert.equal(sourceList.type.name, 'taskList'); -}); - -test('converts bullet items to unchecked tasks without dropping nested blocks', () => { - const nestedBullets = schema.node('bulletList', null, [ - schema.node('listItem', null, [paragraph('Nested note')]) - ]); - const sourceList = schema.node('bulletList', null, [ - schema.node('listItem', null, [paragraph('Parent'), nestedBullets]) - ]); - - const converted = convertListNode(schema, sourceList, 'taskList'); - const taskItem = converted.firstChild; - - assert.equal(converted.type.name, 'taskList'); - assert.equal(taskItem.type.name, 'taskItem'); - assert.equal(taskItem.attrs.checked, false); - assert.equal(taskItem.lastChild.type.name, 'bulletList'); - assert.equal(taskItem.textContent, 'ParentNested note'); -}); - -test('leaves a list alone when it already has the requested type', () => { - const bullets = schema.node('bulletList', null, [ - schema.node('listItem', null, [paragraph('Unchanged')]) - ]); - - assert.equal(convertListNode(schema, bullets, 'bulletList'), null); -}); diff --git a/tests/note-drag.test.mjs b/tests/note-drag.test.mjs deleted file mode 100644 index 8680412..0000000 --- a/tests/note-drag.test.mjs +++ /dev/null @@ -1,28 +0,0 @@ -import assert from 'node:assert/strict'; -import { readFile } from 'node:fs/promises'; -import test from 'node:test'; -import { transformWithEsbuild } from 'vite'; - -const source = await readFile( - new URL('../src/lib/utils/note-drag.ts', import.meta.url), - 'utf8' -); -const { code } = await transformWithEsbuild(source, 'note-drag.ts', { - loader: 'ts', - format: 'esm', - target: 'esnext' -}); -const noteDrag = await import(`data:text/javascript;base64,${Buffer.from(code).toString('base64')}`); - -test('round-trips every selected note path in a drag payload', () => { - const paths = ['/vault/Alpha.md', '/vault/Projects/Beta.md']; - assert.deepEqual(noteDrag.decodeNoteDragPaths(noteDrag.encodeNoteDragPaths(paths)), paths); -}); - -test('keeps single-note and Windows path payloads compatible', () => { - assert.deepEqual(noteDrag.decodeNoteDragPaths('/vault/Alpha.md'), ['/vault/Alpha.md']); - assert.deepEqual( - noteDrag.decodeNoteDragPaths('C:\\Vault\\Alpha.md\r\nC:\\Vault\\Beta.md'), - ['C:\\Vault\\Alpha.md', 'C:\\Vault\\Beta.md'] - ); -}); diff --git a/tests/note-link-paths.test.mjs b/tests/note-link-paths.test.mjs deleted file mode 100644 index 6c900eb..0000000 --- a/tests/note-link-paths.test.mjs +++ /dev/null @@ -1,117 +0,0 @@ -import assert from 'node:assert/strict'; -import { readFile } from 'node:fs/promises'; -import test from 'node:test'; -import { transformWithEsbuild } from 'vite'; - -const source = await readFile( - new URL('../src/lib/utils/paths.ts', import.meta.url), - 'utf8' -); -const { code } = await transformWithEsbuild(source, 'paths.ts', { - loader: 'ts', - format: 'esm', - target: 'esnext' -}); -const { - assetSourceToMarkdown, - assetUrlToLocalPath, - normalizeLocalAssetPath, - resolvePathFromFile, - resolveVaultFilePath -} = await import( - `data:text/javascript;base64,${Buffer.from(code).toString('base64')}` -); - -test('resolves note links relative to Windows note paths', () => { - assert.equal( - resolvePathFromFile('C:\\Vault\\Current.md', './Target.md'), - 'C:/Vault/Target.md' - ); - assert.equal( - resolvePathFromFile('C:\\Vault\\Folder\\Current.md', '../Target.md'), - 'C:/Vault/Target.md' - ); - assert.equal( - resolvePathFromFile('\\\\server\\share\\Folder\\Current.md', '../Target.md'), - '//server/share/Target.md' - ); -}); - -test('preserves Linux relative note-link resolution', () => { - assert.equal( - resolvePathFromFile('/vault/folder/Current.md', '../Target.md'), - '/vault/Target.md' - ); -}); - -test('converts Windows asset URLs back to portable attachment paths', () => { - assert.equal( - normalizeLocalAssetPath('/C:\\Users\\user\\Vault\\image.png'), - 'C:/Users/user/Vault/image.png' - ); - assert.equal( - assetSourceToMarkdown( - 'http://asset.localhost/C%3A%5CUsers%5Cuser%5CVault%5C.helixnotes%5Cattachments%5Cimage.png', - 'C:\\Users\\user\\Vault\\Note.md', - 'C:\\Users\\user\\Vault' - ), - '.helixnotes/attachments/image.png' - ); -}); - -test('preserves portable asset paths on Linux and macOS', () => { - assert.equal( - assetSourceToMarkdown( - 'asset://localhost/%2Fhome%2Fuser%2FVault%2F.helixnotes%2Fattachments%2Fimage.png', - '/home/user/Vault/Note.md', - '/home/user/Vault' - ), - '.helixnotes/attachments/image.png' - ); - assert.equal( - assetSourceToMarkdown( - 'asset://localhost/%2FUsers%2Fuser%2FVault%2Fassets%2Fimage.png', - '/Users/user/Vault/notes/Note.md', - '/Users/user/Vault' - ), - '../assets/image.png' - ); - assert.equal( - assetSourceToMarkdown('../assets/image.png', '/vault/notes/Note.md', '/vault'), - '../assets/image.png' - ); -}); - -test('decodes local asset URLs without damaging platform roots', () => { - assert.equal( - assetUrlToLocalPath('http://asset.localhost/C%3A%5CUsers%5Cuser%5CVault%5Cimage.png'), - 'C:/Users/user/Vault/image.png' - ); - assert.equal( - assetUrlToLocalPath('asset://localhost/%2Fhome%2Fuser%2FVault%2Fimage.png'), - '/home/user/Vault/image.png' - ); - assert.equal( - assetUrlToLocalPath('http://asset.localhost/%5C%5Cserver%5Cshare%5CVault%5Cimage.png'), - '//server/share/Vault/image.png' - ); -}); - -test('resolves vault files consistently across platforms', () => { - assert.equal( - resolveVaultFilePath('../assets/image.png', 'C:\\Vault\\notes\\Note.md', 'C:\\Vault'), - 'C:/Vault/assets/image.png' - ); - assert.equal( - resolveVaultFilePath('.helixnotes/attachments/image.png', 'C:\\Vault\\notes\\Note.md', 'C:\\Vault'), - 'C:/Vault/.helixnotes/attachments/image.png' - ); - assert.equal( - resolveVaultFilePath('../assets/image.png', '/vault/notes/Note.md', '/vault'), - '/vault/assets/image.png' - ); - assert.equal( - resolveVaultFilePath('../assets/image.png', '\\\\server\\share\\Vault\\notes\\Note.md', '\\\\server\\share\\Vault'), - '//server/share/Vault/assets/image.png' - ); -}); diff --git a/tests/note-switcher.test.mjs b/tests/note-switcher.test.mjs deleted file mode 100644 index 7e87551..0000000 --- a/tests/note-switcher.test.mjs +++ /dev/null @@ -1,120 +0,0 @@ -import assert from 'node:assert/strict'; -import { readFile } from 'node:fs/promises'; -import test from 'node:test'; -import { transformWithEsbuild } from 'vite'; - -const source = await readFile( - new URL('../src/lib/utils/note-switcher.ts', import.meta.url), - 'utf8' -); -const { code } = await transformWithEsbuild(source, 'note-switcher.ts', { - loader: 'ts', - format: 'esm', - target: 'esnext' -}); -const { buildNoteSwitcherRequestPaths, buildNoteSwitcherSections } = await import( - `data:text/javascript;base64,${Buffer.from(code).toString('base64')}` -); - -const note = (path, title, relativePath) => ({ path, title, relativePath }); - -test('requests the current note first, then unique history from newest to oldest', () => { - const current = '/vault/Current.md'; - const recent = '/vault/Recent.md'; - const older = '/vault/Older.md'; - - assert.deepEqual( - buildNoteSwitcherRequestPaths(current, [older, recent, recent, current]), - [current, recent, older] - ); -}); - -test('puts the current note first, then unique history from newest to oldest up to the recent limit', () => { - const current = note('/vault/Current.md', 'Current', 'Current.md'); - const alpha = note('/vault/Projects/Alpha.md', 'Alpha', 'Projects/Alpha.md'); - const beta = note('/vault/Projects/Beta.md', 'Beta', 'Projects/Beta.md'); - - const sections = buildNoteSwitcherSections({ - currentPath: current.path, - historyPaths: [beta.path, alpha.path, alpha.path, current.path], - knownNotes: [current, alpha, beta], - quickAccessNotes: [], - recentLimit: 3 - }); - - assert.deepEqual(sections.recent, [ - { path: current.path, title: 'Current', folder: 'Unfiled', current: true }, - { path: alpha.path, title: 'Alpha', folder: 'Projects', current: false }, - { path: beta.path, title: 'Beta', folder: 'Projects', current: false } - ]); -}); - -test('excludes stale, unknown, and external paths that are absent from the known-note inventory', () => { - const current = note('/vault/Current.md', 'Current', 'Current.md'); - const known = note('/vault/Notes/Known.md', 'Known', 'Notes/Known.md'); - - const sections = buildNoteSwitcherSections({ - currentPath: current.path, - historyPaths: [ - '/vault/Deleted.md', - known.path, - '/home/user/Downloads/External.md' - ], - knownNotes: [current, known], - quickAccessNotes: [ - note('/vault/Missing-Quick.md', 'Missing Quick', 'Missing-Quick.md'), - note('/home/user/Downloads/Pinned.md', 'External Quick', 'Pinned.md') - ] - }); - - assert.deepEqual(sections, { - recent: [ - { path: current.path, title: 'Current', folder: 'Unfiled', current: true }, - { path: known.path, title: 'Known', folder: 'Notes', current: false } - ], - quickAccess: [] - }); -}); - -test('keeps Quick Access order, removes Recent overlap, and derives root and nested folder labels', () => { - const root = note('/vault/Root.md', 'Root', 'Root.md'); - const recentNested = note( - '/vault/Projects/Helix/Plan.md', - 'Plan', - 'Projects/Helix/Plan.md' - ); - const quickRoot = note('/vault/Scratch.md', 'Scratch', 'Scratch.md'); - const quickNested = note( - '/vault/Areas/Reading/Queue.md', - 'Reading Queue', - 'Areas/Reading/Queue.md' - ); - - const sections = buildNoteSwitcherSections({ - currentPath: root.path, - historyPaths: [recentNested.path], - knownNotes: [root, recentNested, quickRoot, quickNested], - quickAccessNotes: [quickRoot, root, quickNested, recentNested] - }); - - assert.deepEqual(sections, { - recent: [ - { path: root.path, title: 'Root', folder: 'Unfiled', current: true }, - { - path: recentNested.path, - title: 'Plan', - folder: 'Projects/Helix', - current: false - } - ], - quickAccess: [ - { path: quickRoot.path, title: 'Scratch', folder: 'Unfiled', current: false }, - { - path: quickNested.path, - title: 'Reading Queue', - folder: 'Areas/Reading', - current: false - } - ] - }); -}); diff --git a/tests/notebook-icons.test.mjs b/tests/notebook-icons.test.mjs deleted file mode 100644 index 2c7d688..0000000 --- a/tests/notebook-icons.test.mjs +++ /dev/null @@ -1,33 +0,0 @@ -import assert from 'node:assert/strict'; -import test from 'node:test'; - -const source = await import(new URL('../src/lib/utils/notebook-icons.ts', import.meta.url)); - -const { - NOTEBOOK_ICON_OPTIONS, - decodeBuiltinNotebookIcon, - encodeBuiltinNotebookIcon, - normalizeNotebookIconKey -} = source; - -test('built-in notebook icons have stable unique storage values', () => { - assert.equal(NOTEBOOK_ICON_OPTIONS.length, 16); - assert.equal(new Set(NOTEBOOK_ICON_OPTIONS.map(({ id }) => id)).size, NOTEBOOK_ICON_OPTIONS.length); - - for (const { id } of NOTEBOOK_ICON_OPTIONS) { - const stored = encodeBuiltinNotebookIcon(id); - assert.equal(stored, `builtin:${id}`); - assert.equal(decodeBuiltinNotebookIcon(stored), id); - } -}); - -test('custom paths and unknown built-in values remain outside the icon codec', () => { - assert.equal(decodeBuiltinNotebookIcon('.helixnotes/attachments/notebook-icon.png'), null); - assert.equal(decodeBuiltinNotebookIcon('builtin:unknown'), null); - assert.equal(decodeBuiltinNotebookIcon(null), null); -}); - -test('normalizes notebook icon keys to portable vault-relative paths', () => { - assert.equal(normalizeNotebookIconKey('Projects/Client'), 'Projects/Client'); - assert.equal(normalizeNotebookIconKey(String.raw`Projects\Client`), 'Projects/Client'); -}); diff --git a/tests/sidebar-mobile-actions.test.mjs b/tests/sidebar-mobile-actions.test.mjs deleted file mode 100644 index 342839e..0000000 --- a/tests/sidebar-mobile-actions.test.mjs +++ /dev/null @@ -1,31 +0,0 @@ -import assert from 'node:assert/strict'; -import { readFile } from 'node:fs/promises'; -import test from 'node:test'; - -const sidebar = await readFile( - new URL('../src/lib/components/Sidebar.svelte', import.meta.url), - 'utf8' -); - -test('mobile notebook rows expose an accessible actions button', () => { - assert.match(sidebar, /\{#if isMobile\}[\s\S]{0,500}class="notebook-actions-btn"/); - assert.match(sidebar, /aria-label=\{`Actions for \$\{nb\.name\}`\}/); - assert.match(sidebar, /onclick=\{\(e\) => openNotebookMenu\(e, nb\)\}/); -}); - -test('the notebook context menu receives its mobile styling outside the sidebar', () => { - assert.match(sidebar, /class="context-menu" class:mobile=\{isMobile\}/); - assert.match(sidebar, /\.context-menu\.mobile\s*\{/); -}); - -test('mobile action sheets stay inside every safe area and prevent tap-through', () => { - assert.match(sidebar, /class="context-menu-backdrop"/); - assert.match(sidebar, /safe-area-inset-left/); - assert.match(sidebar, /safe-area-inset-right/); - assert.match(sidebar, /safe-area-inset-top/); - assert.match(sidebar, /safe-area-inset-bottom/); -}); - -test('the actions button remains inside the notebook manual-sort drop target', () => { - assert.match(sidebar, /
/); -}); diff --git a/tests/startup-view.test.mjs b/tests/startup-view.test.mjs deleted file mode 100644 index 0e69fac..0000000 --- a/tests/startup-view.test.mjs +++ /dev/null @@ -1,60 +0,0 @@ -import assert from 'node:assert/strict'; -import { readFile } from 'node:fs/promises'; -import test from 'node:test'; -import { transformWithEsbuild } from 'vite'; - -const source = await readFile( - new URL('../src/lib/utils/startup-view.ts', import.meta.url), - 'utf8' -); -const { code } = await transformWithEsbuild(source, 'startup-view.ts', { - loader: 'ts', - format: 'esm', - target: 'esnext' -}); -const startup = await import(`data:text/javascript;base64,${Buffer.from(code).toString('base64')}`); - -test('normalizes every supported default view and falls back to All Notes', () => { - for (const view of ['all', 'quickaccess', 'tasks', 'daily']) { - assert.equal(startup.normalizeStartupView(view), view); - } - assert.equal(startup.normalizeStartupView('notebook'), 'all'); - assert.equal(startup.normalizeStartupView(undefined), 'all'); -}); - -test('uses the configured default when session restoration is disabled', () => { - assert.deepEqual(startup.resolveStartupTarget({ - startupView: 'tasks', - restoreLastSession: false, - lastViewMode: 'daily', - lastNotebook: null, - lastTag: null - }), { mode: 'tasks' }); -}); - -test('restores a supported previous list when restoration is enabled', () => { - assert.deepEqual(startup.resolveStartupTarget({ - startupView: 'daily', - restoreLastSession: true, - lastViewMode: 'quickaccess', - lastNotebook: null, - lastTag: null - }), { mode: 'quickaccess' }); -}); - -test('restores notebook and tag identifiers, otherwise uses the configured default', () => { - assert.deepEqual(startup.resolveStartupTarget({ - startupView: 'all', - restoreLastSession: true, - lastViewMode: 'notebook', - lastNotebook: 'Projects', - lastTag: null - }), { mode: 'notebook', notebookPath: 'Projects' }); - assert.deepEqual(startup.resolveStartupTarget({ - startupView: 'tasks', - restoreLastSession: true, - lastViewMode: 'tag', - lastNotebook: null, - lastTag: null - }), { mode: 'tasks' }); -}); diff --git a/tests/system-theme-pair.test.mjs b/tests/system-theme-pair.test.mjs deleted file mode 100644 index e1be773..0000000 --- a/tests/system-theme-pair.test.mjs +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'node:assert/strict'; -import { readFile } from 'node:fs/promises'; -import test from 'node:test'; - -const appLayout = await readFile( - new URL('../src/lib/components/AppLayout.svelte', import.meta.url), - 'utf8' -); - -test('the theme shortcut recognizes a resolved custom dark theme', () => { - assert.match( - appLayout, - /\$customThemes\.find\(theme => theme\.id === \$resolvedTheme\)/ - ); - assert.match( - appLayout, - /darkThemes\.includes\(\$resolvedTheme\) \|\| \(customTheme\?\.is_dark \?\? false\)/ - ); -}); - -test('AppLayout leaves root theme application to the root layout', () => { - assert.doesNotMatch(appLayout, /function applyTheme\(/); - assert.doesNotMatch(appLayout, /applyTheme\(\$theme\)/); -});