diff --git a/.claude/settings.local.json b/.claude/settings.local.json
new file mode 100644
index 0000000..4bd258a
--- /dev/null
+++ b/.claude/settings.local.json
@@ -0,0 +1,13 @@
+{
+ "permissions": {
+ "allow": [
+ "Bash(fuser -k 1420/tcp)",
+ "Bash(pkill -f \"code-editor\")",
+ "Bash(cargo check:*)",
+ "Bash(npx tsc:*)",
+ "Bash(pnpm tauri:*)",
+ "Bash(ls -lh \"/home/luna/Desktop/code editor/src-tauri/target/release/bundle/deb/\"*.deb)",
+ "Bash(ls -lh \"/home/luna/Desktop/code editor/src-tauri/target/release/bundle/rpm/\"*.rpm)"
+ ]
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..24d7cc6
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+ "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"]
+}
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 0000000..4e53698
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,29 @@
+pkgname=lunar-code
+pkgver=0.1.0
+pkgrel=1
+pkgdesc="Lunar Code - A lightweight code editor"
+arch=('x86_64')
+url="https://github.com/luna/lunar-code"
+license=('MIT')
+depends=('webkit2gtk-4.1' 'gtk3' 'cairo' 'glib2' 'hicolor-icon-theme')
+provides=('lunar-code')
+
+package() {
+ install -Dm755 "${srcdir}/../src-tauri/target/release/lunar-code" "${pkgdir}/usr/bin/lunar-code"
+
+ install -Dm644 /dev/stdin "${pkgdir}/usr/share/applications/lunar-code.desktop" << 'EOF'
+[Desktop Entry]
+Name=Lunar Code
+Comment=A lightweight code editor
+Exec=lunar-code %F
+Icon=lunar-code
+Terminal=false
+Type=Application
+Categories=Development;TextEditor;IDE;
+Keywords=code;editor;programming;
+MimeType=text/plain;text/x-csrc;text/x-c++src;text/x-java;text/x-python;text/javascript;application/json;text/html;text/css;text/xml;text/x-rust;
+EOF
+
+ # Use a generic icon for now
+ install -Dm644 /dev/stdin "${pkgdir}/usr/share/icons/hicolor/256x256/apps/lunar-code.png" < "${srcdir}/../src-tauri/icons/128x128@2x.png" 2>/dev/null || true
+}
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..7af21df
--- /dev/null
+++ b/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ Lunar Code
+
+
+
+
+
+
+
diff --git a/lunar-code-0.1.0-1-x86_64.pkg.tar.zst b/lunar-code-0.1.0-1-x86_64.pkg.tar.zst
new file mode 100644
index 0000000..deb94d1
Binary files /dev/null and b/lunar-code-0.1.0-1-x86_64.pkg.tar.zst differ
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..5b314ab
--- /dev/null
+++ b/package.json
@@ -0,0 +1,83 @@
+{
+ "name": "lunar-code",
+ "private": true,
+ "version": "0.1.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc && vite build",
+ "preview": "vite preview",
+ "tauri": "tauri"
+ },
+ "dependencies": {
+ "@babel/runtime": "^7.29.2",
+ "@codemirror/autocomplete": "^6.20.1",
+ "@codemirror/commands": "^6.10.3",
+ "@codemirror/lang-cpp": "^6.0.3",
+ "@codemirror/lang-css": "^6.3.1",
+ "@codemirror/lang-go": "^6.0.1",
+ "@codemirror/lang-html": "^6.4.11",
+ "@codemirror/lang-java": "^6.0.2",
+ "@codemirror/lang-javascript": "^6.2.5",
+ "@codemirror/lang-json": "^6.0.2",
+ "@codemirror/lang-markdown": "^6.5.0",
+ "@codemirror/lang-php": "^6.0.2",
+ "@codemirror/lang-python": "^6.2.1",
+ "@codemirror/lang-rust": "^6.0.2",
+ "@codemirror/lang-sql": "^6.10.0",
+ "@codemirror/lang-xml": "^6.1.0",
+ "@codemirror/lang-yaml": "^6.1.3",
+ "@codemirror/language": "^6.12.3",
+ "@codemirror/legacy-modes": "^6.5.2",
+ "@codemirror/lint": "^6.9.5",
+ "@codemirror/search": "^6.6.0",
+ "@codemirror/state": "^6.6.0",
+ "@codemirror/view": "^6.41.0",
+ "@radix-ui/react-collapsible": "^1.1.12",
+ "@radix-ui/react-context-menu": "^2.2.16",
+ "@radix-ui/react-dialog": "^1.1.15",
+ "@radix-ui/react-dropdown-menu": "^2.1.16",
+ "@radix-ui/react-menubar": "^1.1.16",
+ "@radix-ui/react-scroll-area": "^1.2.10",
+ "@radix-ui/react-select": "^2.2.6",
+ "@radix-ui/react-separator": "^1.1.8",
+ "@radix-ui/react-slot": "^1.2.4",
+ "@radix-ui/react-tabs": "^1.1.13",
+ "@radix-ui/react-tooltip": "^1.2.8",
+ "@radix-ui/react-visually-hidden": "^1.2.4",
+ "@tailwindcss/vite": "^4.2.2",
+ "@tauri-apps/api": "^2",
+ "@tauri-apps/plugin-dialog": "^2.6.0",
+ "@tauri-apps/plugin-fs": "^2.4.5",
+ "@tauri-apps/plugin-opener": "^2",
+ "@tauri-apps/plugin-shell": "^2.3.5",
+ "@uiw/codemirror-theme-vscode": "^4.25.9",
+ "@xterm/addon-fit": "^0.11.0",
+ "@xterm/addon-web-links": "^0.12.0",
+ "@xterm/xterm": "^6.0.0",
+ "class-variance-authority": "^0.7.1",
+ "clsx": "^2.1.1",
+ "cmdk": "^1.1.1",
+ "lucide-react": "^1.7.0",
+ "react": "^19.1.0",
+ "react-dom": "^19.1.0",
+ "react-resizable-panels": "^4.9.0",
+ "sonner": "^2.0.7",
+ "tailwind-merge": "^3.5.0",
+ "tailwindcss": "^4.2.2"
+ },
+ "devDependencies": {
+ "@tauri-apps/cli": "^2",
+ "@types/react": "^19.1.8",
+ "@types/react-dom": "^19.1.6",
+ "@vitejs/plugin-react": "^4.6.0",
+ "typescript": "~5.8.3",
+ "vite": "^7.0.4"
+ },
+ "pnpm": {
+ "onlyBuiltDependencies": [
+ "esbuild",
+ "@tailwindcss/oxide"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/package.json.tmp b/package.json.tmp
new file mode 100644
index 0000000..1560bd4
--- /dev/null
+++ b/package.json.tmp
@@ -0,0 +1 @@
+{"pnpm":{"executionEnv":{"nodeVersion":"22"},"onlyBuiltDependencies":["esbuild","@tailwindcss/oxide"]}}
diff --git a/pkg/lunar-code/.BUILDINFO b/pkg/lunar-code/.BUILDINFO
new file mode 100644
index 0000000..7dc0145
--- /dev/null
+++ b/pkg/lunar-code/.BUILDINFO
@@ -0,0 +1,1528 @@
+format = 2
+pkgname = lunar-code
+pkgbase = lunar-code
+pkgver = 0.1.0-1
+pkgarch = x86_64
+pkgbuild_sha256sum = 717bd2cbaaa026c1698c4750132bd63ee7819f82d6f266cb000547ea2640631a
+packager = Unknown Packager
+builddate = 1775255169
+builddir = /home/luna/Desktop/code editor
+startdir = /home/luna/Desktop/code editor
+buildtool = makepkg
+buildtoolver = 7.1.0
+buildenv = !distcc
+buildenv = color
+buildenv = !ccache
+buildenv = check
+buildenv = !sign
+options = strip
+options = docs
+options = !libtool
+options = !staticlibs
+options = emptydirs
+options = zipman
+options = purge
+options = !debug
+options = lto
+options = !autodeps
+installed = a52dec-0.8.0-3.1-x86_64_v3
+installed = aalib-1.4rc5-19.1-x86_64_v3
+installed = abseil-cpp-20260107.1-1.1-x86_64_v3
+installed = accounts-qml-module-0.7-6.1-x86_64
+installed = accountsservice-26.12.8-1.1-x86_64_v3
+installed = acl-2.3.2-1.1-x86_64
+installed = ada-3.4.4-1.1-x86_64_v3
+installed = adwaita-cursors-49.0-1-any
+installed = adwaita-fonts-50.0-1-any
+installed = adwaita-icon-theme-49.0-1-any
+installed = adwaita-icon-theme-legacy-46.2-3-any
+installed = aha-0.5.1-3.1-x86_64
+installed = alacritty-0.16.1-1.1-x86_64_v3
+installed = alsa-card-profiles-1:1.6.2-1.1-x86_64_v3
+installed = alsa-firmware-1.2.4-4-any
+installed = alsa-lib-1.2.15.3-2.1-x86_64_v3
+installed = alsa-plugins-1:1.2.12-5.1-x86_64_v3
+installed = alsa-topology-conf-1.2.5.1-4-any
+installed = alsa-ucm-conf-1.2.15.3-1-any
+installed = alsa-utils-1.2.15.2-2.1-x86_64_v3
+installed = amd-ucode-1:20260309-1-any
+installed = ananicy-cpp-1.2.0-1.1-x86_64_v3
+installed = aom-3.13.2-1.1-x86_64_v3
+installed = appmenu-gtk-module-25.04-3.1-x86_64_v3
+installed = appstream-1.1.2-1.1-x86_64_v3
+installed = appstream-qt-1.1.2-1.1-x86_64_v3
+installed = aquamarine-0.10.0-4.1-x86_64_v3
+installed = archlinux-appstream-data-20260326-1-any
+installed = archlinux-contrib-20251215-1-any
+installed = archlinux-keyring-20260301-2-any
+installed = argon2-20190702-6.2-x86_64_v3
+installed = aribb24-1.0.3-4.1-x86_64
+installed = aribb25-0.2.7-3.1-x86_64
+installed = ark-25.12.3-1.1-x86_64_v3
+installed = at-spi2-core-2.58.4-1.1-x86_64_v3
+installed = atkmm-2.28.4-1.1-x86_64
+installed = attica-6.24.0-2.1-x86_64_v3
+installed = attr-2.5.2-1.1-x86_64
+installed = audit-4.1.4-2.1-x86_64_v3
+installed = aurorae-6.6.3-1.1-x86_64_v3
+installed = autoconf-2.73-1-any
+installed = automake-1.18.1-1-any
+installed = avahi-1:0.9rc3-1.1-x86_64_v3
+installed = awesome-terminal-fonts-1.1.0-5-any
+installed = awww-0.12.0-1.1-x86_64_v3
+installed = ayatana-ido-0.10.4-1.1-x86_64
+installed = baloo-6.24.0-2.1-x86_64_v3
+installed = baloo-widgets-25.12.3-1.1-x86_64_v3
+installed = base-3-3-any
+installed = base-devel-1-2-any
+installed = bash-5.3.9-2-x86_64_v3
+installed = bash-completion-2.17.0-3-any
+installed = bat-0.26.1-2.1-x86_64_v3
+installed = bind-9.20.21-1.1-x86_64_v3
+installed = binutils-2.46-2-x86_64_v3
+installed = bison-3.8.2-8.1-x86_64
+installed = blas-3.12.1-2.1-x86_64_v3
+installed = bluedevil-1:6.6.3-1.1-x86_64_v3
+installed = bluez-5.86-4.1-x86_64_v3
+installed = bluez-hid2hci-5.86-4.1-x86_64_v3
+installed = bluez-libs-5.86-4.1-x86_64_v3
+installed = bluez-obex-5.86-4.1-x86_64_v3
+installed = bluez-qt-6.24.0-2.1-x86_64_v3
+installed = bluez-utils-5.86-4.1-x86_64_v3
+installed = bolt-0.9.10-1.1-x86_64_v3
+installed = botan-3.11.0-2.1-x86_64_v3
+installed = bpf-6.19.10-1-x86_64
+installed = breeze-6.6.3-1.1-x86_64_v3
+installed = breeze-cursors-6.6.3-1.1-x86_64_v3
+installed = breeze-gtk-6.6.3-1-any
+installed = breeze-icons-6.24.0-1.1-x86_64_v3
+installed = brightnessctl-0.5.1-3-x86_64
+installed = brltty-6.9-3.1-x86_64_v3
+installed = brotli-1.2.0-1.1-x86_64_v3
+installed = btop-1.4.6-2.1-x86_64_v3
+installed = btrfs-progs-6.19.1-1-x86_64
+installed = bubblewrap-0.11.1-1.1-x86_64_v3
+installed = bzip2-1.0.8-6.1-x86_64
+installed = c-ares-1.34.6-1.1-x86_64_v3
+installed = ca-certificates-20240618-1-any
+installed = ca-certificates-mozilla-3.122-1.1-x86_64_v3
+installed = ca-certificates-utils-20240618-1-any
+installed = cachy-update-3.19.0-1-any
+installed = cachyos-alacritty-config-1.0-1-any
+installed = cachyos-ananicy-rules-1:1.1.32-1-any
+installed = cachyos-emerald-kde-theme-git-r25.d61d1dd-1-any
+installed = cachyos-fish-config-15-1-any
+installed = cachyos-grub-theme-1.0.0-1-any
+installed = cachyos-hello-0.22.2-1.1-x86_64
+installed = cachyos-hooks-2026.02.05-1-any
+installed = cachyos-iridescent-kde-r2.16aa352-1-any
+installed = cachyos-kde-settings-4.9-8-any
+installed = cachyos-kernel-manager-1.17.0-1-x86_64
+installed = cachyos-keyring-20240331-1-any
+installed = cachyos-micro-settings-1.0.0-1-any
+installed = cachyos-mirrorlist-22-1-any
+installed = cachyos-nord-kde-theme-git-r16.d75759c-1-any
+installed = cachyos-packageinstaller-1.6.2-1-x86_64
+installed = cachyos-plymouth-bootanimation-2-3-any
+installed = cachyos-rate-mirrors-21-1-any
+installed = cachyos-settings-1:1.3.4-1-any
+installed = cachyos-themes-sddm-1.0-3-any
+installed = cachyos-v3-mirrorlist-22-1-any
+installed = cachyos-v4-mirrorlist-22-1-any
+installed = cachyos-wallpapers-r23.964263e-1-any
+installed = cachyos-zsh-config-1.0.3-1-any
+installed = cairo-1.18.4-1.1-x86_64_v3
+installed = cairomm-1.14.5-3.1-x86_64_v3
+installed = cantarell-fonts-1:0.311-1-any
+installed = capitaine-cursors-4-3-any
+installed = cblas-3.12.1-2.1-x86_64_v3
+installed = cdparanoia-10.2-9.1-x86_64
+installed = cfitsio-1:4.6.3-1.1-x86_64_v3
+installed = char-white-r3.ef1c007-1-any
+installed = chromaprint-1.6.0-3.1-x86_64_v3
+installed = chwd-1.20.1-1-x86_64
+installed = cifs-utils-7.5-1.1-x86_64_v3
+installed = clang-22.1.2-2-x86_64_v3
+installed = clinfo-3.0.23.01.25-1.1-x86_64
+installed = cliphist-1:0.7.0-2.1-x86_64_v3
+installed = cmake-4.3.1-1.1-x86_64_v3
+installed = commet-bin-0.4.1-2-x86_64
+installed = compiler-rt-22.1.2-1.1-x86_64_v3
+installed = composefs-1.0.8-1.1-x86_64_v3
+installed = confuse-3.3-4.1-x86_64
+installed = convertlit-1.8-13.1-x86_64_v3
+installed = coreutils-9.10-1.1-x86_64_v3
+installed = cppdap-1.58.0-3.1-x86_64_v3
+installed = cpupower-6.19.10-1-x86_64
+installed = cryptsetup-2.8.4-1.1-x86_64_v3
+installed = cups-2:2.4.16-2-x86_64
+installed = cups-filters-2.0.1-2.1-x86_64_v3
+installed = cups-pdf-3.0.2-1.6-x86_64_v3
+installed = curl-8.19.0-1.1-x86_64_v3
+installed = cython-3.2.4-3.1-x86_64_v3
+installed = dart-3.11.4-1.1-x86_64_v3
+installed = dav1d-1.5.3-1.1-x86_64_v3
+installed = db-6.2.32-4.1-x86_64_v3
+installed = db5.3-5.3.28-7.1-x86_64_v3
+installed = dbus-1.16.2-1.1-x86_64_v3
+installed = dbus-broker-37-3.1-x86_64_v3
+installed = dbus-broker-units-37-3.1-x86_64_v3
+installed = dbus-glib-0.114-1.1-x86_64_v3
+installed = dbus-units-37-3.1-x86_64_v3
+installed = dconf-0.49.0-1.1-x86_64_v3
+installed = ddcutil-2.2.6-1.1-x86_64_v3
+installed = debugedit-5.2-1.1-x86_64_v3
+installed = default-cursors-3-1-any
+installed = deno-2.7.9-1.1-x86_64_v3
+installed = desktop-file-utils-0.28-1.1-x86_64
+installed = device-mapper-2.03.39-1.1-x86_64_v3
+installed = diffutils-3.12-2.1-x86_64_v3
+installed = ding-libs-0.6.2-2.1-x86_64
+installed = discord-1:0.0.129-1-x86_64
+installed = discount-3.0.1.2-1.1-x86_64_v3
+installed = discover-6.6.3-1.1-x86_64_v3
+installed = dmidecode-3.7-1-x86_64
+installed = dmraid-1.0.0.rc16.3-15.1-x86_64
+installed = dnsmasq-2.92-1.1-x86_64_v3
+installed = dnssec-anchors-20250524-1-any
+installed = dolphin-25.12.3-1.1-x86_64_v3
+installed = dosfstools-4.2-5.1-x86_64
+installed = dotconf-1.4.1-1.2-x86_64_v3
+installed = double-conversion-3.4.0-1.1-x86_64_v3
+installed = duf-0.9.1-1.1-x86_64_v3
+installed = duktape-2.7.0-7.1-x86_64
+installed = dunst-1.13.2-1.1-x86_64_v3
+installed = e2fsprogs-1.47.4-1.1-x86_64_v3
+installed = easyeffects-8.1.8-1.1-x86_64_v3
+installed = ebook-tools-0.2.2-9.1-x86_64_v3
+installed = editorconfig-core-c-0.12.10-1.1-x86_64_v3
+installed = efibootmgr-18-3.1-x86_64
+installed = efitools-1.9.2-7.1-x86_64_v3
+installed = efivar-39-1.1-x86_64
+installed = ell-0.83-1.1-x86_64_v3
+installed = enchant-2.8.15-2.1-x86_64_v3
+installed = espeak-ng-1.52.0-1.1-x86_64
+installed = ethtool-1:6.19-1.1-x86_64_v3
+installed = exfatprogs-1.3.2-1.1-x86_64_v3
+installed = exiv2-0.28.8-2.1-x86_64_v3
+installed = expac-10-12.2-x86_64_v3
+installed = expat-2.7.5-1.1-x86_64_v3
+installed = eza-0.23.4-3.1-x86_64_v3
+installed = f2fs-tools-1.16.0-3.1-x86_64
+installed = faac-1.40-1.1-x86_64_v3
+installed = faad2-2.11.2-1.2-x86_64_v3
+installed = fakeroot-1.37.2-1.1-x86_64_v3
+installed = fastfetch-2.61.0-1.1-x86_64_v3
+installed = fd-10.4.2-1.1-x86_64_v3
+installed = ffmpeg-2:8.1-3.1-x86_64_v3
+installed = ffmpeg4.4-4.4.6-5.1-x86_64_v3
+installed = ffmpegthumbnailer-2.3.0-1.1-x86_64_v3
+installed = ffmpegthumbs-25.12.3-1.1-x86_64_v3
+installed = fftw-3.3.10-8.1-x86_64_v3
+installed = file-5.47-2.1-x86_64_v3
+installed = filelight-25.12.3-1.1-x86_64_v3
+installed = filesystem-2025.10.12-1-any
+installed = findutils-4.10.0-3.1-x86_64_v3
+installed = firefox-149.0-1.1-x86_64_v3
+installed = fish-4.5.0-2-x86_64
+installed = fish-autopair-1.0.4-2-any
+installed = fish-pure-prompt-4.16.0-1-any
+installed = fisher-4.4.8-1-any
+installed = flac-1.5.0-1.2-x86_64_v3
+installed = flashrom-1.7.0-1.1-x86_64_v3
+installed = flatpak-1:1.16.3-1.1-x86_64_v3
+installed = flex-2.6.4-5.1-x86_64
+installed = fluidsynth-2.5.3-2.1-x86_64_v3
+installed = fmt-12.1.0-2.1-x86_64_v3
+installed = fontconfig-2:2.17.1-1.1-x86_64_v3
+installed = foomatic-db-3:20260209-1-any
+installed = foomatic-db-engine-5:20200131-2.1-x86_64_v3
+installed = foomatic-db-gutenprint-ppds-5.3.5-1.1-x86_64_v3
+installed = foomatic-db-nonfree-3:20260209-1-any
+installed = foomatic-db-nonfree-ppds-3:20260209-1-any
+installed = foomatic-db-ppds-3:20260209-1-any
+installed = frameworkintegration-6.24.0-2.1-x86_64_v3
+installed = freeglut-3.8.0-1.1-x86_64_v3
+installed = freetype2-2.14.3-1.1-x86_64_v3
+installed = fribidi-1.0.16-2.1-x86_64_v3
+installed = fsarchiver-0.8.9-1.1-x86_64_v3
+installed = ftgl-2.4.0-3.1-x86_64
+installed = fuse-common-3.18.2-1.1-x86_64_v3
+installed = fuse2-2.9.9-5-x86_64
+installed = fuse3-3.18.2-1.1-x86_64_v3
+installed = fwupd-2.1.1-3.1-x86_64_v3
+installed = fwupd-efi-1.8-2-any
+installed = fzf-0.70.0-1.1-x86_64_v3
+installed = gawk-5.4.0-1.1-x86_64_v3
+installed = gc-8.2.12-1.1-x86_64_v3
+installed = gcc-15.2.1+r604+g0b99615a8aef-2-x86_64_v3
+installed = gcc-libs-15.2.1+r604+g0b99615a8aef-2-x86_64_v3
+installed = gcr-4-4.4.0.1-1.1-x86_64_v3
+installed = gdbm-1.26-2.1-x86_64_v3
+installed = gdk-pixbuf2-2.44.4-1.1-x86_64_v3
+installed = gettext-1.0-2.1-x86_64_v3
+installed = ghostscript-10.07.0-1.1-x86_64_v3
+installed = giflib-5.2.2-2.1-x86_64_v3
+installed = git-2.53.0-1.1-x86_64_v3
+installed = glances-4.5.3-1-any
+installed = glew-2.3.1-1.1-x86_64_v3
+installed = glib-networking-1:2.80.1-1.1-x86_64_v3
+installed = glib2-2.86.4-1.3-x86_64_v3
+installed = glibc-2.43+r5+g856c426a7534-3-x86_64
+installed = glibmm-2.66.8-1.1-x86_64_v3
+installed = glm-1.0.3-1.1-x86_64_v3
+installed = glslang-1:1.4.341.0-2.1-x86_64_v3
+installed = glu-9.0.3-3.1-x86_64_v3
+installed = glycin-2.0.8-1.1-x86_64_v3
+installed = gmp-6.3.0-3.1-x86_64_v3
+installed = gnulib-l10n-20241231-1-any
+installed = gnupg-2.4.9-1.1-x86_64_v3
+installed = gnutls-3.8.12-2-x86_64
+installed = go-2:1.26.1-2-x86_64_v3
+installed = gobject-introspection-1.86.0-2.1-x86_64_v3
+installed = gobject-introspection-runtime-1.86.0-2.1-x86_64_v3
+installed = gperftools-2.18.1-1.1-x86_64_v3
+installed = gpgme-2.0.1-3.1-x86_64_v3
+installed = gpgmepp-2.0.0-2.1-x86_64_v3
+installed = gpm-1.20.7.r38.ge82d1a6-6.1-x86_64
+installed = gpsd-3.27.5-1.1-x86_64_v3
+installed = gradle-9.4.0-2-any
+installed = graphene-1.10.8-2.1-x86_64
+installed = graphite-1:1.3.14-6-x86_64
+installed = grep-3.12-2.1-x86_64_v3
+installed = grim-1.5.0-2.1-x86_64_v3
+installed = grimblast-git-r154.541628c-1-any
+installed = groff-1.24.1-1.1-x86_64_v3
+installed = grub-2:2.14-1.1-x86_64_v3
+installed = grub-hook-2.1-1-any
+installed = gsettings-desktop-schemas-49.1-1-any
+installed = gsettings-system-schemas-49.1-1-any
+installed = gsfonts-20200910-6-any
+installed = gsl-2.8-1-x86_64
+installed = gsm-1.0.24-1.1-x86_64_v3
+installed = gssdp-1.6.4-1.1-x86_64_v3
+installed = gssproxy-0.9.2-2.1-x86_64_v3
+installed = gst-libav-1.28.1-2.1-x86_64_v3
+installed = gst-plugin-pipewire-1:1.6.2-1.1-x86_64_v3
+installed = gst-plugin-va-1.28.1-2.1-x86_64_v3
+installed = gst-plugins-bad-1.28.1-2.1-x86_64_v3
+installed = gst-plugins-bad-libs-1.28.1-2.1-x86_64_v3
+installed = gst-plugins-base-1.28.1-2.1-x86_64_v3
+installed = gst-plugins-base-libs-1.28.1-2.1-x86_64_v3
+installed = gst-plugins-good-1.28.1-2.1-x86_64_v3
+installed = gst-plugins-ugly-1.28.1-2.1-x86_64_v3
+installed = gstreamer-1.28.1-2.1-x86_64_v3
+installed = gtest-1.17.0-2.1-x86_64_v3
+installed = gtk-layer-shell-0.10.0-1.1-x86_64_v3
+installed = gtk-update-icon-cache-1:4.20.3-1.1-x86_64_v3
+installed = gtk3-1:3.24.52-1.1-x86_64_v3
+installed = gtk4-1:4.20.3-1.1-x86_64_v3
+installed = gtkmm3-3.24.10-1.2-x86_64_v3
+installed = gtksourceview4-4.8.4-2.1-x86_64_v3
+installed = guile-3.0.11-1.1-x86_64_v3
+installed = gupnp-1:1.6.9-1.1-x86_64_v3
+installed = gupnp-igd-1.6.0-2.1-x86_64_v3
+installed = gutenprint-5.3.5-1.1-x86_64_v3
+installed = gvfs-1.58.3-1-x86_64
+installed = gvfs-afc-1.58.3-1-x86_64
+installed = gwenview-25.12.3-1.1-x86_64_v3
+installed = gzip-1.14-2-x86_64
+installed = harfbuzz-13.2.1-1.1-x86_64_v3
+installed = harfbuzz-icu-13.2.1-1.1-x86_64_v3
+installed = haruna-1.7.1-2.1-x86_64_v3
+installed = hdparm-9.65-3.1-x86_64_v3
+installed = hicolor-icon-theme-0.18-1-any
+installed = hidapi-0.15.0-1.1-x86_64_v3
+installed = highway-1.3.0-2.1-x86_64_v3
+installed = hplip-1:3.25.8-6.1-x86_64_v3
+installed = htmlq-0.4.0-3.1-x86_64_v3
+installed = htop-3.4.1-1.1-x86_64_v3
+installed = hunspell-1.7.2-3.1-x86_64_v3
+installed = hwdata-0.405-1-any
+installed = hwdetect-2025.08.16.1333-1-any
+installed = hwinfo-25.2-1.1-x86_64_v3
+installed = hwloc-2.13.0-1.1-x86_64_v3
+installed = hyde-cli-git-v0.6.1.r2.6d131fb-1-any
+installed = hyphen-2.8.8-6.2-x86_64_v3
+installed = hyprcursor-0.1.13-5.1-x86_64_v3
+installed = hyprgraphics-0.5.0-3.1-x86_64_v3
+installed = hyprland-0.54.3-2.1-x86_64_v3
+installed = hyprland-guiutils-0.2.1-3.1-x86_64_v3
+installed = hyprlang-0.6.8-3.1-x86_64_v3
+installed = hyprpicker-0.4.6-3.1-x86_64_v3
+installed = hyprtoolkit-0.5.3-2.1-x86_64_v3
+installed = hyprutils-0.12.0-1.1-x86_64_v3
+installed = hyprwayland-scanner-0.4.5-1.1-x86_64_v3
+installed = hyprwire-0.3.0-2.1-x86_64_v3
+installed = i2c-tools-4.4-4.1-x86_64_v3
+installed = iana-etc-20260306-1-any
+installed = icu-78.3-1.1-x86_64_v3
+installed = ifuse-1.2.0-1.1-x86_64_v3
+installed = iio-sensor-proxy-3.9-1.1-x86_64_v3
+installed = ijs-0.35-6.1-x86_64
+installed = imagemagick-7.1.2.18-1.1-x86_64_v3
+installed = imath-3.2.2-4.1-x86_64_v3
+installed = imlib2-1.12.6-1.1-x86_64_v3
+installed = inetutils-2.7-2.1-x86_64_v3
+installed = iniparser-4.2.6-2.1-x86_64_v3
+installed = inxi-3.3.40.1-1-any
+installed = iproute2-6.19.0-2.1-x86_64_v3
+installed = iptables-nft-1:1.8.11-2.1-x86_64_v3
+installed = iputils-20250605-1.1-x86_64_v3
+installed = iso-codes-4.20.1-1-any
+installed = iw-6.17-1.1-x86_64_v3
+installed = iwd-3.12-1.1-x86_64_v3
+installed = jansson-2.15.0-1.1-x86_64_v3
+installed = jasper-4.2.9-1.1-x86_64_v3
+installed = java-environment-common-3-6-any
+installed = java-runtime-common-3-6-any
+installed = jbig2dec-0.20-1.1-x86_64
+installed = jbigkit-2.1-8.1-x86_64
+installed = jdk-openjdk-26.u35-2-x86_64_v3
+installed = jemalloc-1:5.3.0-7.1-x86_64_v3
+installed = jfsutils-1.1.15-9.1-x86_64
+installed = jq-1.8.1-1.1-x86_64_v3
+installed = json-c-0.18-2.1-x86_64_v3
+installed = json-glib-1.10.8-1.1-x86_64_v3
+installed = jsoncpp-1.9.6-3.3-x86_64_v3
+installed = kaccounts-integration-25.12.3-1.1-x86_64_v3
+installed = kactivitymanagerd-6.6.3-1.1-x86_64_v3
+installed = karchive-6.24.0-2.1-x86_64_v3
+installed = kate-25.12.3-1.1-x86_64_v3
+installed = kauth-6.24.0-2.1-x86_64_v3
+installed = kbd-2.9.0-1.1-x86_64_v3
+installed = kbookmarks-6.24.0-2.1-x86_64_v3
+installed = kcalc-25.12.3-1.1-x86_64_v3
+installed = kcmutils-6.24.0-2.1-x86_64_v3
+installed = kcodecs-6.24.0-2.1-x86_64_v3
+installed = kcolorpicker-0.3.1-5-x86_64
+installed = kcolorscheme-6.24.0-1.1-x86_64_v3
+installed = kcompletion-6.24.0-2.1-x86_64_v3
+installed = kconfig-6.24.0-2.1-x86_64_v3
+installed = kconfigwidgets-6.24.0-2.1-x86_64_v3
+installed = kcontacts-1:6.24.0-2.1-x86_64_v3
+installed = kcoreaddons-6.24.0-3.1-x86_64_v3
+installed = kcrash-6.24.0-2.1-x86_64_v3
+installed = kdbusaddons-6.24.0-2.1-x86_64_v3
+installed = kde-cli-tools-6.6.3-1.1-x86_64_v3
+installed = kde-gtk-config-6.6.3-1.1-x86_64_v3
+installed = kdeclarative-6.24.0-2.1-x86_64_v3
+installed = kdeconnect-25.12.3-1.1-x86_64_v3
+installed = kdecoration-6.6.3-1.1-x86_64_v3
+installed = kded-6.24.0-2.1-x86_64_v3
+installed = kdegraphics-mobipocket-25.12.3-1.1-x86_64_v3
+installed = kdegraphics-thumbnailers-25.12.3-1.1-x86_64_v3
+installed = kdeplasma-addons-6.6.3-1.1-x86_64_v3
+installed = kdesu-6.24.0-2.1-x86_64_v3
+installed = kdialog-25.12.3-1.1-x86_64_v3
+installed = kdnssd-6.24.0-2.1-x86_64_v3
+installed = kdsingleapplication-1.2.0-1.1-x86_64_v3
+installed = kdsoap-2.3.0-1-x86_64
+installed = kdsoap-ws-discovery-client-0.4.0-3.1-x86_64_v3
+installed = keyutils-1.6.3-3.1-x86_64
+installed = kfilemetadata-6.24.0-2.1-x86_64_v3
+installed = kglobalaccel-6.24.0-2.1-x86_64_v3
+installed = kglobalacceld-6.6.3-1.1-x86_64_v3
+installed = kguiaddons-6.24.0-3.1-x86_64_v3
+installed = kholidays-1:6.24.0-2.1-x86_64_v3
+installed = ki18n-6.24.0-2.1-x86_64_v3
+installed = kiconthemes-6.24.0-2.1-x86_64_v3
+installed = kidletime-6.24.0-2.1-x86_64_v3
+installed = kimageannotator-0.7.2-1-x86_64
+installed = kimageformats-6.24.0-2.1-x86_64_v3
+installed = kinfocenter-6.6.3-1.1-x86_64_v3
+installed = kio-6.24.0-2.1-x86_64_v3
+installed = kio-admin-25.12.3-1.1-x86_64_v3
+installed = kio-extras-25.12.3-1.1-x86_64_v3
+installed = kio-fuse-5.1.1-1.1-x86_64_v3
+installed = kirigami-6.24.0-1.1-x86_64_v3
+installed = kirigami-addons-1.12.0-1.1-x86_64_v3
+installed = kissfft-131.2.0-2.1-x86_64_v3
+installed = kitemmodels-6.24.0-2.1-x86_64_v3
+installed = kitemviews-6.24.0-2.1-x86_64_v3
+installed = kitty-0.46.2-1.1-x86_64_v3
+installed = kitty-shell-integration-0.46.2-1.1-x86_64_v3
+installed = kitty-terminfo-0.46.2-1.1-x86_64_v3
+installed = kjobwidgets-6.24.0-3.1-x86_64_v3
+installed = kmenuedit-6.6.3-1.1-x86_64_v3
+installed = kmod-34.2-1-x86_64
+installed = knewstuff-6.24.0-2.1-x86_64_v3
+installed = knighttime-6.6.3-1.1-x86_64_v3
+installed = knotifications-6.24.0-3.1-x86_64_v3
+installed = knotifyconfig-6.24.0-2.1-x86_64_v3
+installed = konsole-25.12.3-1.1-x86_64_v3
+installed = kpackage-6.24.0-2.1-x86_64_v3
+installed = kparts-6.24.0-2.1-x86_64_v3
+installed = kpeople-6.24.0-2.1-x86_64_v3
+installed = kpipewire-6.6.3-1.1-x86_64_v3
+installed = kpmcore-25.12.3-1.1-x86_64_v3
+installed = kpty-6.24.0-2.1-x86_64_v3
+installed = kquickcharts-6.24.0-1.1-x86_64_v3
+installed = kquickimageeditor-0.6.1-1.1-x86_64_v3
+installed = krb5-1.21.3-2.1-x86_64_v3
+installed = krunner-6.24.0-2.1-x86_64_v3
+installed = kscreen-6.6.3-2.1-x86_64_v3
+installed = kscreenlocker-6.6.3-2.1-x86_64_v3
+installed = kservice-6.24.0-2.1-x86_64_v3
+installed = kstatusnotifieritem-6.24.0-2.1-x86_64_v3
+installed = ksvg-6.24.0-1.1-x86_64_v3
+installed = ksystemstats-6.6.3-1.1-x86_64_v3
+installed = ktexteditor-6.24.0-2.1-x86_64_v3
+installed = ktextwidgets-6.24.0-2.1-x86_64_v3
+installed = kunitconversion-6.24.0-3.1-x86_64_v3
+installed = kuserfeedback-6.24.0-1.1-x86_64_v3
+installed = kvantum-1.1.6-1.1-x86_64_v3
+installed = kvantum-qt5-1.1.6-1.1-x86_64_v3
+installed = kwallet-6.24.0-2.1-x86_64_v3
+installed = kwallet-pam-6.6.3-1.1-x86_64_v3
+installed = kwalletmanager-25.12.3-1.1-x86_64_v3
+installed = kwayland-6.6.3-1.1-x86_64_v3
+installed = kwidgetsaddons-6.24.0-3.1-x86_64_v3
+installed = kwin-6.6.3-4.1-x86_64_v3
+installed = kwindowsystem-6.24.0-2.1-x86_64_v3
+installed = kxmlgui-6.24.0-3.1-x86_64_v3
+installed = l-smash-2.14.5-4.1-x86_64
+installed = lame-3.101.r6531-1.1-x86_64_v3
+installed = lapack-3.12.1-2.1-x86_64_v3
+installed = layer-shell-qt-6.6.3-3.1-x86_64_v3
+installed = layer-shell-qt5-5.27.12-2-x86_64
+installed = lcms2-2.18-1.1-x86_64_v3
+installed = ldb-2:4.24.0-1.1-x86_64_v3
+installed = leancrypto-1.7.0-1.1-x86_64_v3
+installed = less-1:692-1.1-x86_64_v3
+installed = lib32-brotli-1.1.0-1-x86_64
+installed = lib32-bzip2-1.0.8-4-x86_64
+installed = lib32-clang-22.1.2-1-x86_64
+installed = lib32-curl-8.19.0-1-x86_64
+installed = lib32-e2fsprogs-1.47.4-1-x86_64
+installed = lib32-expat-2.7.5-1-x86_64
+installed = lib32-freetype2-2.14.3-1-x86_64
+installed = lib32-gcc-libs-15.2.1+r604+g0b99615a8aef-2-x86_64_v3
+installed = lib32-glibc-2.43+r5+g856c426a7534-3-x86_64
+installed = lib32-gmp-6.3.0-2-x86_64
+installed = lib32-gnutls-3.8.12-1-x86_64
+installed = lib32-icu-78.3-1-x86_64
+installed = lib32-json-c-0.18-2-x86_64
+installed = lib32-keyutils-1.6.3-2-x86_64
+installed = lib32-krb5-1.21.3-1-x86_64
+installed = lib32-libdisplay-info-0.3.0-1-x86_64
+installed = lib32-libdrm-2.4.131-1-x86_64
+installed = lib32-libelf-0.194-1-x86_64
+installed = lib32-libffi-3.5.2-1-x86_64
+installed = lib32-libgcrypt-1.12.1-1-x86_64
+installed = lib32-libglvnd-1.7.0-1-x86_64
+installed = lib32-libgpg-error-1.59-1-x86_64
+installed = lib32-libidn2-2.3.8-1-x86_64
+installed = lib32-libldap-2.6.13-1-x86_64
+installed = lib32-libnghttp2-1.68.1-1-x86_64
+installed = lib32-libnghttp3-1.15.0-1-x86_64
+installed = lib32-libngtcp2-1.22.0-1-x86_64
+installed = lib32-libpciaccess-0.19-1-x86_64
+installed = lib32-libpng-1.6.56-1-x86_64
+installed = lib32-libpsl-0.21.5-1-x86_64
+installed = lib32-libssh2-1.11.1-1-x86_64
+installed = lib32-libtasn1-4.21.0-1-x86_64
+installed = lib32-libunistring-1.3-1-x86_64
+installed = lib32-libx11-1.8.13-1-x86_64
+installed = lib32-libxau-1.0.12-1-x86_64
+installed = lib32-libxcb-1.17.0-1-x86_64
+installed = lib32-libxcrypt-4.5.2-1-x86_64
+installed = lib32-libxdmcp-1.1.5-1-x86_64
+installed = lib32-libxext-1.3.7-1-x86_64
+installed = lib32-libxml2-2.15.2-1-x86_64
+installed = lib32-libxshmfence-1.3.3-1-x86_64
+installed = lib32-libxxf86vm-1.1.5-2-x86_64
+installed = lib32-llvm-libs-1:22.1.2-1-x86_64
+installed = lib32-lm_sensors-1:3.6.2-2-x86_64
+installed = lib32-mesa-2:26.0.3-2-x86_64
+installed = lib32-ncurses-6.6-2-x86_64
+installed = lib32-nettle-3.10.2-1-x86_64
+installed = lib32-opencl-mesa-2:26.0.3-2-x86_64
+installed = lib32-openssl-1:3.6.1-1-x86_64
+installed = lib32-p11-kit-0.26.2-1-x86_64
+installed = lib32-spirv-llvm-translator-22.1.0-1-x86_64
+installed = lib32-spirv-tools-1:1.4.341.0-1-x86_64
+installed = lib32-systemd-260.1-1-x86_64
+installed = lib32-vulkan-icd-loader-1.4.341.0-1-x86_64
+installed = lib32-vulkan-mesa-implicit-layers-2:26.0.3-2-x86_64
+installed = lib32-vulkan-radeon-2:26.0.3-2-x86_64
+installed = lib32-wayland-1.24.0-1-x86_64
+installed = lib32-xcb-util-keysyms-0.4.1-2-x86_64
+installed = lib32-xz-5.8.2-1-x86_64
+installed = lib32-zlib-ng-2.3.3-2-x86_64_v3
+installed = lib32-zlib-ng-compat-2.3.3-2-x86_64_v3
+installed = lib32-zstd-1.5.7-2-x86_64_v3
+installed = libaccounts-glib-1.27-3.1-x86_64_v3
+installed = libaccounts-qt-1.17-2.1-x86_64_v3
+installed = libaio-0.3.113-3.1-x86_64
+installed = libao-1.2.2-7.1-x86_64_v3
+installed = libappindicator-12.10.1-1-x86_64
+installed = libarchive-3.8.6-1.1-x86_64_v3
+installed = libasan-15.2.1+r604+g0b99615a8aef-2-x86_64_v3
+installed = libass-0.17.4-1.1-x86_64_v3
+installed = libassuan-3.0.0-1.1-x86_64
+installed = libasyncns-1:0.8+r3+g68cd5af-3.2-x86_64_v3
+installed = libatasmart-0.19-8.1-x86_64_v3
+installed = libatomic-15.2.1+r604+g0b99615a8aef-2-x86_64_v3
+installed = libavc1394-0.5.4-7.1-x86_64_v3
+installed = libavif-1.4.1-1.1-x86_64_v3
+installed = libavtp-0.2.0-3.1-x86_64
+installed = libayatana-appindicator-0.5.94-1.1-x86_64_v3
+installed = libayatana-indicator-0.9.4-1.1-x86_64
+installed = libb2-0.98.1-3.1-x86_64
+installed = libblockdev-3.4.0-3.1-x86_64_v3
+installed = libblockdev-crypto-3.4.0-3.1-x86_64_v3
+installed = libblockdev-fs-3.4.0-3.1-x86_64_v3
+installed = libblockdev-loop-3.4.0-3.1-x86_64_v3
+installed = libblockdev-mdraid-3.4.0-3.1-x86_64_v3
+installed = libblockdev-nvme-3.4.0-3.1-x86_64_v3
+installed = libblockdev-part-3.4.0-3.1-x86_64_v3
+installed = libblockdev-smart-3.4.0-3.1-x86_64_v3
+installed = libblockdev-swap-3.4.0-3.1-x86_64_v3
+installed = libbluray-1.4.1-1.1-x86_64_v3
+installed = libbpf-1.6.2-1.1-x86_64_v3
+installed = libbs2b-3.1.0-10.1-x86_64_v3
+installed = libbsd-0.12.2-2.1-x86_64
+installed = libbytesize-2.12-3.1-x86_64_v3
+installed = libcaca-0.99.beta20-7.1-x86_64_v3
+installed = libcanberra-1:0.30+r2+gc0620e4-6.1-x86_64_v3
+installed = libcap-2.77-1.1-x86_64_v3
+installed = libcap-ng-0.9.2-1.1-x86_64_v3
+installed = libcbor-0.13.0-1.1-x86_64_v3
+installed = libcddb-1.3.2-9.1-x86_64_v3
+installed = libcdio-2.3.0-1.1-x86_64_v3
+installed = libcdio-paranoia-10.2+2.0.2-2.1-x86_64_v3
+installed = libclc-22.1.2-1-any
+installed = libcloudproviders-0.4.0-1.1-x86_64_v3
+installed = libcolord-1.4.8-1-x86_64
+installed = libcups-2:2.4.16-2-x86_64
+installed = libcupsfilters-2.1.1-4.1-x86_64_v3
+installed = libdaemon-0.14-6.1-x86_64
+installed = libdatachannel-0.24.1-1.1-x86_64_v3
+installed = libdatrie-0.2.14-1.1-x86_64_v3
+installed = libdbusmenu-glib-18.10.20180917-1-x86_64
+installed = libdbusmenu-gtk3-18.10.20180917-1-x86_64
+installed = libdc1394-2.2.7-2.1-x86_64_v3
+installed = libdca-0.0.7-3.1-x86_64_v3
+installed = libde265-1.0.18-1.1-x86_64_v3
+installed = libdecor-0.2.5-1.1-x86_64_v3
+installed = libdeflate-1.25-1.1-x86_64_v3
+installed = libdisplay-info-0.3.0-1.1-x86_64_v3
+installed = libdmtx-0.7.8-1.1-x86_64_v3
+installed = libdovi-3.3.2-1.1-x86_64_v3
+installed = libdrm-2.4.131-1.1-x86_64_v3
+installed = libdv-1.0.0-12.1-x86_64_v3
+installed = libdvbpsi-1:1.3.3-3-x86_64
+installed = libdvdcss-1.5.0-1.1-x86_64_v3
+installed = libdvdnav-7.0.0-1.1-x86_64_v3
+installed = libdvdread-7.0.1-1.1-x86_64_v3
+installed = libebml-1.4.5-1.1-x86_64
+installed = libebur128-1.2.6-2.1-x86_64
+installed = libedit-20251016_3.1-1.1-x86_64_v3
+installed = libei-1.5.0-1.1-x86_64_v3
+installed = libelf-0.194-2-x86_64
+installed = libepoxy-1.5.10-3.1-x86_64
+installed = libevdev-1.13.6-1.1-x86_64_v3
+installed = libevent-2.1.12-5.1-x86_64_v3
+installed = libexif-0.6.25-1.1-x86_64_v3
+installed = libfakekey-0.3-4.1-x86_64_v3
+installed = libfdk-aac-2.0.3-1.1-x86_64
+installed = libffi-3.5.2-1.1-x86_64_v3
+installed = libfontenc-1.1.9-1.1-x86_64_v3
+installed = libfreeaptx-0.2.2-1.1-x86_64_v3
+installed = libftdi-1.5-10.1-x86_64_v3
+installed = libfyaml-0.9.6-2.1-x86_64_v3
+installed = libgcc-15.2.1+r604+g0b99615a8aef-2-x86_64_v3
+installed = libgcrypt-1.12.1-1.1-x86_64_v3
+installed = libgfortran-15.2.1+r604+g0b99615a8aef-2-x86_64_v3
+installed = libgirepository-1.86.0-2.1-x86_64_v3
+installed = libgit2-1:1.9.2-3.1-x86_64_v3
+installed = libglvnd-1.7.0-3.1-x86_64_v3
+installed = libgme-0.6.4-2.1-x86_64_v3
+installed = libgomp-15.2.1+r604+g0b99615a8aef-2-x86_64_v3
+installed = libgoom2-2k4-5-x86_64
+installed = libgpg-error-1.59-1.1-x86_64_v3
+installed = libgsf-1.14.56-1.1-x86_64_v3
+installed = libgudev-238-3.1-x86_64_v3
+installed = libical-3.0.20-3.1-x86_64_v3
+installed = libice-1.1.2-1.1-x86_64
+installed = libidn-1.43-1.1-x86_64_v3
+installed = libidn2-2.3.8-1.1-x86_64_v3
+installed = libiec61883-1.2.0-9.1-x86_64_v3
+installed = libimagequant-4.4.1-1-x86_64
+installed = libimobiledevice-1.4.0-2.1-x86_64_v3
+installed = libimobiledevice-glue-1.3.2-1.1-x86_64_v3
+installed = libinih-62-2.1-x86_64_v3
+installed = libinput-1.31.0-1-x86_64
+installed = libisl-0.27-1.1-x86_64
+installed = libjcat-0.2.5-1.1-x86_64_v3
+installed = libjpeg-turbo-3.1.3-1.1-x86_64_v3
+installed = libjuice-1.7.0-1.1-x86_64_v3
+installed = libjxl-0.11.2-2.1-x86_64_v3
+installed = libkate-0.4.3-4.1-x86_64_v3
+installed = libkdcraw-25.12.3-1-x86_64
+installed = libkexiv2-25.12.3-1.1-x86_64_v3
+installed = libkeybinder3-0.3.2-5.1-x86_64
+installed = libksba-1.6.8-1.1-x86_64_v3
+installed = libkscreen-6.6.3-2.1-x86_64_v3
+installed = libksysguard-6.6.3-1-x86_64
+installed = liblc3-1.1.3-2.1-x86_64_v3
+installed = libldac-2.0.2.3-3.1-x86_64_v3
+installed = libldap-2.6.13-1-x86_64
+installed = libliftoff-0.5.0-1.1-x86_64
+installed = liblouis-3.37.0-1.1-x86_64_v3
+installed = liblqr-0.4.3-1.1-x86_64
+installed = liblrdf-0.6.1-5.1-x86_64
+installed = liblsan-15.2.1+r604+g0b99615a8aef-2-x86_64_v3
+installed = libltc-1.3.2-2.1-x86_64
+installed = liblzf-3.6-5.1-x86_64
+installed = libmad-0.15.1b-10.1-x86_64
+installed = libmakepkg-dropins-20-1-any
+installed = libmalcontent-0.13.1-1.1-x86_64_v3
+installed = libmanette-0.2.13-2.1-x86_64_v3
+installed = libmatroska-1.7.1-2.1-x86_64
+installed = libmaxminddb-1.13.3-1.1-x86_64_v3
+installed = libmbim-1.34.0-1.1-x86_64_v3
+installed = libmd-1.1.0-2.1-x86_64
+installed = libmfx-23.2.2-6-x86_64
+installed = libmicrodns-0.2.0-2.1-x86_64
+installed = libmm-glib-1.24.2-1.1-x86_64_v3
+installed = libmng-2.0.3-4.1-x86_64
+installed = libmnl-1.0.5-2.1-x86_64
+installed = libmodplug-0.8.9.0-7.1-x86_64_v3
+installed = libmpc-1.4.0-1.1-x86_64_v3
+installed = libmpcdec-1:0.1+r475-6-x86_64
+installed = libmpdclient-2.23-1.1-x86_64_v3
+installed = libmpeg2-0.5.1-11.1-x86_64_v3
+installed = libmtp-1.1.23-1.1-x86_64_v3
+installed = libmysofa-1.3.3-1.1-x86_64
+installed = libndp-1.9-1.2-x86_64_v3
+installed = libnet-2:1.3-1.2-x86_64_v3
+installed = libnetfilter_conntrack-1.0.9-2.1-x86_64
+installed = libnewt-0.52.25-2.1-x86_64_v3
+installed = libnfnetlink-1.0.2-2.1-x86_64
+installed = libnfs-6.0.2-5.2-x86_64_v3
+installed = libnftnl-1.3.1-1.1-x86_64_v3
+installed = libnghttp2-1.68.1-1.1-x86_64_v3
+installed = libnghttp3-1.15.0-1.1-x86_64_v3
+installed = libngtcp2-1.22.0-1.1-x86_64_v3
+installed = libnice-0.1.23-1.1-x86_64_v3
+installed = libnl-3.12.0-1.1-x86_64_v3
+installed = libnm-1.56.0-1-x86_64
+installed = libnma-1.10.6-3.1-x86_64
+installed = libnma-common-1.10.6-3.1-x86_64
+installed = libnma-gtk4-1.10.6-3.1-x86_64
+installed = libnotify-0.8.8-1.1-x86_64_v3
+installed = libnsl-2.0.1-1.1-x86_64
+installed = libnvme-1.16.1-3.1-x86_64_v3
+installed = libobjc-15.2.1+r604+g0b99615a8aef-2-x86_64_v3
+installed = libogg-1.3.6-1.1-x86_64_v3
+installed = libopenmpt-0.8.6-1.1-x86_64_v3
+installed = libopenraw-0.3.7-2.1-x86_64
+installed = libp11-kit-0.26.2-1.1-x86_64_v3
+installed = libpaper-2.2.7-1.1-x86_64_v3
+installed = libpcap-1.10.6-1.1-x86_64_v3
+installed = libpciaccess-0.19-1.1-x86_64_v3
+installed = libpgm-5.3.128-3.1-x86_64
+installed = libpipeline-1.5.8-1.1-x86_64
+installed = libpipewire-1:1.6.2-1.1-x86_64_v3
+installed = libplacebo-7.360.1-1.1-x86_64_v3
+installed = libplasma-6.6.3-2.1-x86_64_v3
+installed = libplist-2.7.0-3.1-x86_64_v3
+installed = libpng-1.6.56-1.1-x86_64_v3
+installed = libppd-2.1.1-2.1-x86_64_v3
+installed = libproxy-0.5.12-1.1-x86_64_v3
+installed = libpsl-0.21.5-2.1-x86_64
+installed = libpulse-17.0+r98+gb096704c0-1.1-x86_64_v3
+installed = libqaccessibilityclient-qt6-0.6.0-1-x86_64
+installed = libqalculate-5.9.0-1.1-x86_64_v3
+installed = libqmi-1.38.0-1.1-x86_64_v3
+installed = libqrtr-glib-1.4.0-1.1-x86_64_v3
+installed = libquadmath-15.2.1+r604+g0b99615a8aef-2-x86_64_v3
+installed = libraqm-0.10.4-1.1-x86_64_v3
+installed = libraw-0.22.0-2.1-x86_64_v3
+installed = libraw1394-2.1.2-4.1-x86_64
+installed = librsvg-2:2.61.4-1.1-x86_64_v3
+installed = librsync-1:2.3.4-2.1-x86_64
+installed = libsamplerate-0.2.2-3.1-x86_64
+installed = libsasl-2.1.28-5.1-x86_64
+installed = libseccomp-2.6.0-1.1-x86_64_v3
+installed = libsecret-0.21.7-1.1-x86_64_v3
+installed = libshout-1:2.4.6-5.1-x86_64_v3
+installed = libsigc++-2.12.1-2.1-x86_64_v3
+installed = libsixel-1.10.5-1.1-x86_64_v3
+installed = libsm-1.2.6-1.2-x86_64_v3
+installed = libsndfile-1.2.2-4.1-x86_64_v3
+installed = libsodium-1.0.21-1.1-x86_64_v3
+installed = libsonic-0.2.0-2-x86_64
+installed = libsoup-2.74.3-4.1-x86_64_v3
+installed = libsoup3-3.6.6-2-x86_64
+installed = libsoxr-0.1.3-4.1-x86_64
+installed = libspeechd-0.12.1-3.1-x86_64_v3
+installed = libsrtp-1:2.8.0-1-x86_64
+installed = libssc-0.4.2-1.1-x86_64_v3
+installed = libssh-0.12.0-1.1-x86_64_v3
+installed = libssh2-1.11.1-1.1-x86_64_v3
+installed = libstdc++-15.2.1+r604+g0b99615a8aef-2-x86_64_v3
+installed = libstemmer-3.0.1-1.1-x86_64_v3
+installed = libsysprof-capture-49.0-2.1-x86_64_v3
+installed = libtasn1-4.21.0-1.1-x86_64_v3
+installed = libtatsu-1.0.5-1.1-x86_64_v3
+installed = libteam-1.32-3.1-x86_64_v3
+installed = libthai-0.1.30-1.1-x86_64_v3
+installed = libtheora-1.2.0-1.1-x86_64_v3
+installed = libtiff-4.7.1-1.1-x86_64_v3
+installed = libtiger-0.3.4-8.1-x86_64
+installed = libtirpc-1.3.7-1.1-x86_64_v3
+installed = libtommath-1.3.0-2.1-x86_64_v3
+installed = libtool-2.6.0-4-x86_64
+installed = libtpms-0.10.2-1-x86_64
+installed = libtsan-15.2.1+r604+g0b99615a8aef-2-x86_64_v3
+installed = libubsan-15.2.1+r604+g0b99615a8aef-2-x86_64_v3
+installed = libunibreak-6.1-1.2-x86_64_v3
+installed = libunistring-1.4.1-1.1-x86_64_v3
+installed = libunwind-1.8.2-1.1-x86_64_v3
+installed = libupnp-1.14.25-1.1-x86_64_v3
+installed = liburcu-0.15.6-1.1-x86_64_v3
+installed = liburing-2.14-1.1-x86_64_v3
+installed = libusb-1.0.29-1.1-x86_64_v3
+installed = libusb-compat-0.1.8-2.1-x86_64
+installed = libusbmuxd-2.1.1-2.1-x86_64_v3
+installed = libutempter-1.2.3-1.1-x86_64_v3
+installed = libuv-1.52.1-1-x86_64
+installed = libva-2.23.0-1.1-x86_64_v3
+installed = libva-utils-2.22.0-1.1-x86_64
+installed = libvdpau-1.5-4.1-x86_64_v3
+installed = libverto-0.3.2-5.1-x86_64
+installed = libvlc-3.0.22-2.1-x86_64_v3
+installed = libvorbis-1.3.7-4.1-x86_64_v3
+installed = libvpl-2.16.0-2.1-x86_64_v3
+installed = libvpx-1.16.0-3.1-x86_64_v3
+installed = libwacom-2.18.0-2-x86_64
+installed = libwbclient-2:4.24.0-1.1-x86_64_v3
+installed = libwebp-1.6.0-2.1-x86_64_v3
+installed = libwireplumber-0.5.14-1.1-x86_64_v3
+installed = libwnck3-43.3-1.2-x86_64_v3
+installed = libx11-1.8.13-1.1-x86_64_v3
+installed = libx86emu-3.7-2.1-x86_64_v3
+installed = libxau-1.0.12-1.1-x86_64
+installed = libxaw-1.0.16-1.1-x86_64
+installed = libxcb-1.17.0-1.2-x86_64_v3
+installed = libxcomposite-0.4.7-1.1-x86_64_v3
+installed = libxcrypt-4.5.2-1.1-x86_64_v3
+installed = libxcursor-1.2.3-1.1-x86_64
+installed = libxcvt-0.1.3-1.1-x86_64
+installed = libxdamage-1.1.7-1.1-x86_64_v3
+installed = libxdmcp-1.1.5-1.2-x86_64_v3
+installed = libxext-1.3.7-1.1-x86_64_v3
+installed = libxfixes-6.0.2-1.1-x86_64_v3
+installed = libxfont2-2.0.7-1.1-x86_64
+installed = libxft-2.3.9-1.2-x86_64_v3
+installed = libxi-1.8.2-1.1-x86_64
+installed = libxinerama-1.1.6-1.1-x86_64_v3
+installed = libxkbcommon-1.13.1-1.1-x86_64_v3
+installed = libxkbcommon-x11-1.13.1-1.1-x86_64_v3
+installed = libxkbfile-1.2.0-1.1-x86_64_v3
+installed = libxml2-2.15.2-1.1-x86_64_v3
+installed = libxmlb-0.3.25-1.1-x86_64_v3
+installed = libxmu-1.3.1-1.1-x86_64_v3
+installed = libxpm-3.5.18-1.1-x86_64_v3
+installed = libxpresent-1.0.2-1.1-x86_64_v3
+installed = libxrandr-1.5.5-1.1-x86_64_v3
+installed = libxrender-0.9.12-1.1-x86_64
+installed = libxres-1.2.3-1.1-x86_64_v3
+installed = libxshmfence-1.3.3-1.1-x86_64
+installed = libxslt-1.1.45-2.1-x86_64_v3
+installed = libxss-1.2.5-1.1-x86_64_v3
+installed = libxt-1.3.1-1.1-x86_64
+installed = libxtst-1.2.5-1.1-x86_64
+installed = libxv-1.0.13-1.1-x86_64
+installed = libxxf86vm-1.1.7-1.1-x86_64_v3
+installed = libyaml-0.2.5-3.1-x86_64
+installed = libyuv-r2426+464c51a03-1.1-x86_64
+installed = libzip-1.11.4-1.2-x86_64_v3
+installed = licenses-20240728-1-any
+installed = lilv-0.26.4-1-x86_64
+installed = linux-6.19.10.arch1-1-x86_64
+installed = linux-api-headers-1:6.19-1-x86_64_v3
+installed = linux-cachyos-6.19.10-1-x86_64_v3
+installed = linux-cachyos-headers-6.19.10-1-x86_64_v3
+installed = linux-cachyos-lts-6.18.20-1-x86_64_v3
+installed = linux-cachyos-lts-headers-6.18.20-1-x86_64_v3
+installed = linux-firmware-1:20260309-1-any
+installed = linux-firmware-amdgpu-1:20260309-1-any
+installed = linux-firmware-atheros-1:20260309-1-any
+installed = linux-firmware-broadcom-1:20260309-1-any
+installed = linux-firmware-cirrus-1:20260309-1-any
+installed = linux-firmware-intel-1:20260309-1-any
+installed = linux-firmware-mediatek-1:20260309-1-any
+installed = linux-firmware-nvidia-1:20260309-1-any
+installed = linux-firmware-other-1:20260309-1-any
+installed = linux-firmware-radeon-1:20260309-1-any
+installed = linux-firmware-realtek-1:20260309-1-any
+installed = linux-firmware-whence-1:20260309-1-any
+installed = lirc-1:0.10.2-6.1-x86_64_v3
+installed = live-media-2025.05.24-1.2-x86_64_v3
+installed = lld-22.1.2-1.1-x86_64_v3
+installed = llhttp-9.3.1-1.1-x86_64_v3
+installed = llvm-22.1.2-2-x86_64_v3
+installed = llvm-libs-22.1.2-2-x86_64_v3
+installed = lm_sensors-1:3.6.2-1.1-x86_64_v3
+installed = lmdb-0.9.35-1.1-x86_64_v3
+installed = logrotate-3.22.0-1.1-x86_64
+installed = lsb-release-2.0.r55.a25a4fc-1-any
+installed = lsscsi-0.32-2.2-x86_64_v3
+installed = lua-5.5.0-2.2-x86_64_v3
+installed = lua54-5.4.8-6.1-x86_64_v3
+installed = luajit-2.1.1774896198+18b087c-1.1-x86_64_v3
+installed = lv2-1.18.10-2.1-x86_64_v3
+installed = lvm2-2.03.39-1.1-x86_64_v3
+installed = lz4-1:1.10.0-3-x86_64_v3
+installed = lzo-2.10-5.1-x86_64
+installed = m4-1.4.21-2.1-x86_64_v3
+installed = mailcap-2.1.54-2-any
+installed = make-4.4.1-2.1-x86_64
+installed = man-db-2.13.1-1.1-x86_64_v3
+installed = man-pages-6.17-1-any
+installed = marisa-0.2.7-2.1-x86_64_v3
+installed = mbedtls-3.6.5-1-x86_64
+installed = md4c-0.5.2-1.1-x86_64
+installed = mdadm-4.6-1-x86_64
+installed = media-player-info-26-1-any
+installed = meld-3.22.3-2-any
+installed = mesa-2:26.0.3-2-x86_64
+installed = mesa-utils-9.0.0-7.1-x86_64_v3
+installed = micro-2.0.15-2.1-x86_64_v3
+installed = milou-6.6.3-1.1-x86_64_v3
+installed = miniupnpc-2.3.3-3.1-x86_64_v3
+installed = minizip-1:1.3.2-3.1-x86_64_v3
+installed = mjpegtools-2.2.1-4.1-x86_64_v3
+installed = mkinitcpio-40-5-any
+installed = mkinitcpio-busybox-1.36.1-1.1-x86_64
+installed = mobile-broadband-provider-info-20251101-1-any
+installed = modemmanager-1.24.2-1.1-x86_64_v3
+installed = modemmanager-qt-6.24.0-2.1-x86_64_v3
+installed = modrinth-app-0.12.5-1-x86_64
+installed = mousetweaks-3.32.0-2.1-x86_64
+installed = mpdecimal-4.0.1-3.1-x86_64_v3
+installed = mpfr-4.2.2-1.1-x86_64_v3
+installed = mpg123-1.33.4-1.1-x86_64_v3
+installed = mpv-1:0.41.0-3.1-x86_64_v3
+installed = mpvqt-1.1.1-2.1-x86_64_v3
+installed = mtdev-1.1.7-1.1-x86_64
+installed = mtools-1:4.0.49-1.1-x86_64_v3
+installed = mujs-1.3.9-1.1-x86_64_v3
+installed = muparser-2.3.5-2.1-x86_64_v3
+installed = nano-8.7.1-1.1-x86_64_v3
+installed = nano-syntax-highlighting-2025.07.01.r0.g256995b-2-any
+installed = ncurses-6.6-2.1-x86_64_v3
+installed = neon-0.37.1-1-x86_64
+installed = net-snmp-5.9.5.2-1.1-x86_64_v3
+installed = netctl-1.29-2-any
+installed = nettle-3.10.2-1.1-x86_64_v3
+installed = network-manager-applet-1.36.0-1-x86_64
+installed = networkmanager-1.56.0-1-x86_64
+installed = networkmanager-openvpn-1.12.5-1.1-x86_64_v3
+installed = networkmanager-qt-6.24.0-2.1-x86_64_v3
+installed = networkmanager-vpn-plugin-openvpn-1.12.5-1.1-x86_64_v3
+installed = nfs-utils-2.8.7-1.1-x86_64_v3
+installed = nfsidmap-2.8.7-1.1-x86_64_v3
+installed = nftables-1:1.1.6-3-x86_64
+installed = nilfs-utils-2.2.15-1.1-x86_64_v3
+installed = nlohmann-json-3.12.0-2-any
+installed = nm-connection-editor-1.36.0-1-x86_64
+installed = node-gyp-12.2.0-1-any
+installed = nodejs-25.8.2-3-x86_64
+installed = nodejs-nopt-9.0.0-1-any
+installed = noto-fonts-1:2026.03.01-1-any
+installed = noto-fonts-cjk-20240730-1-any
+installed = noto-fonts-emoji-1:2.051-1-any
+installed = noto-fonts-extra-1:2026.03.01-1-any
+installed = npm-11.12.1-1-any
+installed = npth-1.8-1.1-x86_64
+installed = nspr-4.38.2-1.1-x86_64_v3
+installed = nss-3.122-1.1-x86_64_v3
+installed = nss-mdns-0.15.1-2.1-x86_64
+installed = nwg-look-1.0.6-1.1-x86_64_v3
+installed = obs-studio-32.1.0-2.1-x86_64_v3
+installed = ocean-sound-theme-6.6.3-1-any
+installed = ocl-icd-2.3.4-1.1-x86_64_v3
+installed = ocs-url-3.1.0-7-x86_64
+installed = octopi-0.18.1-2-x86_64
+installed = oh-my-zsh-git-r7425.7ed475cb5-1-any
+installed = onetbb-2022.3.0-4-x86_64
+installed = oniguruma-6.9.10-1.1-x86_64_v3
+installed = openal-1.25.1-1.1-x86_64_v3
+installed = opencc-1.2.0-3.1-x86_64_v3
+installed = opencl-mesa-2:26.0.3-2-x86_64
+installed = opencore-amr-0.1.6-2.1-x86_64
+installed = opencv-4.13.0-4.1-x86_64_v3
+installed = openexr-3.4.8-1.1-x86_64_v3
+installed = openh264-2.6.0-2.1-x86_64_v3
+installed = openjpeg2-2.5.4-1.1-x86_64_v3
+installed = openjph-0.26.3-3.1-x86_64_v3
+installed = openssh-10.2p1-2.1-x86_64_v3
+installed = openssl-3.6.1-1.1-x86_64_v3
+installed = openvpn-2.7.1-1.1-x86_64_v3
+installed = openxr-1.1.57-1.1-x86_64_v3
+installed = opus-1.6.1-1.1-x86_64_v3
+installed = opusfile-0.12-4.1-x86_64
+installed = orc-0.4.42-1.1-x86_64_v3
+installed = orca-49.6-1-any
+installed = os-prober-1.84-1.1-x86_64_v3
+installed = ostree-2025.7-3-x86_64
+installed = p11-kit-0.26.2-1.1-x86_64_v3
+installed = pacman-7.1.0.r9.g54d9411-2-x86_64
+installed = pacman-contrib-1.13.1-1.2-x86_64_v3
+installed = pacman-mirrorlist-20260213-1-any
+installed = pacutils-0.15.0-3-x86_64
+installed = pahole-1:1.31-2.1-x86_64_v3
+installed = pam-1.7.2-2.1-x86_64_v3
+installed = pambase-20250719-1-any
+installed = pamixer-1.6-3.1-x86_64
+installed = pango-1:1.57.1-1.1-x86_64_v3
+installed = pangomm-2.46.4-1.4-x86_64_v3
+installed = parallel-20260222-1-any
+installed = parted-3.6-2.1-x86_64
+installed = partitionmanager-25.12.3-1.1-x86_64_v3
+installed = paru-2.1.0-2-x86_64
+installed = passim-0.1.10-1.1-x86_64_v3
+installed = patch-2.8-1.1-x86_64_v3
+installed = pcaudiolib-1.3-1.1-x86_64
+installed = pciutils-3.14.0-1.1-x86_64_v3
+installed = pcre-8.45-4.1-x86_64
+installed = pcre2-10.47-1.1-x86_64_v3
+installed = pcsclite-2.4.1-1.1-x86_64_v3
+installed = perl-5.42.1-1.1-x86_64_v3
+installed = perl-alien-build-2.84-4-any
+installed = perl-alien-libxml2-0.20-5-any
+installed = perl-capture-tiny-0.50-4-any
+installed = perl-class-inspector-1.36-10-any
+installed = perl-clone-0.50-1.1-x86_64_v3
+installed = perl-dbi-1.647-2.1-x86_64_v3
+installed = perl-encode-locale-1.05-15-any
+installed = perl-error-0.17030-3-any
+installed = perl-ffi-checklib-0.31-8-any
+installed = perl-file-chdir-0.1011-6-any
+installed = perl-file-listing-6.16-6-any
+installed = perl-file-sharedir-1.118-8-any
+installed = perl-file-which-1.27-8-any
+installed = perl-html-parser-3.83-2.1-x86_64_v3
+installed = perl-html-tagset-3.24-4-any
+installed = perl-http-cookiejar-0.014-5-any
+installed = perl-http-cookies-6.11-4-any
+installed = perl-http-daemon-6.16-6-any
+installed = perl-http-date-6.06-5-any
+installed = perl-http-message-7.01-2-any
+installed = perl-http-negotiate-6.01-16-any
+installed = perl-io-html-1.004-8-any
+installed = perl-libwww-6.82-1-any
+installed = perl-lwp-mediatypes-6.04-8-any
+installed = perl-mailtools-2.22-3-any
+installed = perl-net-http-6.24-2-any
+installed = perl-path-tiny-0.150-2-any
+installed = perl-timedate-2.35-1-any
+installed = perl-try-tiny-0.32-4-any
+installed = perl-uri-5.34-2-any
+installed = perl-www-robotrules-6.02-16-any
+installed = perl-xml-libxml-2.0210-4.1-x86_64_v3
+installed = perl-xml-namespacesupport-1.12-6-any
+installed = perl-xml-parser-2.49-1.1-x86_64_v3
+installed = perl-xml-sax-1.02-2-any
+installed = perl-xml-sax-base-1.09-6-any
+installed = perl-xml-writer-0.900-6-any
+installed = phonon-qt6-4.12.0-6-x86_64
+installed = phonon-qt6-vlc-0.12.0-6-x86_64
+installed = php-8.5.4-2-x86_64_v3
+installed = pinentry-1.3.2-2.1-x86_64_v3
+installed = pipewire-1:1.6.2-1.1-x86_64_v3
+installed = pipewire-alsa-1:1.6.2-1.1-x86_64_v3
+installed = pipewire-audio-1:1.6.2-1.1-x86_64_v3
+installed = pipewire-jack-1:1.6.2-1.1-x86_64_v3
+installed = pipewire-pulse-1:1.6.2-1.1-x86_64_v3
+installed = pixman-0.46.4-1.1-x86_64_v3
+installed = pkcs11-helper-1.31.0-1.1-x86_64_v3
+installed = pkgconf-2.5.1-1.1-x86_64_v3
+installed = pkgfile-25-2.1-x86_64_v3
+installed = plasma-activities-6.6.3-1.1-x86_64_v3
+installed = plasma-activities-stats-6.6.3-1.1-x86_64_v3
+installed = plasma-browser-integration-6.6.3-1.1-x86_64_v3
+installed = plasma-desktop-6.6.3-2.1-x86_64_v3
+installed = plasma-firewall-6.6.3-1.1-x86_64_v3
+installed = plasma-integration-6.6.3-3.1-x86_64_v3
+installed = plasma-login-manager-6.6.3-1.1-x86_64_v3
+installed = plasma-nm-6.6.3-1.1-x86_64_v3
+installed = plasma-pa-6.6.3-1.1-x86_64_v3
+installed = plasma-systemmonitor-6.6.3-1.1-x86_64_v3
+installed = plasma-thunderbolt-6.6.3-1.1-x86_64_v3
+installed = plasma-workspace-6.6.3-2.1-x86_64_v3
+installed = plasma5support-6.6.3-1.1-x86_64_v3
+installed = playerctl-2.4.1-5.1-x86_64_v3
+installed = plocate-1.1.24-1.1-x86_64_v3
+installed = plymouth-24.004.60-14.1-x86_64_v3
+installed = plymouth-kcm-6.6.3-1.1-x86_64_v3
+installed = pnpm-10.33.0-1-any
+installed = pokemon-colorscripts-git-r112.0483c85-1-any
+installed = polkit-127-3.1-x86_64_v3
+installed = polkit-gnome-0.105-12.1-x86_64_v3
+installed = polkit-kde-agent-6.6.3-1.1-x86_64_v3
+installed = polkit-qt6-0.200.0-2-x86_64
+installed = poppler-26.03.0-1.1-x86_64_v3
+installed = poppler-data-0.4.12-2-any
+installed = poppler-glib-26.03.0-1.1-x86_64_v3
+installed = poppler-qt6-26.03.0-1.1-x86_64_v3
+installed = popt-1.19-2.1-x86_64
+installed = portaudio-1:19.7.0-4.1-x86_64_v3
+installed = power-profiles-daemon-0.30-3-x86_64
+installed = powerdevil-6.6.3-1.1-x86_64_v3
+installed = powerline-fonts-2.8.4-4.1-x86_64_v3
+installed = ppp-2.5.2-1.1-x86_64_v3
+installed = pps-tools-1.0.3-2.1-x86_64
+installed = prison-6.24.0-2.1-x86_64_v3
+installed = procps-ng-4.0.6-1.1-x86_64_v3
+installed = projectm-3.1.12-5.1-x86_64
+installed = protobuf-34.1-1.1-x86_64_v3
+installed = protobuf-c-1.5.2-9.1-x86_64_v3
+installed = psmisc-23.7-1.1-x86_64
+installed = pugixml-1.15-3.1-x86_64_v3
+installed = pulseaudio-qt-1.8.1-1.1-x86_64_v3
+installed = pulsemixer-1.5.1-8-any
+installed = purpose-6.24.0-2.1-x86_64_v3
+installed = pv-1.10.5-1.1-x86_64_v3
+installed = pyalpm-0.11.1-1.1-x86_64_v3
+installed = python-3.14.3-2-x86_64_v3
+installed = python-aiohappyeyeballs-2.6.1-4-any
+installed = python-aiohttp-3.13.4-1-x86_64
+installed = python-aiosignal-1.4.0-3-any
+installed = python-annotated-types-0.7.0-3-any
+installed = python-anyio-4.13.0-1-any
+installed = python-attrs-26.1.0-1-any
+installed = python-autocommand-2.2.2-9-any
+installed = python-beautifulsoup4-4.14.3-2-any
+installed = python-brltty-6.9-3.1-x86_64_v3
+installed = python-build-1.4.2-1-any
+installed = python-cairo-1.29.0-2.1-x86_64_v3
+installed = python-certifi-2026.02.25-1-any
+installed = python-chardet-6.0.0.post1-1-any
+installed = python-charset-normalizer-3.4.6-1.1-x86_64_v3
+installed = python-dasbus-1.7-5-any
+installed = python-dbus-1.4.0-2-x86_64
+installed = python-defusedxml-0.7.1-8-any
+installed = python-distro-1.9.0-4-any
+installed = python-docopt-0.6.2-15-any
+installed = python-frozenlist-1.8.0-2.1-x86_64_v3
+installed = python-gobject-3.54.5-2-x86_64
+installed = python-h11-0.16.0-2-any
+installed = python-httpcore-1.0.9-3-any
+installed = python-httpx-0.28.1-7-any
+installed = python-idna-3.11-2-any
+installed = python-iniconfig-2.3.0-1-any
+installed = python-installer-0.7.0-14-any
+installed = python-jaraco.collections-5.1.0-3-any
+installed = python-jaraco.context-6.0.1-3-any
+installed = python-jaraco.functools-4.1.0-3-any
+installed = python-jaraco.text-4.0.0-4-any
+installed = python-jinja-1:3.1.6-3-any
+installed = python-keyutils-0.6-12.1-x86_64_v3
+installed = python-mako-1.3.10-4-any
+installed = python-markdown-3.10.2-1-any
+installed = python-markupsafe-3.0.3-1.1-x86_64_v3
+installed = python-more-itertools-10.8.0-2-any
+installed = python-multidict-6.7.1-1.1-x86_64_v3
+installed = python-musicbrainzngs-0.7.1-10-any
+installed = python-mutagen-1.47.0-4-any
+installed = python-natsort-8.4.0-4-any
+installed = python-orjson-3.11.7-2.1-x86_64_v3
+installed = python-packaging-26.0-1-any
+installed = python-pillow-12.1.1-1-x86_64
+installed = python-pkg_resources-81.0.0-1-any
+installed = python-platformdirs-4.9.4-1-any
+installed = python-pluggy-1.6.0-3-any
+installed = python-propcache-0.4.1-2.1-x86_64_v3
+installed = python-psutil-7.2.2-1.1-x86_64_v3
+installed = python-pyamdgpuinfo-2.1.8-1-x86_64
+installed = python-pycups-2.0.4-4-x86_64
+installed = python-pydantic-2.12.5-4-any
+installed = python-pydantic-core-3:2.41.5-4.1-x86_64_v3
+installed = python-pygments-2.20.0-1-any
+installed = python-pylast-7.0.2-1-any
+installed = python-pyproject-hooks-1.2.0-6-any
+installed = python-pyqt5-5.15.11-6-x86_64
+installed = python-pyqt5-sip-12.18.0-1.1-x86_64_v3
+installed = python-pyqt6-6.10.2-4-x86_64
+installed = python-pyqt6-sip-13.11.1-1.1-x86_64_v3
+installed = python-pysdl3-0.9.11b0-1.1-x86_64_v3
+installed = python-pytest-1:8.4.2-3-any
+installed = python-pyxdg-0.28-7-any
+installed = python-reportlab-4.4.10-2-any
+installed = python-requests-2.33.1-1-any
+installed = python-send2trash-1.8.3-3-any
+installed = python-setproctitle-1.3.7-2.1-x86_64_v3
+installed = python-setuptools-1:82.0.1-1-any
+installed = python-shtab-1.8.0-2-any
+installed = python-soupsieve-2.8.3-1-any
+installed = python-typing-inspection-0.4.2-2-any
+installed = python-typing_extensions-4.15.0-3-any
+installed = python-unidecode-1.4.0-3-any
+installed = python-urllib3-2.6.3-1-any
+installed = python-websocket-client-1.9.0-3-any
+installed = python-wheel-0.46.3-1-any
+installed = python-yaml-6.0.3-2.1-x86_64_v3
+installed = python-yarl-1.23.0-1.1-x86_64_v3
+installed = qca-qt6-2.3.10-5-x86_64
+installed = qcoro-0.13.0-1-x86_64
+installed = qcustomplot-2.1.1-1.1-x86_64
+installed = qhexedit2-0.8.9-2.1-x86_64
+installed = qpdf-12.3.2-2.1-x86_64_v3
+installed = qqc2-breeze-style-6.6.3-1.1-x86_64_v3
+installed = qqc2-desktop-style-6.24.0-2.1-x86_64_v3
+installed = qrcodegencpp-cmake-1.8.0-4.13-x86_64_v3
+installed = qrencode-4.1.1-4.10-x86_64_v3
+installed = qscintilla-qt5-2.14.1-6-x86_64
+installed = qt-sudo-2.3.0-1-x86_64
+installed = qt5-base-5.15.18+kde+r109-2.1-x86_64_v3
+installed = qt5-declarative-5.15.18+kde+r23-1.1-x86_64_v3
+installed = qt5-graphicaleffects-5.15.18-1.1-x86_64_v3
+installed = qt5-imageformats-5.15.18+kde+r2-1.1-x86_64_v3
+installed = qt5-location-5.15.18+kde+r7-2.1-x86_64_v3
+installed = qt5-quickcontrols-5.15.18-1.1-x86_64_v3
+installed = qt5-quickcontrols2-5.15.18+kde+r5-1.1-x86_64_v3
+installed = qt5-svg-5.15.18+kde+r5-1.1-x86_64_v3
+installed = qt5-tools-5.15.18+kde+r3-2.1-x86_64_v3
+installed = qt5-translations-5.15.18-1-any
+installed = qt5-wayland-5.15.18+kde+r55-1.1-x86_64_v3
+installed = qt5-webchannel-5.15.18+kde+r3-1-x86_64
+installed = qt5-webengine-5.15.19-5-x86_64
+installed = qt5-x11extras-5.15.18-1.1-x86_64_v3
+installed = qt5ct-1.9-1.1-x86_64_v3
+installed = qt6-5compat-6.11.0-1.1-x86_64_v3
+installed = qt6-base-6.11.0-1.1-x86_64_v3
+installed = qt6-connectivity-6.11.0-1.1-x86_64_v3
+installed = qt6-declarative-6.11.0-1.1-x86_64_v3
+installed = qt6-graphs-6.11.0-1.1-x86_64_v3
+installed = qt6-imageformats-6.11.0-1.1-x86_64_v3
+installed = qt6-location-6.11.0-1.1-x86_64_v3
+installed = qt6-multimedia-6.11.0-1.1-x86_64_v3
+installed = qt6-multimedia-ffmpeg-6.11.0-1.1-x86_64_v3
+installed = qt6-positioning-6.11.0-1.1-x86_64_v3
+installed = qt6-quick3d-6.11.0-1.1-x86_64_v3
+installed = qt6-quicktimeline-6.11.0-1.1-x86_64_v3
+installed = qt6-scxml-6.11.0-1.1-x86_64_v3
+installed = qt6-shadertools-6.11.0-1.1-x86_64_v3
+installed = qt6-speech-6.11.0-1.1-x86_64_v3
+installed = qt6-svg-6.11.0-2.1-x86_64_v3
+installed = qt6-tools-6.11.0-1.1-x86_64_v3
+installed = qt6-translations-6.11.0-1-any
+installed = qt6-virtualkeyboard-6.11.0-1.1-x86_64_v3
+installed = qt6-wayland-6.11.0-1.1-x86_64_v3
+installed = qt6-webchannel-6.11.0-1.1-x86_64_v3
+installed = qt6-webengine-6.11.0-2-x86_64
+installed = qt6-websockets-6.11.0-1.1-x86_64_v3
+installed = qt6-webview-6.11.0-1.1-x86_64_v3
+installed = qt6ct-0.11-5.1-x86_64_v3
+installed = qtermwidget-2.3.0-2.1-x86_64_v3
+installed = radeontop-1.4-3.1-x86_64
+installed = raptor-2.0.16-9.1-x86_64_v3
+installed = rate-mirrors-0.28.2-2-x86_64
+installed = rav1e-0.8.1-2.1-x86_64_v3
+installed = re2-2:2025.11.05-3.1-x86_64_v3
+installed = readline-8.3.003-1.1-x86_64_v3
+installed = rebuild-detector-4.4.5-1-any
+installed = reflector-2023-5-any
+installed = rhash-1.4.6-1.1-x86_64_v3
+installed = ripgrep-15.1.0-2-x86_64_v3
+installed = ripgrep-all-0.10.10-1.1-x86_64_v3
+installed = rnnoise-1:0.2-1.1-x86_64
+installed = rofi-2.0.0-1.1-x86_64_v3
+installed = rpcbind-1.2.8-1.1-x86_64_v3
+installed = rsync-3.4.1-2.1-x86_64_v3
+installed = rtkit-0.14-1.1-x86_64_v3
+installed = rtmpdump-1:2.6-1.1-x86_64_v3
+installed = rubberband-4.0.0-2.1-x86_64_v3
+installed = rust-1:1.94.1-1.1-x86_64_v3
+installed = s-nail-14.9.25-1.1-x86_64_v3
+installed = sbc-2.2-1.1-x86_64_v3
+installed = scx-manager-1.15.10-2-x86_64
+installed = scx-scheds-1.1.0-1-x86_64
+installed = scx-tools-1.1.0-1.1-x86_64_v3
+installed = sd-1.1.0-1.1-x86_64_v3
+installed = sddm-0.21.0-8-x86_64_v3
+installed = sdl12-compat-1.2.68-2.1-x86_64
+installed = sdl2-compat-2.32.64-1.1-x86_64_v3
+installed = sdl3-3.4.2-1.1-x86_64_v3
+installed = sdl3_image-3.4.0-1.1-x86_64_v3
+installed = sdl_image-1.2.12-9.1-x86_64
+installed = seatd-0.9.3-1.1-x86_64_v3
+installed = sed-4.9-3.2-x86_64
+installed = semver-7.7.4-1-any
+installed = serd-0.32.8-1.1-x86_64_v3
+installed = sg3_utils-1.48-1.2-x86_64_v3
+installed = shaderc-2026.1-2.1-x86_64_v3
+installed = shadow-4.18.0-1.1-x86_64_v3
+installed = shared-mime-info-2.4-3.1-x86_64_v3
+installed = signon-kwallet-extension-25.12.3-1.1-x86_64_v3
+installed = signon-plugin-oauth2-0.25-3-x86_64
+installed = signon-ui-0.17+20231016-3.1-x86_64
+installed = signond-8.61-3.1-x86_64
+installed = simde-0.8.2-1-any
+installed = simdjson-1:4.4.2-1.1-x86_64_v3
+installed = slang-2.3.3-4.1-x86_64_v3
+installed = slurp-1.5.0-1.1-x86_64
+installed = smartmontools-7.5-1.1-x86_64_v3
+installed = smbclient-2:4.24.0-1.1-x86_64_v3
+installed = snappy-1.2.2-3.1-x86_64_v3
+installed = sndio-1.10.0-1.4-x86_64_v3
+installed = socat-1.8.1.1-1.1-x86_64_v3
+installed = sof-firmware-2025.12.2-1-x86_64
+installed = solid-6.24.0-2.1-x86_64_v3
+installed = sonnet-6.24.0-2.1-x86_64_v3
+installed = sord-0.16.22-1.1-x86_64_v3
+installed = sound-theme-freedesktop-0.8-6-any
+installed = soundtouch-2.4.0-1.1-x86_64_v3
+installed = spandsp-0.0.6-7-x86_64
+installed = spdlog-1.17.0-2.1-x86_64_v3
+installed = spectacle-1:6.6.3-2.1-x86_64_v3
+installed = speech-dispatcher-0.12.1-3.1-x86_64_v3
+installed = speex-1.2.1-2.1-x86_64
+installed = speexdsp-1.2.1-2.1-x86_64
+installed = spirv-llvm-translator-22.1.0-1.1-x86_64_v3
+installed = spirv-tools-1:1.4.341.0-2.1-x86_64_v3
+installed = splix-2.0.1-2.1-x86_64_v3
+installed = sqlcipher-4.14.0-1.1-x86_64_v3
+installed = sqlite-3.52.0-2-x86_64_v3
+installed = sqlitebrowser-3.13.1-3.1-x86_64_v3
+installed = sratom-0.6.22-1.1-x86_64_v3
+installed = srt-1.5.4-1.1-x86_64
+installed = starship-1.24.2-2-x86_64
+installed = startup-notification-0.12-9.1-x86_64_v3
+installed = stremio-4.4.176-2-x86_64
+installed = sudo-1.9.17.p2-2.1-x86_64_v3
+installed = svt-av1-4.1.0-2-x86_64_v3
+installed = svt-hevc-1.5.1-3.2-x86_64_v3
+installed = swappy-1.8.0-1.1-x86_64_v3
+installed = swaylock-effects-git-r470.496059a-1-x86_64
+installed = syndication-6.24.0-2.1-x86_64_v3
+installed = syntax-highlighting-6.24.0-2.2-x86_64_v3
+installed = sysfsutils-2.1.1-2.2-x86_64_v3
+installed = system-config-printer-1.5.18-6-x86_64
+installed = systemd-260.1-1-x86_64
+installed = systemd-libs-260.1-1-x86_64
+installed = systemd-resolvconf-260.1-1-x86_64
+installed = systemd-sysvcompat-260.1-1-x86_64
+installed = systemsettings-6.6.3-1.1-x86_64_v3
+installed = taglib-2.2.1-1.1-x86_64_v3
+installed = talloc-2.4.4-1.1-x86_64_v3
+installed = tar-1.35-2.1-x86_64
+installed = tauon-music-box-9.1.2-1.1-x86_64_v3
+installed = tcl-8.6.16-1.1-x86_64
+installed = tdb-1.4.15-1.1-x86_64_v3
+installed = tealdeer-1.8.1-2.1-x86_64_v3
+installed = tevent-1:0.17.1-2.1-x86_64_v3
+installed = texinfo-7.2-1.1-x86_64_v3
+installed = thin-provisioning-tools-1.3.1-1.1-x86_64_v3
+installed = thunderbird-149.0.1-1.1-x86_64_v3
+installed = tinysparql-3.10.1-2-x86_64
+installed = tomlplusplus-3.4.0-1.1-x86_64
+installed = tpm2-tss-4.1.3-1.1-x86_64
+installed = tslib-1.24-1.1-x86_64_v3
+installed = ttf-bitstream-vera-1.10-16-any
+installed = ttf-dejavu-2.37+18+g9b5d1b2f-7-any
+installed = ttf-fantasque-nerd-3.4.0-2-any
+installed = ttf-fira-sans-1:4.301-2-any
+installed = ttf-hack-3.003-7-any
+installed = ttf-jetbrains-mono-nerd-3.4.0-2-any
+installed = ttf-liberation-2.1.5-2-any
+installed = ttf-meslo-nerd-3.4.0-2-any
+installed = ttf-opensans-3.003-1-any
+installed = twolame-0.4.0-4.1-x86_64
+installed = tzdata-2026a-1.1-x86_64_v3
+installed = uchardet-0.0.8-4.1-x86_64_v3
+installed = udiskie-2.6.2-1-any
+installed = udisks2-2.11.1-2.1-x86_64_v3
+installed = ufw-0.36.2-7-any
+installed = ufw-extras-1.1.0-2-any
+installed = unrar-1:7.2.5-1.1-x86_64_v3
+installed = unzip-6.0-23.1-x86_64_v3
+installed = upower-1.91.1-1.1-x86_64_v3
+installed = usb_modeswitch-2.6.2.20251207-1.1-x86_64_v3
+installed = usbmuxd-1.1.1-4.1-x86_64
+installed = usbutils-019-1.1-x86_64_v3
+installed = uthash-2.3.0-2-any
+installed = util-linux-2.41.3-2.1-x86_64_v3
+installed = util-linux-libs-2.41.3-2.1-x86_64_v3
+installed = v4l-utils-1.32.0-2.1-x86_64_v3
+installed = vapoursynth-73-2.1-x86_64_v3
+installed = verdict-1.4.4-1.1-x86_64_v3
+installed = vesktop-1.6.5-1-x86_64
+installed = vid.stab-1.1.1-2.1-x86_64
+installed = vim-9.2.0272-1.1-x86_64_v3
+installed = vim-runtime-9.2.0272-1.1-x86_64_v3
+installed = virtualbox-7.2.6-4-x86_64
+installed = virtualbox-host-modules-arch-7.2.6-10.1-x86_64_v3
+installed = vlc-3.0.22-2.1-x86_64_v3
+installed = vlc-cli-3.0.22-2.1-x86_64_v3
+installed = vlc-gui-qt-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-a52dec-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-aalib-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-alsa-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-aom-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-archive-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-aribb24-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-aribb25-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-ass-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-avahi-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-bluray-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-caca-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-cddb-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-chromecast-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-dav1d-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-dbus-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-dbus-screensaver-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-dca-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-dvb-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-dvd-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-faad2-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-ffmpeg-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-firewire-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-flac-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-fluidsynth-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-freetype-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-gme-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-gnutls-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-gstreamer-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-inflate-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-jack-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-journal-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-jpeg-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-kate-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-kwallet-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-libsecret-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-lirc-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-live555-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-lua-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-mad-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-matroska-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-mdns-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-modplug-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-mpeg2-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-mpg123-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-mtp-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-musepack-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-nfs-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-notify-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-ogg-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-opus-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-png-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-pulse-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-quicksync-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-samplerate-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-sdl-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-sftp-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-shout-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-smb-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-soxr-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-speex-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-srt-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-svg-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-tag-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-theora-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-twolame-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-udev-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-upnp-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-vorbis-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-vpx-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-x264-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-x265-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-xml-3.0.22-2.1-x86_64_v3
+installed = vlc-plugin-zvbi-3.0.22-2.1-x86_64_v3
+installed = vlc-plugins-all-3.0.22-2.1-x86_64_v3
+installed = vlc-plugins-base-3.0.22-2.1-x86_64_v3
+installed = vlc-plugins-extra-3.0.22-2.1-x86_64_v3
+installed = vlc-plugins-video-output-3.0.22-2.1-x86_64_v3
+installed = vlc-plugins-visualization-3.0.22-2.1-x86_64_v3
+installed = vmaf-3.0.0-2.1-x86_64_v3
+installed = volume_key-0.3.12-12.1-x86_64_v3
+installed = vulkan-icd-loader-1.4.341.0-1.1-x86_64_v3
+installed = vulkan-mesa-implicit-layers-2:26.0.3-2-x86_64
+installed = vulkan-radeon-2:26.0.3-2-x86_64
+installed = vulkan-tools-1.4.341.0-2.1-x86_64_v3
+installed = wavpack-5.9.0-1.1-x86_64_v3
+installed = waybar-0.15.0-2.1-x86_64_v3
+installed = wayland-1.24.0-1.1-x86_64_v3
+installed = wayland-protocols-1.47-1-any
+installed = wayland-utils-1.3.0-1.1-x86_64_v3
+installed = webkit2gtk-4.1-2.50.6-1-x86_64
+installed = webrtc-audio-processing-2.1-6.1-x86_64_v3
+installed = webrtc-audio-processing-1-1.3-5.1-x86_64_v3
+installed = wget-1.25.0-3.1-x86_64_v3
+installed = which-2.23-1.1-x86_64_v3
+installed = wildmidi-0.4.6-1.1-x86_64
+installed = wireless-regdb-2026.02.04-1-any
+installed = wireplumber-0.5.14-1.1-x86_64_v3
+installed = wl-clipboard-1:2.3.0-1.1-x86_64_v3
+installed = wlogout-1.2.2-0-x86_64
+installed = woff2-1.0.2-6.1-x86_64_v3
+installed = wpa_supplicant-2:2.11-5.1-x86_64_v3
+installed = x264-3:0.165.r3222.b35605a-2.1-x86_64_v3
+installed = x265-4.1-1.1-x86_64_v3
+installed = xcb-imdkit-1.0.9-1.1-x86_64
+installed = xcb-proto-1.17.0-4-any
+installed = xcb-util-0.4.1-2.2-x86_64_v3
+installed = xcb-util-cursor-0.1.6-1.1-x86_64_v3
+installed = xcb-util-errors-1.0.1-2.1-x86_64
+installed = xcb-util-image-0.4.1-3.1-x86_64
+installed = xcb-util-keysyms-0.4.1-5.1-x86_64
+installed = xcb-util-renderutil-0.3.10-2.1-x86_64
+installed = xcb-util-wm-0.4.2-2.1-x86_64
+installed = xcur2png-0.7.1-8.1-x86_64
+installed = xdg-dbus-proxy-0.1.6-1.1-x86_64
+installed = xdg-desktop-portal-1.20.3-2.1-x86_64_v3
+installed = xdg-desktop-portal-gtk-1.15.3-1.1-x86_64_v3
+installed = xdg-desktop-portal-kde-6.6.3-1.1-x86_64_v3
+installed = xdg-user-dirs-0.19-2.1-x86_64_v3
+installed = xdg-utils-1.2.1-2-any
+installed = xf86-input-libinput-1.5.0-1.2-x86_64_v3
+installed = xf86-video-amdgpu-25.0.0-1.1-x86_64_v3
+installed = xfsprogs-6.19.0-1.1-x86_64_v3
+installed = xkeyboard-config-2.47-1-any
+installed = xl2tpd-1.3.20-1.1-x86_64_v3
+installed = xorg-fonts-encodings-1.1.0-1-any
+installed = xorg-server-21.1.21-1.1-x86_64_v3
+installed = xorg-server-common-21.1.21-1.1-x86_64_v3
+installed = xorg-setxkbmap-1.3.5-1.1-x86_64_v3
+installed = xorg-xauth-1.1.5-1.1-x86_64_v3
+installed = xorg-xdpyinfo-1.4.0-1.1-x86_64_v3
+installed = xorg-xkbcomp-1.5.0-1.1-x86_64_v3
+installed = xorg-xmessage-1.0.7-1.1-x86_64
+installed = xorg-xmodmap-1.0.11-2.1-x86_64
+installed = xorg-xprop-1.2.8-1.1-x86_64
+installed = xorg-xrdb-1.2.2-2.1-x86_64
+installed = xorg-xwayland-24.1.9-1.1-x86_64_v3
+installed = xorgproto-2025.1-1-any
+installed = xsettingsd-1.0.2-3.1-x86_64_v3
+installed = xvidcore-1.3.7-3.1-x86_64
+installed = xxhash-0.8.3-1-x86_64
+installed = xz-5.8.2-2-x86_64_v3
+installed = yarn-1.22.22-2-any
+installed = yay-12.5.7-1-x86_64
+installed = yt-dlp-2026.03.17-1-any
+installed = yt-dlp-ejs-0.8.0-1-any
+installed = yyjson-0.12.0-1.1-x86_64_v3
+installed = zbar-0.23.93-5.1-x86_64_v3
+installed = zeromq-4.3.5-3.1-x86_64_v3
+installed = zimg-3.0.6-1.1-x86_64_v3
+installed = zint-2.16.0-1.1-x86_64_v3
+installed = zita-convolver-4.0.3-5.1-x86_64_v3
+installed = zix-0.8.0-1.1-x86_64_v3
+installed = zlib-ng-2.3.3-2-x86_64_v3
+installed = zlib-ng-compat-2.3.3-2-x86_64_v3
+installed = zram-generator-1.2.1-1.1-x86_64
+installed = zsh-5.9-5.1-x86_64
+installed = zsh-autosuggestions-0.7.1-1-any
+installed = zsh-completions-0.36.0-1-any
+installed = zsh-history-substring-search-1.1.0-2-any
+installed = zsh-syntax-highlighting-0.8.0-1-any
+installed = zsh-theme-powerlevel10k-git-r4322.604f19a9-1-x86_64
+installed = zstd-1.5.7-2-x86_64_v3
+installed = zvbi-0.2.44-1.1-x86_64_v3
+installed = zxing-cpp-3.0.2-1.1-x86_64_v3
diff --git a/pkg/lunar-code/.MTREE b/pkg/lunar-code/.MTREE
new file mode 100644
index 0000000..8fc1e1d
Binary files /dev/null and b/pkg/lunar-code/.MTREE differ
diff --git a/pkg/lunar-code/.PKGINFO b/pkg/lunar-code/.PKGINFO
new file mode 100644
index 0000000..7a53ae0
--- /dev/null
+++ b/pkg/lunar-code/.PKGINFO
@@ -0,0 +1,19 @@
+# Generated by makepkg 7.1.0
+# using fakeroot version 1.37.2
+pkgname = lunar-code
+pkgbase = lunar-code
+xdata = pkgtype=pkg
+pkgver = 0.1.0-1
+pkgdesc = Lunar Code - A lightweight code editor
+url = https://github.com/luna/lunar-code
+builddate = 1775255169
+packager = Unknown Packager
+size = 11082428
+arch = x86_64
+license = MIT
+provides = lunar-code
+depend = webkit2gtk-4.1
+depend = gtk3
+depend = cairo
+depend = glib2
+depend = hicolor-icon-theme
diff --git a/pkg/lunar-code/usr/bin/lunar-code b/pkg/lunar-code/usr/bin/lunar-code
new file mode 100755
index 0000000..1c838c2
Binary files /dev/null and b/pkg/lunar-code/usr/bin/lunar-code differ
diff --git a/pkg/lunar-code/usr/share/applications/lunar-code.desktop b/pkg/lunar-code/usr/share/applications/lunar-code.desktop
new file mode 100644
index 0000000..987b034
--- /dev/null
+++ b/pkg/lunar-code/usr/share/applications/lunar-code.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Name=Lunar Code
+Comment=A lightweight code editor
+Exec=lunar-code %F
+Icon=lunar-code
+Terminal=false
+Type=Application
+Categories=Development;TextEditor;IDE;
+Keywords=code;editor;programming;
+MimeType=text/plain;text/x-csrc;text/x-c++src;text/x-java;text/x-python;text/javascript;application/json;text/html;text/css;text/xml;text/x-rust;
diff --git a/pkg/lunar-code/usr/share/icons/hicolor/256x256/apps/lunar-code.png b/pkg/lunar-code/usr/share/icons/hicolor/256x256/apps/lunar-code.png
new file mode 100644
index 0000000..e81bece
Binary files /dev/null and b/pkg/lunar-code/usr/share/icons/hicolor/256x256/apps/lunar-code.png differ
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..eace975
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,3311 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@babel/runtime':
+ specifier: ^7.29.2
+ version: 7.29.2
+ '@codemirror/autocomplete':
+ specifier: ^6.20.1
+ version: 6.20.1
+ '@codemirror/commands':
+ specifier: ^6.10.3
+ version: 6.10.3
+ '@codemirror/lang-cpp':
+ specifier: ^6.0.3
+ version: 6.0.3
+ '@codemirror/lang-css':
+ specifier: ^6.3.1
+ version: 6.3.1
+ '@codemirror/lang-go':
+ specifier: ^6.0.1
+ version: 6.0.1
+ '@codemirror/lang-html':
+ specifier: ^6.4.11
+ version: 6.4.11
+ '@codemirror/lang-java':
+ specifier: ^6.0.2
+ version: 6.0.2
+ '@codemirror/lang-javascript':
+ specifier: ^6.2.5
+ version: 6.2.5
+ '@codemirror/lang-json':
+ specifier: ^6.0.2
+ version: 6.0.2
+ '@codemirror/lang-markdown':
+ specifier: ^6.5.0
+ version: 6.5.0
+ '@codemirror/lang-php':
+ specifier: ^6.0.2
+ version: 6.0.2
+ '@codemirror/lang-python':
+ specifier: ^6.2.1
+ version: 6.2.1
+ '@codemirror/lang-rust':
+ specifier: ^6.0.2
+ version: 6.0.2
+ '@codemirror/lang-sql':
+ specifier: ^6.10.0
+ version: 6.10.0
+ '@codemirror/lang-xml':
+ specifier: ^6.1.0
+ version: 6.1.0
+ '@codemirror/lang-yaml':
+ specifier: ^6.1.3
+ version: 6.1.3
+ '@codemirror/language':
+ specifier: ^6.12.3
+ version: 6.12.3
+ '@codemirror/legacy-modes':
+ specifier: ^6.5.2
+ version: 6.5.2
+ '@codemirror/lint':
+ specifier: ^6.9.5
+ version: 6.9.5
+ '@codemirror/search':
+ specifier: ^6.6.0
+ version: 6.6.0
+ '@codemirror/state':
+ specifier: ^6.6.0
+ version: 6.6.0
+ '@codemirror/view':
+ specifier: ^6.41.0
+ version: 6.41.0
+ '@radix-ui/react-collapsible':
+ specifier: ^1.1.12
+ version: 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-context-menu':
+ specifier: ^2.2.16
+ version: 2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-dialog':
+ specifier: ^1.1.15
+ version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-dropdown-menu':
+ specifier: ^2.1.16
+ version: 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-menubar':
+ specifier: ^1.1.16
+ version: 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-scroll-area':
+ specifier: ^1.2.10
+ version: 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-select':
+ specifier: ^2.2.6
+ version: 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-separator':
+ specifier: ^1.1.8
+ version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-slot':
+ specifier: ^1.2.4
+ version: 1.2.4(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-tabs':
+ specifier: ^1.1.13
+ version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-tooltip':
+ specifier: ^1.2.8
+ version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-visually-hidden':
+ specifier: ^1.2.4
+ version: 1.2.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@tailwindcss/vite':
+ specifier: ^4.2.2
+ version: 4.2.2(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0))
+ '@tauri-apps/api':
+ specifier: ^2
+ 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
+ version: 2.5.3
+ '@tauri-apps/plugin-shell':
+ specifier: ^2.3.5
+ version: 2.3.5
+ '@uiw/codemirror-theme-vscode':
+ specifier: ^4.25.9
+ version: 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)
+ '@xterm/addon-fit':
+ specifier: ^0.11.0
+ version: 0.11.0
+ '@xterm/addon-web-links':
+ specifier: ^0.12.0
+ version: 0.12.0
+ '@xterm/xterm':
+ specifier: ^6.0.0
+ version: 6.0.0
+ class-variance-authority:
+ specifier: ^0.7.1
+ version: 0.7.1
+ clsx:
+ specifier: ^2.1.1
+ version: 2.1.1
+ cmdk:
+ specifier: ^1.1.1
+ version: 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ lucide-react:
+ specifier: ^1.7.0
+ version: 1.7.0(react@19.2.4)
+ react:
+ specifier: ^19.1.0
+ version: 19.2.4
+ react-dom:
+ specifier: ^19.1.0
+ version: 19.2.4(react@19.2.4)
+ react-resizable-panels:
+ specifier: ^4.9.0
+ version: 4.9.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ sonner:
+ specifier: ^2.0.7
+ version: 2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ tailwind-merge:
+ specifier: ^3.5.0
+ version: 3.5.0
+ tailwindcss:
+ specifier: ^4.2.2
+ version: 4.2.2
+ devDependencies:
+ '@tauri-apps/cli':
+ specifier: ^2
+ version: 2.10.1
+ '@types/react':
+ specifier: ^19.1.8
+ version: 19.2.14
+ '@types/react-dom':
+ specifier: ^19.1.6
+ version: 19.2.3(@types/react@19.2.14)
+ '@vitejs/plugin-react':
+ specifier: ^4.6.0
+ version: 4.7.0(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0))
+ typescript:
+ specifier: ~5.8.3
+ version: 5.8.3
+ vite:
+ specifier: ^7.0.4
+ version: 7.3.1(jiti@2.6.1)(lightningcss@1.32.0)
+
+packages:
+
+ '@babel/code-frame@7.29.0':
+ resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.29.0':
+ resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.29.0':
+ resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.29.1':
+ resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.28.6':
+ resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-globals@7.28.0':
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.28.6':
+ resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.28.6':
+ resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-plugin-utils@7.28.6':
+ resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.29.2':
+ resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.29.2':
+ resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1':
+ resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1':
+ resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/runtime@7.29.2':
+ resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.28.6':
+ resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.29.0':
+ resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.29.0':
+ resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
+ engines: {node: '>=6.9.0'}
+
+ '@codemirror/autocomplete@6.20.1':
+ resolution: {integrity: sha512-1cvg3Vz1dSSToCNlJfRA2WSI4ht3K+WplO0UMOgmUYPivCyy2oueZY6Lx7M9wThm7SDUBViRmuT+OG/i8+ON9A==}
+
+ '@codemirror/commands@6.10.3':
+ resolution: {integrity: sha512-JFRiqhKu+bvSkDLI+rUhJwSxQxYb759W5GBezE8Uc8mHLqC9aV/9aTC7yJSqCtB3F00pylrLCwnyS91Ap5ej4Q==}
+
+ '@codemirror/lang-cpp@6.0.3':
+ resolution: {integrity: sha512-URM26M3vunFFn9/sm6rzqrBzDgfWuDixp85uTY49wKudToc2jTHUrKIGGKs+QWND+YLofNNZpxcNGRynFJfvgA==}
+
+ '@codemirror/lang-css@6.3.1':
+ resolution: {integrity: sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==}
+
+ '@codemirror/lang-go@6.0.1':
+ resolution: {integrity: sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==}
+
+ '@codemirror/lang-html@6.4.11':
+ resolution: {integrity: sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==}
+
+ '@codemirror/lang-java@6.0.2':
+ resolution: {integrity: sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ==}
+
+ '@codemirror/lang-javascript@6.2.5':
+ resolution: {integrity: sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A==}
+
+ '@codemirror/lang-json@6.0.2':
+ resolution: {integrity: sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==}
+
+ '@codemirror/lang-markdown@6.5.0':
+ resolution: {integrity: sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==}
+
+ '@codemirror/lang-php@6.0.2':
+ resolution: {integrity: sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==}
+
+ '@codemirror/lang-python@6.2.1':
+ resolution: {integrity: sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==}
+
+ '@codemirror/lang-rust@6.0.2':
+ resolution: {integrity: sha512-EZaGjCUegtiU7kSMvOfEZpaCReowEf3yNidYu7+vfuGTm9ow4mthAparY5hisJqOHmJowVH3Upu+eJlUji6qqA==}
+
+ '@codemirror/lang-sql@6.10.0':
+ resolution: {integrity: sha512-6ayPkEd/yRw0XKBx5uAiToSgGECo/GY2NoJIHXIIQh1EVwLuKoU8BP/qK0qH5NLXAbtJRLuT73hx7P9X34iO4w==}
+
+ '@codemirror/lang-xml@6.1.0':
+ resolution: {integrity: sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==}
+
+ '@codemirror/lang-yaml@6.1.3':
+ resolution: {integrity: sha512-AZ8DJBuXGVHybpBQhmZtgew5//4hv3tdkXnr3vDmOUMJRuB6vn/uuwtmTOTlqEaQFg3hQSVeA90NmvIQyUV6FQ==}
+
+ '@codemirror/language@6.12.3':
+ resolution: {integrity: sha512-QwCZW6Tt1siP37Jet9Tb02Zs81TQt6qQrZR2H+eGMcFsL1zMrk2/b9CLC7/9ieP1fjIUMgviLWMmgiHoJrj+ZA==}
+
+ '@codemirror/legacy-modes@6.5.2':
+ resolution: {integrity: sha512-/jJbwSTazlQEDOQw2FJ8LEEKVS72pU0lx6oM54kGpL8t/NJ2Jda3CZ4pcltiKTdqYSRk3ug1B3pil1gsjA6+8Q==}
+
+ '@codemirror/lint@6.9.5':
+ resolution: {integrity: sha512-GElsbU9G7QT9xXhpUg1zWGmftA/7jamh+7+ydKRuT0ORpWS3wOSP0yT1FOlIZa7mIJjpVPipErsyvVqB9cfTFA==}
+
+ '@codemirror/search@6.6.0':
+ resolution: {integrity: sha512-koFuNXcDvyyotWcgOnZGmY7LZqEOXZaaxD/j6n18TCLx2/9HieZJ5H6hs1g8FiRxBD0DNfs0nXn17g872RmYdw==}
+
+ '@codemirror/state@6.6.0':
+ resolution: {integrity: sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ==}
+
+ '@codemirror/view@6.41.0':
+ resolution: {integrity: sha512-6H/qadXsVuDY219Yljhohglve8xf4B8xJkVOEWfA5uiYKiTFppjqsvsfR5iPA0RbvRBoOyTZpbLIxe9+0UR8xA==}
+
+ '@esbuild/aix-ppc64@0.27.7':
+ resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.27.7':
+ resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.27.7':
+ resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.27.7':
+ resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.27.7':
+ resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.27.7':
+ resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.27.7':
+ resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.27.7':
+ resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.27.7':
+ resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.27.7':
+ resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.27.7':
+ resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.27.7':
+ resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.27.7':
+ resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.27.7':
+ resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.27.7':
+ resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.27.7':
+ resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.27.7':
+ resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.27.7':
+ resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.27.7':
+ resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.27.7':
+ resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.27.7':
+ resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.27.7':
+ resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.27.7':
+ resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.27.7':
+ resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.27.7':
+ resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.27.7':
+ resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@floating-ui/core@1.7.5':
+ resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==}
+
+ '@floating-ui/dom@1.7.6':
+ resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==}
+
+ '@floating-ui/react-dom@2.1.8':
+ resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
+ '@floating-ui/utils@0.2.11':
+ resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==}
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@lezer/common@1.5.1':
+ resolution: {integrity: sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw==}
+
+ '@lezer/cpp@1.1.5':
+ resolution: {integrity: sha512-DIhSXmYtJKLehrjzDFN+2cPt547ySQ41nA8yqcDf/GxMc+YM736xqltFkvADL2M0VebU5I+3+4ks2Vv+Kyq3Aw==}
+
+ '@lezer/css@1.3.3':
+ resolution: {integrity: sha512-RzBo8r+/6QJeow7aPHIpGVIH59xTcJXp399820gZoMo9noQDRVpJLheIBUicYwKcsbOYoBRoLZlf2720dG/4Tg==}
+
+ '@lezer/go@1.0.1':
+ resolution: {integrity: sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==}
+
+ '@lezer/highlight@1.2.3':
+ resolution: {integrity: sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==}
+
+ '@lezer/html@1.3.13':
+ resolution: {integrity: sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==}
+
+ '@lezer/java@1.1.3':
+ resolution: {integrity: sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw==}
+
+ '@lezer/javascript@1.5.4':
+ resolution: {integrity: sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==}
+
+ '@lezer/json@1.0.3':
+ resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==}
+
+ '@lezer/lr@1.4.8':
+ resolution: {integrity: sha512-bPWa0Pgx69ylNlMlPvBPryqeLYQjyJjqPx+Aupm5zydLIF3NE+6MMLT8Yi23Bd9cif9VS00aUebn+6fDIGBcDA==}
+
+ '@lezer/markdown@1.6.3':
+ resolution: {integrity: sha512-jpGm5Ps+XErS+xA4urw7ogEGkeZOahVQF21Z6oECF0sj+2liwZopd2+I8uH5I/vZsRuuze3OxBREIANLf6KKUw==}
+
+ '@lezer/php@1.0.5':
+ resolution: {integrity: sha512-W7asp9DhM6q0W6DYNwIkLSKOvxlXRrif+UXBMxzsJUuqmhE7oVU+gS3THO4S/Puh7Xzgm858UNaFi6dxTP8dJA==}
+
+ '@lezer/python@1.1.18':
+ resolution: {integrity: sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==}
+
+ '@lezer/rust@1.0.2':
+ resolution: {integrity: sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==}
+
+ '@lezer/xml@1.0.6':
+ resolution: {integrity: sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==}
+
+ '@lezer/yaml@1.0.4':
+ resolution: {integrity: sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw==}
+
+ '@marijn/find-cluster-break@1.0.2':
+ resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==}
+
+ '@radix-ui/number@1.1.1':
+ resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==}
+
+ '@radix-ui/primitive@1.1.3':
+ resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==}
+
+ '@radix-ui/react-arrow@1.1.7':
+ resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-collapsible@1.1.12':
+ resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-collection@1.1.7':
+ resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-compose-refs@1.1.2':
+ resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-context-menu@2.2.16':
+ resolution: {integrity: sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-context@1.1.2':
+ resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-dialog@1.1.15':
+ resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-direction@1.1.1':
+ resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-dismissable-layer@1.1.11':
+ resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-dropdown-menu@2.1.16':
+ resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-focus-guards@1.1.3':
+ resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-focus-scope@1.1.7':
+ resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-id@1.1.1':
+ resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-menu@2.1.16':
+ resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-menubar@1.1.16':
+ resolution: {integrity: sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-popper@1.2.8':
+ resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-portal@1.1.9':
+ resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-presence@1.1.5':
+ resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-primitive@2.1.3':
+ resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-primitive@2.1.4':
+ resolution: {integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-roving-focus@1.1.11':
+ resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-scroll-area@1.2.10':
+ resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-select@2.2.6':
+ resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-separator@1.1.8':
+ resolution: {integrity: sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-slot@1.2.3':
+ resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-slot@1.2.4':
+ resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-tabs@1.1.13':
+ resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-tooltip@1.2.8':
+ resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-use-callback-ref@1.1.1':
+ resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-controllable-state@1.2.2':
+ resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-effect-event@0.0.2':
+ resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-escape-keydown@1.1.1':
+ resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-layout-effect@1.1.1':
+ resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-previous@1.1.1':
+ resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-rect@1.1.1':
+ resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-size@1.1.1':
+ resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-visually-hidden@1.2.3':
+ resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-visually-hidden@1.2.4':
+ resolution: {integrity: sha512-kaeiyGCe844dkb9AVF+rb4yTyb1LiLN/e3es3nLiRyN4dC8AduBYPMnnNlDjX2VDOcvDEiPnRNMJeWCfsX0txg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/rect@1.1.1':
+ resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
+
+ '@rolldown/pluginutils@1.0.0-beta.27':
+ resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==}
+
+ '@rollup/rollup-android-arm-eabi@4.60.1':
+ resolution: {integrity: sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.60.1':
+ resolution: {integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.60.1':
+ resolution: {integrity: sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.60.1':
+ resolution: {integrity: sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.60.1':
+ resolution: {integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.60.1':
+ resolution: {integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.60.1':
+ resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.60.1':
+ resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==}
+ cpu: [arm]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-arm64-gnu@4.60.1':
+ resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-arm64-musl@4.60.1':
+ resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-loong64-gnu@4.60.1':
+ resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==}
+ cpu: [loong64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-loong64-musl@4.60.1':
+ resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==}
+ cpu: [loong64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.60.1':
+ resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-ppc64-musl@4.60.1':
+ resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.60.1':
+ resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-riscv64-musl@4.60.1':
+ resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-s390x-gnu@4.60.1':
+ resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-x64-gnu@4.60.1':
+ resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-x64-musl@4.60.1':
+ resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-openbsd-x64@4.60.1':
+ resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@rollup/rollup-openharmony-arm64@4.60.1':
+ resolution: {integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.60.1':
+ resolution: {integrity: sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.60.1':
+ resolution: {integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.60.1':
+ resolution: {integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.60.1':
+ resolution: {integrity: sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@tailwindcss/node@4.2.2':
+ resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==}
+
+ '@tailwindcss/oxide-android-arm64@4.2.2':
+ resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [android]
+
+ '@tailwindcss/oxide-darwin-arm64@4.2.2':
+ resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-darwin-x64@4.2.2':
+ resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-freebsd-x64@4.2.2':
+ resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2':
+ resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==}
+ engines: {node: '>= 20'}
+ cpu: [arm]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.2.2':
+ resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.2.2':
+ resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.2.2':
+ resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@tailwindcss/oxide-linux-x64-musl@4.2.2':
+ resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@tailwindcss/oxide-wasm32-wasi@4.2.2':
+ resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+ bundledDependencies:
+ - '@napi-rs/wasm-runtime'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ - '@tybys/wasm-util'
+ - '@emnapi/wasi-threads'
+ - tslib
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.2.2':
+ resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.2.2':
+ resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [win32]
+
+ '@tailwindcss/oxide@4.2.2':
+ resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==}
+ engines: {node: '>= 20'}
+
+ '@tailwindcss/vite@4.2.2':
+ resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==}
+ peerDependencies:
+ vite: ^5.2.0 || ^6 || ^7 || ^8
+
+ '@tauri-apps/api@2.10.1':
+ resolution: {integrity: sha512-hKL/jWf293UDSUN09rR69hrToyIXBb8CjGaWC7gfinvnQrBVvnLr08FeFi38gxtugAVyVcTa5/FD/Xnkb1siBw==}
+
+ '@tauri-apps/cli-darwin-arm64@2.10.1':
+ resolution: {integrity: sha512-Z2OjCXiZ+fbYZy7PmP3WRnOpM9+Fy+oonKDEmUE6MwN4IGaYqgceTjwHucc/kEEYZos5GICve35f7ZiizgqEnQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@tauri-apps/cli-darwin-x64@2.10.1':
+ resolution: {integrity: sha512-V/irQVvjPMGOTQqNj55PnQPVuH4VJP8vZCN7ajnj+ZS8Kom1tEM2hR3qbbIRoS3dBKs5mbG8yg1WC+97dq17Pw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@tauri-apps/cli-linux-arm-gnueabihf@2.10.1':
+ resolution: {integrity: sha512-Hyzwsb4VnCWKGfTw+wSt15Z2pLw2f0JdFBfq2vHBOBhvg7oi6uhKiF87hmbXOBXUZaGkyRDkCHsdzJcIfoJC2w==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@tauri-apps/cli-linux-arm64-gnu@2.10.1':
+ resolution: {integrity: sha512-OyOYs2t5GkBIvyWjA1+h4CZxTcdz1OZPCWAPz5DYEfB0cnWHERTnQ/SLayQzncrT0kwRoSfSz9KxenkyJoTelA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@tauri-apps/cli-linux-arm64-musl@2.10.1':
+ resolution: {integrity: sha512-MIj78PDDGjkg3NqGptDOGgfXks7SYJwhiMh8SBoZS+vfdz7yP5jN18bNaLnDhsVIPARcAhE1TlsZe/8Yxo2zqg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@tauri-apps/cli-linux-riscv64-gnu@2.10.1':
+ resolution: {integrity: sha512-X0lvOVUg8PCVaoEtEAnpxmnkwlE1gcMDTqfhbefICKDnOTJ5Est3qL0SrWxizDackIOKBcvtpejrSiVpuJI1kw==}
+ engines: {node: '>= 10'}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@tauri-apps/cli-linux-x64-gnu@2.10.1':
+ resolution: {integrity: sha512-2/12bEzsJS9fAKybxgicCDFxYD1WEI9kO+tlDwX5znWG2GwMBaiWcmhGlZ8fi+DMe9CXlcVarMTYc0L3REIRxw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@tauri-apps/cli-linux-x64-musl@2.10.1':
+ resolution: {integrity: sha512-Y8J0ZzswPz50UcGOFuXGEMrxbjwKSPgXftx5qnkuMs2rmwQB5ssvLb6tn54wDSYxe7S6vlLob9vt0VKuNOaCIQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@tauri-apps/cli-win32-arm64-msvc@2.10.1':
+ resolution: {integrity: sha512-iSt5B86jHYAPJa/IlYw++SXtFPGnWtFJriHn7X0NFBVunF6zu9+/zOn8OgqIWSl8RgzhLGXQEEtGBdR4wzpVgg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@tauri-apps/cli-win32-ia32-msvc@2.10.1':
+ resolution: {integrity: sha512-gXyxgEzsFegmnWywYU5pEBURkcFN/Oo45EAwvZrHMh+zUSEAvO5E8TXsgPADYm31d1u7OQU3O3HsYfVBf2moHw==}
+ engines: {node: '>= 10'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@tauri-apps/cli-win32-x64-msvc@2.10.1':
+ resolution: {integrity: sha512-6Cn7YpPFwzChy0ERz6djKEmUehWrYlM+xTaNzGPgZocw3BD7OfwfWHKVWxXzdjEW2KfKkHddfdxK1XXTYqBRLg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@tauri-apps/cli@2.10.1':
+ resolution: {integrity: sha512-jQNGF/5quwORdZSSLtTluyKQ+o6SMa/AUICfhf4egCGFdMHqWssApVgYSbg+jmrZoc8e1DscNvjTnXtlHLS11g==}
+ engines: {node: '>= 10'}
+ hasBin: true
+
+ '@tauri-apps/plugin-dialog@2.6.0':
+ resolution: {integrity: sha512-q4Uq3eY87TdcYzXACiYSPhmpBA76shgmQswGkSVio4C82Sz2W4iehe9TnKYwbq7weHiL88Yw19XZm7v28+Micg==}
+
+ '@tauri-apps/plugin-fs@2.4.5':
+ resolution: {integrity: sha512-dVxWWGE6VrOxC7/jlhyE+ON/Cc2REJlM35R3PJX3UvFw2XwYhLGQVAIyrehenDdKjotipjYEVc4YjOl3qq90fA==}
+
+ '@tauri-apps/plugin-opener@2.5.3':
+ resolution: {integrity: sha512-CCcUltXMOfUEArbf3db3kCE7Ggy1ExBEBl51Ko2ODJ6GDYHRp1nSNlQm5uNCFY5k7/ufaK5Ib3Du/Zir19IYQQ==}
+
+ '@tauri-apps/plugin-shell@2.3.5':
+ resolution: {integrity: sha512-jewtULhiQ7lI7+owCKAjc8tYLJr92U16bPOeAa472LHJdgaibLP83NcfAF2e+wkEcA53FxKQAZ7byDzs2eeizg==}
+
+ '@types/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.27.0':
+ resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.28.0':
+ resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/react-dom@19.2.3':
+ resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
+ peerDependencies:
+ '@types/react': ^19.2.0
+
+ '@types/react@19.2.14':
+ resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
+
+ '@uiw/codemirror-theme-vscode@4.25.9':
+ resolution: {integrity: sha512-9KTnScHTSk97yGnyNYvDm6QZuBCdbO1OzMQ5bHtoBSPSVtH0LjY3bS6CXsBagb22v8OLPx/XwrBYOjKFp409CQ==}
+
+ '@uiw/codemirror-themes@4.25.9':
+ resolution: {integrity: sha512-DAHKb/L9ELwjY4nCf/MP/mIllHOn4GQe7RR4x8AMJuNeh9nGRRoo1uPxrxMmUL/bKqe6kDmDbIZ2AlhlqyIJuw==}
+ peerDependencies:
+ '@codemirror/language': '>=6.0.0'
+ '@codemirror/state': '>=6.0.0'
+ '@codemirror/view': '>=6.0.0'
+
+ '@vitejs/plugin-react@4.7.0':
+ resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+
+ '@xterm/addon-fit@0.11.0':
+ resolution: {integrity: sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g==}
+
+ '@xterm/addon-web-links@0.12.0':
+ resolution: {integrity: sha512-4Smom3RPyVp7ZMYOYDoC/9eGJJJqYhnPLGGqJ6wOBfB8VxPViJNSKdgRYb8NpaM6YSelEKbA2SStD7lGyqaobw==}
+
+ '@xterm/xterm@6.0.0':
+ resolution: {integrity: sha512-TQwDdQGtwwDt+2cgKDLn0IRaSxYu1tSUjgKarSDkUM0ZNiSRXFpjxEsvc/Zgc5kq5omJ+V0a8/kIM2WD3sMOYg==}
+
+ aria-hidden@1.2.6:
+ resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
+ engines: {node: '>=10'}
+
+ baseline-browser-mapping@2.10.14:
+ resolution: {integrity: sha512-fOVLPAsFTsQfuCkvahZkzq6nf8KvGWanlYoTh0SVA0A/PIUxQGU2AOZAoD95n2gFLVDW/jP6sbGLny95nmEuHA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ browserslist@4.28.2:
+ resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ caniuse-lite@1.0.30001784:
+ resolution: {integrity: sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw==}
+
+ class-variance-authority@0.7.1:
+ resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
+
+ clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ engines: {node: '>=6'}
+
+ cmdk@1.1.1:
+ resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==}
+ peerDependencies:
+ react: ^18 || ^19 || ^19.0.0-rc
+ react-dom: ^18 || ^19 || ^19.0.0-rc
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ crelt@1.0.6:
+ resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
+
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ detect-node-es@1.1.0:
+ resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
+
+ electron-to-chromium@1.5.331:
+ resolution: {integrity: sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==}
+
+ enhanced-resolve@5.20.1:
+ resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==}
+ engines: {node: '>=10.13.0'}
+
+ esbuild@0.27.7:
+ resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-nonce@1.0.1:
+ resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
+ engines: {node: '>=6'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
+ hasBin: true
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
+ 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==}
+ 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==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ lucide-react@1.7.0:
+ resolution: {integrity: sha512-yI7BeItCLZJTXikmK4KNUGCKoGzSvbKlfCvw44bU4fXAL6v3gYS4uHD1jzsLkfwODYwI6Drw5Tu9Z5ulDe0TSg==}
+ peerDependencies:
+ react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-releases@2.0.37:
+ resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@4.0.4:
+ resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
+ engines: {node: '>=12'}
+
+ postcss@8.5.8:
+ resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ react-dom@19.2.4:
+ resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==}
+ peerDependencies:
+ react: ^19.2.4
+
+ react-refresh@0.17.0:
+ resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
+ engines: {node: '>=0.10.0'}
+
+ react-remove-scroll-bar@2.3.8:
+ resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-remove-scroll@2.7.2:
+ resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-resizable-panels@4.9.0:
+ resolution: {integrity: sha512-sEl+hA6y9/kxa0aPlrUC+G1lcShAf/PiIjoeC8kWXxa53RfAVplVCIxEl01Nwa4L2iRa5JXBXq1/mI8ch6qOZQ==}
+ peerDependencies:
+ react: ^18.0.0 || ^19.0.0
+ react-dom: ^18.0.0 || ^19.0.0
+
+ react-style-singleton@2.2.3:
+ resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react@19.2.4:
+ resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
+ engines: {node: '>=0.10.0'}
+
+ rollup@4.60.1:
+ resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ scheduler@0.27.0:
+ resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ sonner@2.0.7:
+ resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==}
+ peerDependencies:
+ react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ style-mod@4.1.3:
+ resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==}
+
+ tailwind-merge@3.5.0:
+ resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==}
+
+ tailwindcss@4.2.2:
+ resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==}
+
+ tapable@2.3.2:
+ resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==}
+ engines: {node: '>=6'}
+
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ typescript@5.8.3:
+ resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ use-callback-ref@1.3.3:
+ resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ use-sidecar@1.1.3:
+ resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ vite@7.3.1:
+ resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ lightningcss: ^1.21.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ w3c-keyname@2.2.8:
+ resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+snapshots:
+
+ '@babel/code-frame@7.29.0':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.29.0': {}
+
+ '@babel/core@7.29.0':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
+ '@babel/helpers': 7.29.2
+ '@babel/parser': 7.29.2
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.29.1':
+ dependencies:
+ '@babel/parser': 7.29.2
+ '@babel/types': 7.29.0
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/helper-compilation-targets@7.28.6':
+ dependencies:
+ '@babel/compat-data': 7.29.0
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.28.2
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-module-imports@7.28.6':
+ dependencies:
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-plugin-utils@7.28.6': {}
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.28.5': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helpers@7.29.2':
+ dependencies:
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
+
+ '@babel/parser@7.29.2':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/runtime@7.29.2': {}
+
+ '@babel/template@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/parser': 7.29.2
+ '@babel/types': 7.29.0
+
+ '@babel/traverse@7.29.0':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.29.2
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.29.0':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+
+ '@codemirror/autocomplete@6.20.1':
+ dependencies:
+ '@codemirror/language': 6.12.3
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.41.0
+ '@lezer/common': 1.5.1
+
+ '@codemirror/commands@6.10.3':
+ dependencies:
+ '@codemirror/language': 6.12.3
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.41.0
+ '@lezer/common': 1.5.1
+
+ '@codemirror/lang-cpp@6.0.3':
+ dependencies:
+ '@codemirror/language': 6.12.3
+ '@lezer/cpp': 1.1.5
+
+ '@codemirror/lang-css@6.3.1':
+ dependencies:
+ '@codemirror/autocomplete': 6.20.1
+ '@codemirror/language': 6.12.3
+ '@codemirror/state': 6.6.0
+ '@lezer/common': 1.5.1
+ '@lezer/css': 1.3.3
+
+ '@codemirror/lang-go@6.0.1':
+ dependencies:
+ '@codemirror/autocomplete': 6.20.1
+ '@codemirror/language': 6.12.3
+ '@codemirror/state': 6.6.0
+ '@lezer/common': 1.5.1
+ '@lezer/go': 1.0.1
+
+ '@codemirror/lang-html@6.4.11':
+ dependencies:
+ '@codemirror/autocomplete': 6.20.1
+ '@codemirror/lang-css': 6.3.1
+ '@codemirror/lang-javascript': 6.2.5
+ '@codemirror/language': 6.12.3
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.41.0
+ '@lezer/common': 1.5.1
+ '@lezer/css': 1.3.3
+ '@lezer/html': 1.3.13
+
+ '@codemirror/lang-java@6.0.2':
+ dependencies:
+ '@codemirror/language': 6.12.3
+ '@lezer/java': 1.1.3
+
+ '@codemirror/lang-javascript@6.2.5':
+ dependencies:
+ '@codemirror/autocomplete': 6.20.1
+ '@codemirror/language': 6.12.3
+ '@codemirror/lint': 6.9.5
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.41.0
+ '@lezer/common': 1.5.1
+ '@lezer/javascript': 1.5.4
+
+ '@codemirror/lang-json@6.0.2':
+ dependencies:
+ '@codemirror/language': 6.12.3
+ '@lezer/json': 1.0.3
+
+ '@codemirror/lang-markdown@6.5.0':
+ dependencies:
+ '@codemirror/autocomplete': 6.20.1
+ '@codemirror/lang-html': 6.4.11
+ '@codemirror/language': 6.12.3
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.41.0
+ '@lezer/common': 1.5.1
+ '@lezer/markdown': 1.6.3
+
+ '@codemirror/lang-php@6.0.2':
+ dependencies:
+ '@codemirror/lang-html': 6.4.11
+ '@codemirror/language': 6.12.3
+ '@codemirror/state': 6.6.0
+ '@lezer/common': 1.5.1
+ '@lezer/php': 1.0.5
+
+ '@codemirror/lang-python@6.2.1':
+ dependencies:
+ '@codemirror/autocomplete': 6.20.1
+ '@codemirror/language': 6.12.3
+ '@codemirror/state': 6.6.0
+ '@lezer/common': 1.5.1
+ '@lezer/python': 1.1.18
+
+ '@codemirror/lang-rust@6.0.2':
+ dependencies:
+ '@codemirror/language': 6.12.3
+ '@lezer/rust': 1.0.2
+
+ '@codemirror/lang-sql@6.10.0':
+ dependencies:
+ '@codemirror/autocomplete': 6.20.1
+ '@codemirror/language': 6.12.3
+ '@codemirror/state': 6.6.0
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+
+ '@codemirror/lang-xml@6.1.0':
+ dependencies:
+ '@codemirror/autocomplete': 6.20.1
+ '@codemirror/language': 6.12.3
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.41.0
+ '@lezer/common': 1.5.1
+ '@lezer/xml': 1.0.6
+
+ '@codemirror/lang-yaml@6.1.3':
+ dependencies:
+ '@codemirror/autocomplete': 6.20.1
+ '@codemirror/language': 6.12.3
+ '@codemirror/state': 6.6.0
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+ '@lezer/yaml': 1.0.4
+
+ '@codemirror/language@6.12.3':
+ dependencies:
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.41.0
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+ style-mod: 4.1.3
+
+ '@codemirror/legacy-modes@6.5.2':
+ dependencies:
+ '@codemirror/language': 6.12.3
+
+ '@codemirror/lint@6.9.5':
+ dependencies:
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.41.0
+ crelt: 1.0.6
+
+ '@codemirror/search@6.6.0':
+ dependencies:
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.41.0
+ crelt: 1.0.6
+
+ '@codemirror/state@6.6.0':
+ dependencies:
+ '@marijn/find-cluster-break': 1.0.2
+
+ '@codemirror/view@6.41.0':
+ dependencies:
+ '@codemirror/state': 6.6.0
+ crelt: 1.0.6
+ style-mod: 4.1.3
+ w3c-keyname: 2.2.8
+
+ '@esbuild/aix-ppc64@0.27.7':
+ optional: true
+
+ '@esbuild/android-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/android-arm@0.27.7':
+ optional: true
+
+ '@esbuild/android-x64@0.27.7':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/darwin-x64@0.27.7':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.27.7':
+ optional: true
+
+ '@esbuild/linux-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/linux-arm@0.27.7':
+ optional: true
+
+ '@esbuild/linux-ia32@0.27.7':
+ optional: true
+
+ '@esbuild/linux-loong64@0.27.7':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.27.7':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.27.7':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.27.7':
+ optional: true
+
+ '@esbuild/linux-s390x@0.27.7':
+ optional: true
+
+ '@esbuild/linux-x64@0.27.7':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.27.7':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.27.7':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/sunos-x64@0.27.7':
+ optional: true
+
+ '@esbuild/win32-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/win32-ia32@0.27.7':
+ optional: true
+
+ '@esbuild/win32-x64@0.27.7':
+ optional: true
+
+ '@floating-ui/core@1.7.5':
+ dependencies:
+ '@floating-ui/utils': 0.2.11
+
+ '@floating-ui/dom@1.7.6':
+ dependencies:
+ '@floating-ui/core': 1.7.5
+ '@floating-ui/utils': 0.2.11
+
+ '@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@floating-ui/dom': 1.7.6
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+
+ '@floating-ui/utils@0.2.11': {}
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@lezer/common@1.5.1': {}
+
+ '@lezer/cpp@1.1.5':
+ dependencies:
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+
+ '@lezer/css@1.3.3':
+ dependencies:
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+
+ '@lezer/go@1.0.1':
+ dependencies:
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+
+ '@lezer/highlight@1.2.3':
+ dependencies:
+ '@lezer/common': 1.5.1
+
+ '@lezer/html@1.3.13':
+ dependencies:
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+
+ '@lezer/java@1.1.3':
+ dependencies:
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+
+ '@lezer/javascript@1.5.4':
+ dependencies:
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+
+ '@lezer/json@1.0.3':
+ dependencies:
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+
+ '@lezer/lr@1.4.8':
+ dependencies:
+ '@lezer/common': 1.5.1
+
+ '@lezer/markdown@1.6.3':
+ dependencies:
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+
+ '@lezer/php@1.0.5':
+ dependencies:
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+
+ '@lezer/python@1.1.18':
+ dependencies:
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+
+ '@lezer/rust@1.0.2':
+ dependencies:
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+
+ '@lezer/xml@1.0.6':
+ dependencies:
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+
+ '@lezer/yaml@1.0.4':
+ dependencies:
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+
+ '@marijn/find-cluster-break@1.0.2': {}
+
+ '@radix-ui/number@1.1.1': {}
+
+ '@radix-ui/primitive@1.1.3': {}
+
+ '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ aria-hidden: 1.2.6
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ aria-hidden: 1.2.6
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/rect': 1.1.1
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ aria-hidden: 1.2.6
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-separator@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/rect': 1.1.1
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-visually-hidden@1.2.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/rect@1.1.1': {}
+
+ '@rolldown/pluginutils@1.0.0-beta.27': {}
+
+ '@rollup/rollup-android-arm-eabi@4.60.1':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-musl@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-musl@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.60.1':
+ optional: true
+
+ '@rollup/rollup-openbsd-x64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.60.1':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.60.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.60.1':
+ optional: true
+
+ '@tailwindcss/node@4.2.2':
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ enhanced-resolve: 5.20.1
+ jiti: 2.6.1
+ lightningcss: 1.32.0
+ magic-string: 0.30.21
+ source-map-js: 1.2.1
+ tailwindcss: 4.2.2
+
+ '@tailwindcss/oxide-android-arm64@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-arm64@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-x64@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-freebsd-x64@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-musl@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-wasm32-wasi@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide@4.2.2':
+ optionalDependencies:
+ '@tailwindcss/oxide-android-arm64': 4.2.2
+ '@tailwindcss/oxide-darwin-arm64': 4.2.2
+ '@tailwindcss/oxide-darwin-x64': 4.2.2
+ '@tailwindcss/oxide-freebsd-x64': 4.2.2
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2
+ '@tailwindcss/oxide-linux-arm64-musl': 4.2.2
+ '@tailwindcss/oxide-linux-x64-gnu': 4.2.2
+ '@tailwindcss/oxide-linux-x64-musl': 4.2.2
+ '@tailwindcss/oxide-wasm32-wasi': 4.2.2
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2
+ '@tailwindcss/oxide-win32-x64-msvc': 4.2.2
+
+ '@tailwindcss/vite@4.2.2(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0))':
+ dependencies:
+ '@tailwindcss/node': 4.2.2
+ '@tailwindcss/oxide': 4.2.2
+ tailwindcss: 4.2.2
+ vite: 7.3.1(jiti@2.6.1)(lightningcss@1.32.0)
+
+ '@tauri-apps/api@2.10.1': {}
+
+ '@tauri-apps/cli-darwin-arm64@2.10.1':
+ optional: true
+
+ '@tauri-apps/cli-darwin-x64@2.10.1':
+ optional: true
+
+ '@tauri-apps/cli-linux-arm-gnueabihf@2.10.1':
+ optional: true
+
+ '@tauri-apps/cli-linux-arm64-gnu@2.10.1':
+ optional: true
+
+ '@tauri-apps/cli-linux-arm64-musl@2.10.1':
+ optional: true
+
+ '@tauri-apps/cli-linux-riscv64-gnu@2.10.1':
+ optional: true
+
+ '@tauri-apps/cli-linux-x64-gnu@2.10.1':
+ optional: true
+
+ '@tauri-apps/cli-linux-x64-musl@2.10.1':
+ optional: true
+
+ '@tauri-apps/cli-win32-arm64-msvc@2.10.1':
+ optional: true
+
+ '@tauri-apps/cli-win32-ia32-msvc@2.10.1':
+ optional: true
+
+ '@tauri-apps/cli-win32-x64-msvc@2.10.1':
+ optional: true
+
+ '@tauri-apps/cli@2.10.1':
+ optionalDependencies:
+ '@tauri-apps/cli-darwin-arm64': 2.10.1
+ '@tauri-apps/cli-darwin-x64': 2.10.1
+ '@tauri-apps/cli-linux-arm-gnueabihf': 2.10.1
+ '@tauri-apps/cli-linux-arm64-gnu': 2.10.1
+ '@tauri-apps/cli-linux-arm64-musl': 2.10.1
+ '@tauri-apps/cli-linux-riscv64-gnu': 2.10.1
+ '@tauri-apps/cli-linux-x64-gnu': 2.10.1
+ '@tauri-apps/cli-linux-x64-musl': 2.10.1
+ '@tauri-apps/cli-win32-arm64-msvc': 2.10.1
+ '@tauri-apps/cli-win32-ia32-msvc': 2.10.1
+ '@tauri-apps/cli-win32-x64-msvc': 2.10.1
+
+ '@tauri-apps/plugin-dialog@2.6.0':
+ dependencies:
+ '@tauri-apps/api': 2.10.1
+
+ '@tauri-apps/plugin-fs@2.4.5':
+ dependencies:
+ '@tauri-apps/api': 2.10.1
+
+ '@tauri-apps/plugin-opener@2.5.3':
+ dependencies:
+ '@tauri-apps/api': 2.10.1
+
+ '@tauri-apps/plugin-shell@2.3.5':
+ dependencies:
+ '@tauri-apps/api': 2.10.1
+
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.29.2
+ '@babel/types': 7.29.0
+ '@types/babel__generator': 7.27.0
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.28.0
+
+ '@types/babel__generator@7.27.0':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.29.2
+ '@babel/types': 7.29.0
+
+ '@types/babel__traverse@7.28.0':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@types/estree@1.0.8': {}
+
+ '@types/react-dom@19.2.3(@types/react@19.2.14)':
+ dependencies:
+ '@types/react': 19.2.14
+
+ '@types/react@19.2.14':
+ dependencies:
+ csstype: 3.2.3
+
+ '@uiw/codemirror-theme-vscode@4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)':
+ dependencies:
+ '@uiw/codemirror-themes': 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)
+ transitivePeerDependencies:
+ - '@codemirror/language'
+ - '@codemirror/state'
+ - '@codemirror/view'
+
+ '@uiw/codemirror-themes@4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)':
+ dependencies:
+ '@codemirror/language': 6.12.3
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.41.0
+
+ '@vitejs/plugin-react@4.7.0(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0))':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0)
+ '@rolldown/pluginutils': 1.0.0-beta.27
+ '@types/babel__core': 7.20.5
+ react-refresh: 0.17.0
+ vite: 7.3.1(jiti@2.6.1)(lightningcss@1.32.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@xterm/addon-fit@0.11.0': {}
+
+ '@xterm/addon-web-links@0.12.0': {}
+
+ '@xterm/xterm@6.0.0': {}
+
+ aria-hidden@1.2.6:
+ dependencies:
+ tslib: 2.8.1
+
+ baseline-browser-mapping@2.10.14: {}
+
+ browserslist@4.28.2:
+ dependencies:
+ baseline-browser-mapping: 2.10.14
+ caniuse-lite: 1.0.30001784
+ electron-to-chromium: 1.5.331
+ node-releases: 2.0.37
+ update-browserslist-db: 1.2.3(browserslist@4.28.2)
+
+ caniuse-lite@1.0.30001784: {}
+
+ class-variance-authority@0.7.1:
+ dependencies:
+ clsx: 2.1.1
+
+ clsx@2.1.1: {}
+
+ cmdk@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/react-dom'
+
+ convert-source-map@2.0.0: {}
+
+ crelt@1.0.6: {}
+
+ csstype@3.2.3: {}
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ detect-libc@2.1.2: {}
+
+ detect-node-es@1.1.0: {}
+
+ electron-to-chromium@1.5.331: {}
+
+ enhanced-resolve@5.20.1:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.2
+
+ esbuild@0.27.7:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.7
+ '@esbuild/android-arm': 0.27.7
+ '@esbuild/android-arm64': 0.27.7
+ '@esbuild/android-x64': 0.27.7
+ '@esbuild/darwin-arm64': 0.27.7
+ '@esbuild/darwin-x64': 0.27.7
+ '@esbuild/freebsd-arm64': 0.27.7
+ '@esbuild/freebsd-x64': 0.27.7
+ '@esbuild/linux-arm': 0.27.7
+ '@esbuild/linux-arm64': 0.27.7
+ '@esbuild/linux-ia32': 0.27.7
+ '@esbuild/linux-loong64': 0.27.7
+ '@esbuild/linux-mips64el': 0.27.7
+ '@esbuild/linux-ppc64': 0.27.7
+ '@esbuild/linux-riscv64': 0.27.7
+ '@esbuild/linux-s390x': 0.27.7
+ '@esbuild/linux-x64': 0.27.7
+ '@esbuild/netbsd-arm64': 0.27.7
+ '@esbuild/netbsd-x64': 0.27.7
+ '@esbuild/openbsd-arm64': 0.27.7
+ '@esbuild/openbsd-x64': 0.27.7
+ '@esbuild/openharmony-arm64': 0.27.7
+ '@esbuild/sunos-x64': 0.27.7
+ '@esbuild/win32-arm64': 0.27.7
+ '@esbuild/win32-ia32': 0.27.7
+ '@esbuild/win32-x64': 0.27.7
+
+ escalade@3.2.0: {}
+
+ fdir@6.5.0(picomatch@4.0.4):
+ optionalDependencies:
+ picomatch: 4.0.4
+
+ fsevents@2.3.3:
+ optional: true
+
+ gensync@1.0.0-beta.2: {}
+
+ get-nonce@1.0.1: {}
+
+ graceful-fs@4.2.11: {}
+
+ jiti@2.6.1: {}
+
+ js-tokens@4.0.0: {}
+
+ jsesc@3.1.0: {}
+
+ json5@2.2.3: {}
+
+ lightningcss-android-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-x64@1.32.0:
+ optional: true
+
+ lightningcss-freebsd-x64@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.32.0:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ optional: true
+
+ lightningcss@1.32.0:
+ 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
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lucide-react@1.7.0(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.11: {}
+
+ node-releases@2.0.37: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@4.0.4: {}
+
+ postcss@8.5.8:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ react-dom@19.2.4(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ scheduler: 0.27.0
+
+ react-refresh@0.17.0: {}
+
+ react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4)
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.4)
+ react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4)
+ tslib: 2.8.1
+ use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4)
+ use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ react-resizable-panels@4.9.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+
+ react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.4):
+ dependencies:
+ get-nonce: 1.0.1
+ react: 19.2.4
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ react@19.2.4: {}
+
+ rollup@4.60.1:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.60.1
+ '@rollup/rollup-android-arm64': 4.60.1
+ '@rollup/rollup-darwin-arm64': 4.60.1
+ '@rollup/rollup-darwin-x64': 4.60.1
+ '@rollup/rollup-freebsd-arm64': 4.60.1
+ '@rollup/rollup-freebsd-x64': 4.60.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.60.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.60.1
+ '@rollup/rollup-linux-arm64-gnu': 4.60.1
+ '@rollup/rollup-linux-arm64-musl': 4.60.1
+ '@rollup/rollup-linux-loong64-gnu': 4.60.1
+ '@rollup/rollup-linux-loong64-musl': 4.60.1
+ '@rollup/rollup-linux-ppc64-gnu': 4.60.1
+ '@rollup/rollup-linux-ppc64-musl': 4.60.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.60.1
+ '@rollup/rollup-linux-riscv64-musl': 4.60.1
+ '@rollup/rollup-linux-s390x-gnu': 4.60.1
+ '@rollup/rollup-linux-x64-gnu': 4.60.1
+ '@rollup/rollup-linux-x64-musl': 4.60.1
+ '@rollup/rollup-openbsd-x64': 4.60.1
+ '@rollup/rollup-openharmony-arm64': 4.60.1
+ '@rollup/rollup-win32-arm64-msvc': 4.60.1
+ '@rollup/rollup-win32-ia32-msvc': 4.60.1
+ '@rollup/rollup-win32-x64-gnu': 4.60.1
+ '@rollup/rollup-win32-x64-msvc': 4.60.1
+ fsevents: 2.3.3
+
+ scheduler@0.27.0: {}
+
+ semver@6.3.1: {}
+
+ sonner@2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+
+ source-map-js@1.2.1: {}
+
+ style-mod@4.1.3: {}
+
+ tailwind-merge@3.5.0: {}
+
+ tailwindcss@4.2.2: {}
+
+ tapable@2.3.2: {}
+
+ tinyglobby@0.2.15:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
+
+ tslib@2.8.1: {}
+
+ typescript@5.8.3: {}
+
+ update-browserslist-db@1.2.3(browserslist@4.28.2):
+ dependencies:
+ browserslist: 4.28.2
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.4):
+ dependencies:
+ detect-node-es: 1.1.0
+ react: 19.2.4
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0):
+ dependencies:
+ esbuild: 0.27.7
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
+ postcss: 8.5.8
+ rollup: 4.60.1
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ fsevents: 2.3.3
+ jiti: 2.6.1
+ lightningcss: 1.32.0
+
+ w3c-keyname@2.2.8: {}
+
+ yallist@3.1.1: {}
diff --git a/public/tauri.svg b/public/tauri.svg
new file mode 100644
index 0000000..31b62c9
--- /dev/null
+++ b/public/tauri.svg
@@ -0,0 +1,6 @@
+
diff --git a/public/vite.svg b/public/vite.svg
new file mode 100644
index 0000000..e7b8dfb
--- /dev/null
+++ b/public/vite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/release/Lunar Code-0.1.0-1.x86_64.rpm b/release/Lunar Code-0.1.0-1.x86_64.rpm
new file mode 100644
index 0000000..f57b348
Binary files /dev/null and b/release/Lunar Code-0.1.0-1.x86_64.rpm differ
diff --git a/release/Lunar Code_0.1.0_amd64.deb b/release/Lunar Code_0.1.0_amd64.deb
new file mode 100644
index 0000000..4f7584b
Binary files /dev/null and b/release/Lunar Code_0.1.0_amd64.deb differ
diff --git a/release/lunar-code b/release/lunar-code
new file mode 100755
index 0000000..12d1afc
Binary files /dev/null and b/release/lunar-code differ
diff --git a/release/lunar-code-0.1.0-1-x86_64.pkg.tar.zst b/release/lunar-code-0.1.0-1-x86_64.pkg.tar.zst
new file mode 100644
index 0000000..deb94d1
Binary files /dev/null and b/release/lunar-code-0.1.0-1-x86_64.pkg.tar.zst differ
diff --git a/src-tauri/.gitignore b/src-tauri/.gitignore
new file mode 100644
index 0000000..b21bd68
--- /dev/null
+++ b/src-tauri/.gitignore
@@ -0,0 +1,7 @@
+# Generated by Cargo
+# will have compiled files and executables
+/target/
+
+# Generated by Tauri
+# will have schema files for capabilities auto-completion
+/gen/schemas
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
new file mode 100644
index 0000000..255e422
--- /dev/null
+++ b/src-tauri/Cargo.lock
@@ -0,0 +1,5159 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "adler2"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "alloc-no-stdlib"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
+
+[[package]]
+name = "alloc-stdlib"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
+dependencies = [
+ "alloc-no-stdlib",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.102"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
+
+[[package]]
+name = "atk"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b"
+dependencies = [
+ "atk-sys",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "atk-sys"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "autocfg"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
+
+[[package]]
+name = "base64"
+version = "0.21.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
+
+[[package]]
+name = "base64"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
+
+[[package]]
+name = "bit-set"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
+dependencies = [
+ "serde_core",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block2"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5"
+dependencies = [
+ "objc2",
+]
+
+[[package]]
+name = "brotli"
+version = "8.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+ "brotli-decompressor",
+]
+
+[[package]]
+name = "brotli-decompressor"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
+
+[[package]]
+name = "bytemuck"
+version = "1.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cairo-rs"
+version = "0.18.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
+dependencies = [
+ "bitflags 2.11.0",
+ "cairo-sys-rs",
+ "glib",
+ "libc",
+ "once_cell",
+ "thiserror 1.0.69",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "camino"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48"
+dependencies = [
+ "serde_core",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.19.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde",
+ "serde_json",
+ "thiserror 2.0.18",
+]
+
+[[package]]
+name = "cargo_toml"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77"
+dependencies = [
+ "serde",
+ "toml 0.9.12+spec-1.1.0",
+]
+
+[[package]]
+name = "cc"
+version = "1.2.59"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283"
+dependencies = [
+ "find-msvc-tools",
+ "shlex",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfb"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f"
+dependencies = [
+ "byteorder",
+ "fnv",
+ "uuid",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02"
+dependencies = [
+ "smallvec",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
+
+[[package]]
+name = "chrono"
+version = "0.4.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
+dependencies = [
+ "iana-time-zone",
+ "num-traits",
+ "serde",
+ "windows-link 0.2.1",
+]
+
+[[package]]
+name = "combine"
+version = "4.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+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",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+
+[[package]]
+name = "core-graphics"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97"
+dependencies = [
+ "bitflags 2.11.0",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
+dependencies = [
+ "bitflags 2.11.0",
+ "core-foundation",
+ "libc",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "cssparser"
+version = "0.29.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa"
+dependencies = [
+ "cssparser-macros",
+ "dtoa-short",
+ "itoa",
+ "matches",
+ "phf 0.10.1",
+ "proc-macro2",
+ "quote",
+ "smallvec",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "cssparser"
+version = "0.36.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2"
+dependencies = [
+ "cssparser-macros",
+ "dtoa-short",
+ "itoa",
+ "phf 0.13.1",
+ "smallvec",
+]
+
+[[package]]
+name = "cssparser-macros"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
+dependencies = [
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "ctor"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
+dependencies = [
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "darling"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0"
+dependencies = [
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "deranged"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
+dependencies = [
+ "powerfmt",
+ "serde_core",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "derive_more"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134"
+dependencies = [
+ "derive_more-impl",
+]
+
+[[package]]
+name = "derive_more-impl"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "dirs"
+version = "6.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "dispatch2"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38"
+dependencies = [
+ "bitflags 2.11.0",
+ "block2",
+ "libc",
+ "objc2",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "dlopen2"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4"
+dependencies = [
+ "dlopen2_derive",
+ "libc",
+ "once_cell",
+ "winapi",
+]
+
+[[package]]
+name = "dlopen2_derive"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "dom_query"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89"
+dependencies = [
+ "bit-set",
+ "cssparser 0.36.0",
+ "foldhash 0.2.0",
+ "html5ever 0.38.0",
+ "precomputed-hash",
+ "selectors 0.36.1",
+ "tendril 0.5.0",
+]
+
+[[package]]
+name = "dpi"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "dtoa"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590"
+
+[[package]]
+name = "dtoa-short"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87"
+dependencies = [
+ "dtoa",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
+
+[[package]]
+name = "embed-resource"
+version = "3.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63a1d0de4f2249aa0ff5884d7080814f446bb241a559af6c170a41e878ed2d45"
+dependencies = [
+ "cc",
+ "memchr",
+ "rustc_version",
+ "toml 0.9.12+spec-1.1.0",
+ "vswhom",
+ "winreg",
+]
+
+[[package]]
+name = "embed_plist"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+
+[[package]]
+name = "erased-serde"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec"
+dependencies = [
+ "serde",
+ "serde_core",
+ "typeid",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
+dependencies = [
+ "libc",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
+
+[[package]]
+name = "fdeflate"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "field-offset"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
+dependencies = [
+ "memoffset",
+ "rustc_version",
+]
+
+[[package]]
+name = "find-msvc-tools"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
+
+[[package]]
+name = "flate2"
+version = "1.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foldhash"
+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"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
+dependencies = [
+ "foreign-types-macros",
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-macros"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "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-channel"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"
+
+[[package]]
+name = "futures-task"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
+
+[[package]]
+name = "futures-util"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "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"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691"
+dependencies = [
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gio",
+ "glib",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.18.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec"
+dependencies = [
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk-sys"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "gdkwayland-sys"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69"
+dependencies = [
+ "gdk-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "gdkx11"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe"
+dependencies = [
+ "gdk",
+ "gdkx11-sys",
+ "gio",
+ "glib",
+ "libc",
+ "x11",
+]
+
+[[package]]
+name = "gdkx11-sys"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d"
+dependencies = [
+ "gdk-sys",
+ "glib-sys",
+ "libc",
+ "system-deps",
+ "x11",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.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"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.1+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "r-efi 5.3.0",
+ "wasip2",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "r-efi 6.0.0",
+ "wasip2",
+ "wasip3",
+]
+
+[[package]]
+name = "gio"
+version = "0.18.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "gio-sys",
+ "glib",
+ "libc",
+ "once_cell",
+ "pin-project-lite",
+ "smallvec",
+ "thiserror 1.0.69",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+ "winapi",
+]
+
+[[package]]
+name = "glib"
+version = "0.18.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
+dependencies = [
+ "bitflags 2.11.0",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "futures-util",
+ "gio-sys",
+ "glib-macros",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "memchr",
+ "once_cell",
+ "smallvec",
+ "thiserror 1.0.69",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.18.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro-crate 2.0.2",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
+
+[[package]]
+name = "gobject-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a"
+dependencies = [
+ "atk",
+ "cairo-rs",
+ "field-offset",
+ "futures-channel",
+ "gdk",
+ "gdk-pixbuf",
+ "gio",
+ "glib",
+ "gtk-sys",
+ "gtk3-macros",
+ "libc",
+ "pango",
+ "pkg-config",
+]
+
+[[package]]
+name = "gtk-sys"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414"
+dependencies = [
+ "atk-sys",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk3-macros"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d"
+dependencies = [
+ "proc-macro-crate 1.3.1",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
+dependencies = [
+ "foldhash 0.1.5",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "html5ever"
+version = "0.29.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever 0.14.1",
+ "match_token",
+]
+
+[[package]]
+name = "html5ever"
+version = "0.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2"
+dependencies = [
+ "log",
+ "markup5ever 0.38.0",
+]
+
+[[package]]
+name = "http"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
+dependencies = [
+ "bytes",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
+dependencies = [
+ "bytes",
+ "http",
+]
+
+[[package]]
+name = "http-body-util"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "http",
+ "http-body",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
+
+[[package]]
+name = "hyper"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca"
+dependencies = [
+ "atomic-waker",
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "http",
+ "http-body",
+ "httparse",
+ "itoa",
+ "pin-project-lite",
+ "smallvec",
+ "tokio",
+ "want",
+]
+
+[[package]]
+name = "hyper-util"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
+dependencies = [
+ "base64 0.22.1",
+ "bytes",
+ "futures-channel",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "ipnet",
+ "libc",
+ "percent-encoding",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "log",
+ "wasm-bindgen",
+ "windows-core 0.62.2",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ico"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e795dff5605e0f04bff85ca41b51a96b83e80b281e96231bcaaf1ac35103371"
+dependencies = [
+ "byteorder",
+ "png",
+]
+
+[[package]]
+name = "icu_collections"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c"
+dependencies = [
+ "displaydoc",
+ "potential_utf",
+ "utf8_iter",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locale_core"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29"
+dependencies = [
+ "displaydoc",
+ "litemap",
+ "tinystr",
+ "writeable",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4"
+dependencies = [
+ "icu_collections",
+ "icu_normalizer_data",
+ "icu_properties",
+ "icu_provider",
+ "smallvec",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer_data"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38"
+
+[[package]]
+name = "icu_properties"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de"
+dependencies = [
+ "icu_collections",
+ "icu_locale_core",
+ "icu_properties_data",
+ "icu_provider",
+ "zerotrie",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_properties_data"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14"
+
+[[package]]
+name = "icu_provider"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421"
+dependencies = [
+ "displaydoc",
+ "icu_locale_core",
+ "writeable",
+ "yoke",
+ "zerofrom",
+ "zerotrie",
+ "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"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
+dependencies = [
+ "idna_adapter",
+ "smallvec",
+ "utf8_iter",
+]
+
+[[package]]
+name = "idna_adapter"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
+dependencies = [
+ "icu_normalizer",
+ "icu_properties",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45a8a2b9cb3e0b0c1803dbb0758ffac5de2f425b23c28f518faabd9d805342ff"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.16.1",
+ "serde",
+ "serde_core",
+]
+
+[[package]]
+name = "infer"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7"
+dependencies = [
+ "cfb",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2"
+
+[[package]]
+name = "iri-string"
+version = "0.7.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "is-docker"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "is-wsl"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5"
+dependencies = [
+ "is-docker",
+ "once_cell",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
+
+[[package]]
+name = "javascriptcore-rs"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc"
+dependencies = [
+ "bitflags 1.3.2",
+ "glib",
+ "javascriptcore-rs-sys",
+]
+
+[[package]]
+name = "javascriptcore-rs-sys"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if",
+ "combine",
+ "jni-sys 0.3.1",
+ "log",
+ "thiserror 1.0.69",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258"
+dependencies = [
+ "jni-sys 0.4.1",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2"
+dependencies = [
+ "jni-sys-macros",
+]
+
+[[package]]
+name = "jni-sys-macros"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264"
+dependencies = [
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "once_cell",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json-patch"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08"
+dependencies = [
+ "jsonptr",
+ "serde",
+ "serde_json",
+ "thiserror 1.0.69",
+]
+
+[[package]]
+name = "jsonptr"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "keyboard-types"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
+dependencies = [
+ "bitflags 2.11.0",
+ "serde",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "kuchikiki"
+version = "0.8.8-speedreader"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2"
+dependencies = [
+ "cssparser 0.29.6",
+ "html5ever 0.29.1",
+ "indexmap 2.13.1",
+ "selectors 0.24.0",
+]
+
+[[package]]
+name = "leb128fmt"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
+
+[[package]]
+name = "libappindicator"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a"
+dependencies = [
+ "glib",
+ "gtk",
+ "gtk-sys",
+ "libappindicator-sys",
+ "log",
+]
+
+[[package]]
+name = "libappindicator-sys"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf"
+dependencies = [
+ "gtk-sys",
+ "libloading",
+ "once_cell",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.184"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "libredox"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "litemap"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
+
+[[package]]
+name = "lock_api"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+
+[[package]]
+name = "lunar-code"
+version = "0.1.0"
+dependencies = [
+ "serde",
+ "serde_json",
+ "tauri",
+ "tauri-build",
+ "tauri-plugin-dialog",
+ "tauri-plugin-fs",
+ "tauri-plugin-shell",
+]
+
+[[package]]
+name = "mac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+
+[[package]]
+name = "markup5ever"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18"
+dependencies = [
+ "log",
+ "phf 0.11.3",
+ "phf_codegen 0.11.3",
+ "string_cache 0.8.9",
+ "string_cache_codegen 0.5.4",
+ "tendril 0.4.3",
+]
+
+[[package]]
+name = "markup5ever"
+version = "0.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862"
+dependencies = [
+ "log",
+ "tendril 0.5.0",
+ "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 = "memchr"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
+
+[[package]]
+name = "memoffset"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
+dependencies = [
+ "adler2",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mio"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
+dependencies = [
+ "libc",
+ "wasi 0.11.1+wasi-snapshot-preview1",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "muda"
+version = "0.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c9fec5a4e89860383d778d10563a605838f8f0b2f9303868937e5ff32e86177"
+dependencies = [
+ "crossbeam-channel",
+ "dpi",
+ "gtk",
+ "keyboard-types",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-core-foundation",
+ "objc2-foundation",
+ "once_cell",
+ "png",
+ "serde",
+ "thiserror 2.0.18",
+ "windows-sys 0.60.2",
+]
+
+[[package]]
+name = "ndk"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
+dependencies = [
+ "bitflags 2.11.0",
+ "jni-sys 0.3.1",
+ "log",
+ "ndk-sys",
+ "num_enum",
+ "raw-window-handle",
+ "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",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+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 = "num-conv"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967"
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26"
+dependencies = [
+ "num_enum_derive",
+ "rustversion",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8"
+dependencies = [
+ "proc-macro-crate 3.5.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "objc2"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f"
+dependencies = [
+ "objc2-encode",
+ "objc2-exception-helper",
+]
+
+[[package]]
+name = "objc2-app-kit"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"
+dependencies = [
+ "bitflags 2.11.0",
+ "block2",
+ "objc2",
+ "objc2-core-foundation",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-core-foundation"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
+dependencies = [
+ "bitflags 2.11.0",
+ "dispatch2",
+ "objc2",
+]
+
+[[package]]
+name = "objc2-core-graphics"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807"
+dependencies = [
+ "bitflags 2.11.0",
+ "dispatch2",
+ "objc2",
+ "objc2-core-foundation",
+ "objc2-io-surface",
+]
+
+[[package]]
+name = "objc2-encode"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
+
+[[package]]
+name = "objc2-exception-helper"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "objc2-foundation"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"
+dependencies = [
+ "bitflags 2.11.0",
+ "block2",
+ "objc2",
+ "objc2-core-foundation",
+]
+
+[[package]]
+name = "objc2-io-surface"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d"
+dependencies = [
+ "bitflags 2.11.0",
+ "objc2",
+ "objc2-core-foundation",
+]
+
+[[package]]
+name = "objc2-quartz-core"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f"
+dependencies = [
+ "bitflags 2.11.0",
+ "objc2",
+ "objc2-core-foundation",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-ui-kit"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22"
+dependencies = [
+ "bitflags 2.11.0",
+ "objc2",
+ "objc2-core-foundation",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-web-kit"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f"
+dependencies = [
+ "bitflags 2.11.0",
+ "block2",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-core-foundation",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
+
+[[package]]
+name = "open"
+version = "5.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43bb73a7fa3799b198970490a51174027ba0d4ec504b03cd08caf513d40024bc"
+dependencies = [
+ "dunce",
+ "is-wsl",
+ "libc",
+ "pathdiff",
+]
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "os_pipe"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967"
+dependencies = [
+ "libc",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "pango"
+version = "0.18.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4"
+dependencies = [
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-link 0.2.1",
+]
+
+[[package]]
+name = "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"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
+
+[[package]]
+name = "phf"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
+dependencies = [
+ "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"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
+dependencies = [
+ "phf_macros 0.13.1",
+ "phf_shared 0.13.1",
+ "serde",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
+dependencies = [
+ "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_codegen"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1"
+dependencies = [
+ "phf_generator 0.13.1",
+ "phf_shared 0.13.1",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
+dependencies = [
+ "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_generator"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737"
+dependencies = [
+ "fastrand",
+ "phf_shared 0.13.1",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "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_macros"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef"
+dependencies = [
+ "phf_generator 0.13.1",
+ "phf_shared 0.13.1",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
+dependencies = [
+ "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 = "phf_shared"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266"
+dependencies = [
+ "siphasher 1.0.2",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
+
+[[package]]
+name = "plist"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07"
+dependencies = [
+ "base64 0.22.1",
+ "indexmap 2.13.1",
+ "quick-xml",
+ "serde",
+ "time",
+]
+
+[[package]]
+name = "png"
+version = "0.17.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "potential_utf"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564"
+dependencies = [
+ "zerovec",
+]
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+dependencies = [
+ "zerocopy",
+]
+
+[[package]]
+name = "precomputed-hash"
+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"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit 0.19.15",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24"
+dependencies = [
+ "toml_datetime 0.6.3",
+ "toml_edit 0.20.2",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f"
+dependencies = [
+ "toml_edit 0.25.10+spec-1.1.0",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+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 = "quick-xml"
+version = "0.38.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "r-efi"
+version = "5.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
+
+[[package]]
+name = "r-efi"
+version = "6.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+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 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[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]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[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"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.17",
+]
+
+[[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.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
+
+[[package]]
+name = "redox_syscall"
+version = "0.5.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
+dependencies = [
+ "bitflags 2.11.0",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
+dependencies = [
+ "getrandom 0.2.17",
+ "libredox",
+ "thiserror 2.0.18",
+]
+
+[[package]]
+name = "ref-cast"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
+dependencies = [
+ "ref-cast-impl",
+]
+
+[[package]]
+name = "ref-cast-impl"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "regex"
+version = "1.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
+
+[[package]]
+name = "reqwest"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801"
+dependencies = [
+ "base64 0.22.1",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-body-util",
+ "hyper",
+ "hyper-util",
+ "js-sys",
+ "log",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "sync_wrapper",
+ "tokio",
+ "tokio-util",
+ "tower",
+ "tower-http",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-streams",
+ "web-sys",
+]
+
+[[package]]
+name = "rfd"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a15ad77d9e70a92437d8f74c35d99b4e4691128df018833e99f90bcd36152672"
+dependencies = [
+ "block2",
+ "dispatch2",
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "js-sys",
+ "log",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-core-foundation",
+ "objc2-foundation",
+ "raw-window-handle",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "windows-sys 0.60.2",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schemars"
+version = "0.8.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615"
+dependencies = [
+ "dyn-clone",
+ "indexmap 1.9.3",
+ "schemars_derive",
+ "serde",
+ "serde_json",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "schemars"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f"
+dependencies = [
+ "dyn-clone",
+ "ref-cast",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemars"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc"
+dependencies = [
+ "dyn-clone",
+ "ref-cast",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemars_derive"
+version = "0.8.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde_derive_internals",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "selectors"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416"
+dependencies = [
+ "bitflags 1.3.2",
+ "cssparser 0.29.6",
+ "derive_more 0.99.20",
+ "fxhash",
+ "log",
+ "phf 0.8.0",
+ "phf_codegen 0.8.0",
+ "precomputed-hash",
+ "servo_arc 0.2.0",
+ "smallvec",
+]
+
+[[package]]
+name = "selectors"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c"
+dependencies = [
+ "bitflags 2.11.0",
+ "cssparser 0.36.0",
+ "derive_more 2.1.1",
+ "log",
+ "new_debug_unreachable",
+ "phf 0.13.1",
+ "phf_codegen 0.13.1",
+ "precomputed-hash",
+ "rustc-hash",
+ "servo_arc 0.4.3",
+ "smallvec",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
+dependencies = [
+ "serde",
+ "serde_core",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
+dependencies = [
+ "serde_core",
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-untagged"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058"
+dependencies = [
+ "erased-serde",
+ "serde",
+ "serde_core",
+ "typeid",
+]
+
+[[package]]
+name = "serde_core"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "serde_derive_internals"
+version = "0.29.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.149"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
+dependencies = [
+ "itoa",
+ "memchr",
+ "serde",
+ "serde_core",
+ "zmij",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
+dependencies = [
+ "serde_core",
+]
+
+[[package]]
+name = "serde_with"
+version = "3.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f"
+dependencies = [
+ "base64 0.22.1",
+ "chrono",
+ "hex",
+ "indexmap 1.9.3",
+ "indexmap 2.13.1",
+ "schemars 0.9.0",
+ "schemars 1.2.1",
+ "serde_core",
+ "serde_json",
+ "serde_with_macros",
+ "time",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "3.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "serialize-to-javascript"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5"
+dependencies = [
+ "serde",
+ "serde_json",
+ "serialize-to-javascript-impl",
+]
+
+[[package]]
+name = "serialize-to-javascript-impl"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "servo_arc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741"
+dependencies = [
+ "nodrop",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "servo_arc"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930"
+dependencies = [
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shared_child"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e362d9935bc50f019969e2f9ecd66786612daae13e8f277be7bfb66e8bed3f7"
+dependencies = [
+ "libc",
+ "sigchld",
+ "windows-sys 0.60.2",
+]
+
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
+name = "sigchld"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47106eded3c154e70176fc83df9737335c94ce22f821c32d17ed1db1f83badb1"
+dependencies = [
+ "libc",
+ "os_pipe",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
+dependencies = [
+ "errno",
+ "libc",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214"
+
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
+[[package]]
+name = "siphasher"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e"
+
+[[package]]
+name = "slab"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
+
+[[package]]
+name = "smallvec"
+version = "1.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
+
+[[package]]
+name = "socket2"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
+dependencies = [
+ "libc",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "softbuffer"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3"
+dependencies = [
+ "bytemuck",
+ "js-sys",
+ "ndk",
+ "objc2",
+ "objc2-core-foundation",
+ "objc2-core-graphics",
+ "objc2-foundation",
+ "objc2-quartz-core",
+ "raw-window-handle",
+ "redox_syscall",
+ "tracing",
+ "wasm-bindgen",
+ "web-sys",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "soup3"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f"
+dependencies = [
+ "futures-channel",
+ "gio",
+ "glib",
+ "libc",
+ "soup3-sys",
+]
+
+[[package]]
+name = "soup3-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
+
+[[package]]
+name = "string_cache"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f"
+dependencies = [
+ "new_debug_unreachable",
+ "parking_lot",
+ "phf_shared 0.11.3",
+ "precomputed-hash",
+ "serde",
+]
+
+[[package]]
+name = "string_cache"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901"
+dependencies = [
+ "new_debug_unreachable",
+ "parking_lot",
+ "phf_shared 0.13.1",
+ "precomputed-hash",
+]
+
+[[package]]
+name = "string_cache_codegen"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0"
+dependencies = [
+ "phf_generator 0.11.3",
+ "phf_shared 0.11.3",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "string_cache_codegen"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69"
+dependencies = [
+ "phf_generator 0.13.1",
+ "phf_shared 0.13.1",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "strsim"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+
+[[package]]
+name = "swift-rs"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7"
+dependencies = [
+ "base64 0.21.7",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349"
+dependencies = [
+ "cfg-expr",
+ "heck 0.5.0",
+ "pkg-config",
+ "toml 0.8.2",
+ "version-compare",
+]
+
+[[package]]
+name = "tao"
+version = "0.34.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9103edf55f2da3c82aea4c7fab7c4241032bfeea0e71fa557d98e00e7ce7cc20"
+dependencies = [
+ "bitflags 2.11.0",
+ "block2",
+ "core-foundation",
+ "core-graphics",
+ "crossbeam-channel",
+ "dispatch2",
+ "dlopen2",
+ "dpi",
+ "gdkwayland-sys",
+ "gdkx11-sys",
+ "gtk",
+ "jni",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-context",
+ "ndk-sys",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-foundation",
+ "once_cell",
+ "parking_lot",
+ "raw-window-handle",
+ "tao-macros",
+ "unicode-segmentation",
+ "url",
+ "windows",
+ "windows-core 0.61.2",
+ "windows-version",
+ "x11-dl",
+]
+
+[[package]]
+name = "tao-macros"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
+
+[[package]]
+name = "tauri"
+version = "2.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da77cc00fb9028caf5b5d4650f75e31f1ef3693459dfca7f7e506d1ecef0ba2d"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "cookie",
+ "dirs",
+ "dunce",
+ "embed_plist",
+ "getrandom 0.3.4",
+ "glob",
+ "gtk",
+ "heck 0.5.0",
+ "http",
+ "jni",
+ "libc",
+ "log",
+ "mime",
+ "muda",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-foundation",
+ "objc2-ui-kit",
+ "objc2-web-kit",
+ "percent-encoding",
+ "plist",
+ "raw-window-handle",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "serialize-to-javascript",
+ "swift-rs",
+ "tauri-build",
+ "tauri-macros",
+ "tauri-runtime",
+ "tauri-runtime-wry",
+ "tauri-utils",
+ "thiserror 2.0.18",
+ "tokio",
+ "tray-icon",
+ "url",
+ "webkit2gtk",
+ "webview2-com",
+ "window-vibrancy",
+ "windows",
+]
+
+[[package]]
+name = "tauri-build"
+version = "2.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bbc990d1dbf57a8e1c7fa2327f2a614d8b757805603c1b9ba5c81bade09fd4d"
+dependencies = [
+ "anyhow",
+ "cargo_toml",
+ "dirs",
+ "glob",
+ "heck 0.5.0",
+ "json-patch",
+ "schemars 0.8.22",
+ "semver",
+ "serde",
+ "serde_json",
+ "tauri-utils",
+ "tauri-winres",
+ "toml 0.9.12+spec-1.1.0",
+ "walkdir",
+]
+
+[[package]]
+name = "tauri-codegen"
+version = "2.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4a24476afd977c5d5d169f72425868613d82747916dd29e0a357c84c4bd6d29"
+dependencies = [
+ "base64 0.22.1",
+ "brotli",
+ "ico",
+ "json-patch",
+ "plist",
+ "png",
+ "proc-macro2",
+ "quote",
+ "semver",
+ "serde",
+ "serde_json",
+ "sha2",
+ "syn 2.0.117",
+ "tauri-utils",
+ "thiserror 2.0.18",
+ "time",
+ "url",
+ "uuid",
+ "walkdir",
+]
+
+[[package]]
+name = "tauri-macros"
+version = "2.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d39b349a98dadaffebb73f0a40dcd1f23c999211e5a2e744403db384d0c33de7"
+dependencies = [
+ "heck 0.5.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+ "tauri-codegen",
+ "tauri-utils",
+]
+
+[[package]]
+name = "tauri-plugin"
+version = "2.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddde7d51c907b940fb573006cdda9a642d6a7c8153657e88f8a5c3c9290cd4aa"
+dependencies = [
+ "anyhow",
+ "glob",
+ "plist",
+ "schemars 0.8.22",
+ "serde",
+ "serde_json",
+ "tauri-utils",
+ "toml 0.9.12+spec-1.1.0",
+ "walkdir",
+]
+
+[[package]]
+name = "tauri-plugin-dialog"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9204b425d9be8d12aa60c2a83a289cf7d1caae40f57f336ed1155b3a5c0e359b"
+dependencies = [
+ "log",
+ "raw-window-handle",
+ "rfd",
+ "serde",
+ "serde_json",
+ "tauri",
+ "tauri-plugin",
+ "tauri-plugin-fs",
+ "thiserror 2.0.18",
+ "url",
+]
+
+[[package]]
+name = "tauri-plugin-fs"
+version = "2.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed390cc669f937afeb8b28032ce837bac8ea023d975a2e207375ec05afaf1804"
+dependencies = [
+ "anyhow",
+ "dunce",
+ "glob",
+ "percent-encoding",
+ "schemars 0.8.22",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "tauri",
+ "tauri-plugin",
+ "tauri-utils",
+ "thiserror 2.0.18",
+ "toml 0.9.12+spec-1.1.0",
+ "url",
+]
+
+[[package]]
+name = "tauri-plugin-shell"
+version = "2.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8457dbf9e2bab1edd8df22bb2c20857a59a9868e79cb3eac5ed639eec4d0c73b"
+dependencies = [
+ "encoding_rs",
+ "log",
+ "open",
+ "os_pipe",
+ "regex",
+ "schemars 0.8.22",
+ "serde",
+ "serde_json",
+ "shared_child",
+ "tauri",
+ "tauri-plugin",
+ "thiserror 2.0.18",
+ "tokio",
+]
+
+[[package]]
+name = "tauri-runtime"
+version = "2.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2826d79a3297ed08cd6ea7f412644ef58e32969504bc4fbd8d7dbeabc4445ea2"
+dependencies = [
+ "cookie",
+ "dpi",
+ "gtk",
+ "http",
+ "jni",
+ "objc2",
+ "objc2-ui-kit",
+ "objc2-web-kit",
+ "raw-window-handle",
+ "serde",
+ "serde_json",
+ "tauri-utils",
+ "thiserror 2.0.18",
+ "url",
+ "webkit2gtk",
+ "webview2-com",
+ "windows",
+]
+
+[[package]]
+name = "tauri-runtime-wry"
+version = "2.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e11ea2e6f801d275fdd890d6c9603736012742a1c33b96d0db788c9cdebf7f9e"
+dependencies = [
+ "gtk",
+ "http",
+ "jni",
+ "log",
+ "objc2",
+ "objc2-app-kit",
+ "once_cell",
+ "percent-encoding",
+ "raw-window-handle",
+ "softbuffer",
+ "tao",
+ "tauri-runtime",
+ "tauri-utils",
+ "url",
+ "webkit2gtk",
+ "webview2-com",
+ "windows",
+ "wry",
+]
+
+[[package]]
+name = "tauri-utils"
+version = "2.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "219a1f983a2af3653f75b5747f76733b0da7ff03069c7a41901a5eb3ace4557d"
+dependencies = [
+ "anyhow",
+ "brotli",
+ "cargo_metadata",
+ "ctor",
+ "dunce",
+ "glob",
+ "html5ever 0.29.1",
+ "http",
+ "infer",
+ "json-patch",
+ "kuchikiki",
+ "log",
+ "memchr",
+ "phf 0.11.3",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "schemars 0.8.22",
+ "semver",
+ "serde",
+ "serde-untagged",
+ "serde_json",
+ "serde_with",
+ "swift-rs",
+ "thiserror 2.0.18",
+ "toml 0.9.12+spec-1.1.0",
+ "url",
+ "urlpattern",
+ "uuid",
+ "walkdir",
+]
+
+[[package]]
+name = "tauri-winres"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1087b111fe2b005e42dbdc1990fc18593234238d47453b0c99b7de1c9ab2c1e0"
+dependencies = [
+ "dunce",
+ "embed-resource",
+ "toml 0.9.12+spec-1.1.0",
+]
+
+[[package]]
+name = "tendril"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+dependencies = [
+ "futf",
+ "mac",
+ "utf-8",
+]
+
+[[package]]
+name = "tendril"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4790fc369d5a530f4b544b094e31388b9b3a37c0f4652ade4505945f5660d24"
+dependencies = [
+ "new_debug_unreachable",
+ "utf-8",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
+dependencies = [
+ "thiserror-impl 1.0.69",
+]
+
+[[package]]
+name = "thiserror"
+version = "2.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
+dependencies = [
+ "thiserror-impl 2.0.18",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "2.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "time"
+version = "0.3.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c"
+dependencies = [
+ "deranged",
+ "itoa",
+ "num-conv",
+ "powerfmt",
+ "serde_core",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca"
+
+[[package]]
+name = "time-macros"
+version = "0.2.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215"
+dependencies = [
+ "num-conv",
+ "time-core",
+]
+
+[[package]]
+name = "tinystr"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d"
+dependencies = [
+ "displaydoc",
+ "zerovec",
+]
+
+[[package]]
+name = "tokio"
+version = "1.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bd1c4c0fc4a7ab90fc15ef6daaa3ec3b893f004f915f2392557ed23237820cd"
+dependencies = [
+ "bytes",
+ "libc",
+ "mio",
+ "pin-project-lite",
+ "socket2",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
+dependencies = [
+ "serde",
+ "serde_spanned 0.6.9",
+ "toml_datetime 0.6.3",
+ "toml_edit 0.20.2",
+]
+
+[[package]]
+name = "toml"
+version = "0.9.12+spec-1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863"
+dependencies = [
+ "indexmap 2.13.1",
+ "serde_core",
+ "serde_spanned 1.1.1",
+ "toml_datetime 0.7.5+spec-1.1.0",
+ "toml_parser",
+ "toml_writer",
+ "winnow 0.7.15",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.7.5+spec-1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347"
+dependencies = [
+ "serde_core",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "1.1.1+spec-1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7"
+dependencies = [
+ "serde_core",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap 2.13.1",
+ "toml_datetime 0.6.3",
+ "winnow 0.5.40",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
+dependencies = [
+ "indexmap 2.13.1",
+ "serde",
+ "serde_spanned 0.6.9",
+ "toml_datetime 0.6.3",
+ "winnow 0.5.40",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.25.10+spec-1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a82418ca169e235e6c399a84e395ab6debeb3bc90edc959bf0f48647c6a32d1b"
+dependencies = [
+ "indexmap 2.13.1",
+ "toml_datetime 1.1.1+spec-1.1.0",
+ "toml_parser",
+ "winnow 1.0.1",
+]
+
+[[package]]
+name = "toml_parser"
+version = "1.1.2+spec-1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
+dependencies = [
+ "winnow 1.0.1",
+]
+
+[[package]]
+name = "toml_writer"
+version = "1.1.1+spec-1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db"
+
+[[package]]
+name = "tower"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project-lite",
+ "sync_wrapper",
+ "tokio",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tower-http"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
+dependencies = [
+ "bitflags 2.11.0",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "iri-string",
+ "pin-project-lite",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
+
+[[package]]
+name = "tower-service"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
+
+[[package]]
+name = "tracing"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
+dependencies = [
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tray-icon"
+version = "0.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5e85aa143ceb072062fc4d6356c1b520a51d636e7bc8e77ec94be3608e5e80c"
+dependencies = [
+ "crossbeam-channel",
+ "dirs",
+ "libappindicator",
+ "muda",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-core-foundation",
+ "objc2-core-graphics",
+ "objc2-foundation",
+ "once_cell",
+ "png",
+ "serde",
+ "thiserror 2.0.18",
+ "windows-sys 0.60.2",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+
+[[package]]
+name = "typeid"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
+
+[[package]]
+name = "typenum"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
+
+[[package]]
+name = "unic-char-property"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
+dependencies = [
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-range"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
+
+[[package]]
+name = "unic-common"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
+
+[[package]]
+name = "unic-ucd-ident"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-version"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
+dependencies = [
+ "unic-common",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
+
+[[package]]
+name = "url"
+version = "2.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+ "serde_derive",
+]
+
+[[package]]
+name = "urlpattern"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d"
+dependencies = [
+ "regex",
+ "serde",
+ "unic-ucd-ident",
+ "url",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8_iter"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+
+[[package]]
+name = "uuid"
+version = "1.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9"
+dependencies = [
+ "getrandom 0.4.2",
+ "js-sys",
+ "serde_core",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "version-compare"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e"
+
+[[package]]
+name = "version_check"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+[[package]]
+name = "vswhom"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b"
+dependencies = [
+ "libc",
+ "vswhom-sys",
+]
+
+[[package]]
+name = "vswhom-sys"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.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"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
+
+[[package]]
+name = "wasip2"
+version = "1.0.2+wasi-0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+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.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "rustversion",
+ "wasm-bindgen-macro",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03623de6905b7206edd0a75f69f747f134b7f0a2323392d664448bf2d3c5d87e"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2"
+dependencies = [
+ "bumpalo",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b"
+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.1",
+ "wasm-encoder",
+ "wasmparser",
+]
+
+[[package]]
+name = "wasm-streams"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb"
+dependencies = [
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
+dependencies = [
+ "bitflags 2.11.0",
+ "hashbrown 0.15.5",
+ "indexmap 2.13.1",
+ "semver",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "web_atoms"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a9779e9f04d2ac1ce317aee707aa2f6b773afba7b931222bff6983843b1576"
+dependencies = [
+ "phf 0.13.1",
+ "phf_codegen 0.13.1",
+ "string_cache 0.9.0",
+ "string_cache_codegen 0.6.1",
+]
+
+[[package]]
+name = "webkit2gtk"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "gdk",
+ "gdk-sys",
+ "gio",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "gtk",
+ "gtk-sys",
+ "javascriptcore-rs",
+ "libc",
+ "once_cell",
+ "soup3",
+ "webkit2gtk-sys",
+]
+
+[[package]]
+name = "webkit2gtk-sys"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-sys-rs",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "javascriptcore-rs-sys",
+ "libc",
+ "pkg-config",
+ "soup3-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "webview2-com"
+version = "0.38.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a"
+dependencies = [
+ "webview2-com-macros",
+ "webview2-com-sys",
+ "windows",
+ "windows-core 0.61.2",
+ "windows-implement",
+ "windows-interface",
+]
+
+[[package]]
+name = "webview2-com-macros"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "webview2-com-sys"
+version = "0.38.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c"
+dependencies = [
+ "thiserror 2.0.18",
+ "windows",
+ "windows-core 0.61.2",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
+dependencies = [
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "window-vibrancy"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c"
+dependencies = [
+ "objc2",
+ "objc2-app-kit",
+ "objc2-core-foundation",
+ "objc2-foundation",
+ "raw-window-handle",
+ "windows-sys 0.59.0",
+ "windows-version",
+]
+
+[[package]]
+name = "windows"
+version = "0.61.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
+dependencies = [
+ "windows-collections",
+ "windows-core 0.61.2",
+ "windows-future",
+ "windows-link 0.1.3",
+ "windows-numerics",
+]
+
+[[package]]
+name = "windows-collections"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
+dependencies = [
+ "windows-core 0.61.2",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.61.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
+dependencies = [
+ "windows-implement",
+ "windows-interface",
+ "windows-link 0.1.3",
+ "windows-result 0.3.4",
+ "windows-strings 0.4.2",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.62.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
+dependencies = [
+ "windows-implement",
+ "windows-interface",
+ "windows-link 0.2.1",
+ "windows-result 0.4.1",
+ "windows-strings 0.5.1",
+]
+
+[[package]]
+name = "windows-future"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
+dependencies = [
+ "windows-core 0.61.2",
+ "windows-link 0.1.3",
+ "windows-threading",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.60.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "windows-interface"
+version = "0.59.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "windows-link"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
+
+[[package]]
+name = "windows-link"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
+
+[[package]]
+name = "windows-numerics"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
+dependencies = [
+ "windows-core 0.61.2",
+ "windows-link 0.1.3",
+]
+
+[[package]]
+name = "windows-result"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
+dependencies = [
+ "windows-link 0.1.3",
+]
+
+[[package]]
+name = "windows-result"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
+dependencies = [
+ "windows-link 0.2.1",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
+dependencies = [
+ "windows-link 0.1.3",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
+dependencies = [
+ "windows-link 0.2.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.59.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+dependencies = [
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.60.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
+dependencies = [
+ "windows-targets 0.53.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.61.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
+dependencies = [
+ "windows-link 0.2.1",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.6",
+ "windows_aarch64_msvc 0.52.6",
+ "windows_i686_gnu 0.52.6",
+ "windows_i686_gnullvm 0.52.6",
+ "windows_i686_msvc 0.52.6",
+ "windows_x86_64_gnu 0.52.6",
+ "windows_x86_64_gnullvm 0.52.6",
+ "windows_x86_64_msvc 0.52.6",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.53.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
+dependencies = [
+ "windows-link 0.2.1",
+ "windows_aarch64_gnullvm 0.53.1",
+ "windows_aarch64_msvc 0.53.1",
+ "windows_i686_gnu 0.53.1",
+ "windows_i686_gnullvm 0.53.1",
+ "windows_i686_msvc 0.53.1",
+ "windows_x86_64_gnu 0.53.1",
+ "windows_x86_64_gnullvm 0.53.1",
+ "windows_x86_64_msvc 0.53.1",
+]
+
+[[package]]
+name = "windows-threading"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
+dependencies = [
+ "windows-link 0.1.3",
+]
+
+[[package]]
+name = "windows-version"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631"
+dependencies = [
+ "windows-link 0.2.1",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
+
+[[package]]
+name = "winnow"
+version = "0.5.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winnow"
+version = "0.7.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945"
+
+[[package]]
+name = "winnow"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.55.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "wit-bindgen"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+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.1",
+ "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.1",
+ "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.1",
+ "log",
+ "semver",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "unicode-xid",
+ "wasmparser",
+]
+
+[[package]]
+name = "writeable"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4"
+
+[[package]]
+name = "wry"
+version = "0.54.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5a8135d8676225e5744de000d4dff5a082501bf7db6a1c1495034f8c314edbc"
+dependencies = [
+ "base64 0.22.1",
+ "block2",
+ "cookie",
+ "crossbeam-channel",
+ "dirs",
+ "dom_query",
+ "dpi",
+ "dunce",
+ "gdkx11",
+ "gtk",
+ "http",
+ "javascriptcore-rs",
+ "jni",
+ "libc",
+ "ndk",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-core-foundation",
+ "objc2-foundation",
+ "objc2-ui-kit",
+ "objc2-web-kit",
+ "once_cell",
+ "percent-encoding",
+ "raw-window-handle",
+ "sha2",
+ "soup3",
+ "tao-macros",
+ "thiserror 2.0.18",
+ "url",
+ "webkit2gtk",
+ "webkit2gtk-sys",
+ "webview2-com",
+ "windows",
+ "windows-core 0.61.2",
+ "windows-version",
+ "x11-dl",
+]
+
+[[package]]
+name = "x11"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
+dependencies = [
+ "libc",
+ "once_cell",
+ "pkg-config",
+]
+
+[[package]]
+name = "yoke"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca"
+dependencies = [
+ "stable_deref_trait",
+ "yoke-derive",
+ "zerofrom",
+]
+
+[[package]]
+name = "yoke-derive"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+ "synstructure",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "zerofrom"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df"
+dependencies = [
+ "zerofrom-derive",
+]
+
+[[package]]
+name = "zerofrom-derive"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+ "synstructure",
+]
+
+[[package]]
+name = "zerotrie"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf"
+dependencies = [
+ "displaydoc",
+ "yoke",
+ "zerofrom",
+]
+
+[[package]]
+name = "zerovec"
+version = "0.11.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239"
+dependencies = [
+ "yoke",
+ "zerofrom",
+ "zerovec-derive",
+]
+
+[[package]]
+name = "zerovec-derive"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "zmij"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
new file mode 100644
index 0000000..8d70e17
--- /dev/null
+++ b/src-tauri/Cargo.toml
@@ -0,0 +1,21 @@
+[package]
+name = "lunar-code"
+version = "0.1.0"
+description = "Lunar Code - A lightweight code editor"
+authors = ["luna"]
+edition = "2021"
+
+[lib]
+name = "lunar_code_lib"
+crate-type = ["staticlib", "cdylib", "rlib"]
+
+[build-dependencies]
+tauri-build = { version = "2", features = [] }
+
+[dependencies]
+tauri = { version = "2", features = [] }
+tauri-plugin-fs = "2"
+tauri-plugin-dialog = "2"
+tauri-plugin-shell = "2"
+serde = { version = "1", features = ["derive"] }
+serde_json = "1"
diff --git a/src-tauri/build.rs b/src-tauri/build.rs
new file mode 100644
index 0000000..d860e1e
--- /dev/null
+++ b/src-tauri/build.rs
@@ -0,0 +1,3 @@
+fn main() {
+ tauri_build::build()
+}
diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json
new file mode 100644
index 0000000..207b3ab
--- /dev/null
+++ b/src-tauri/capabilities/default.json
@@ -0,0 +1,43 @@
+{
+ "$schema": "../gen/schemas/desktop-schema.json",
+ "identifier": "default",
+ "description": "Capability for the main window",
+ "windows": ["main"],
+ "permissions": [
+ "core:default",
+ "dialog:default",
+ "dialog:allow-open",
+ "dialog:allow-save",
+ "dialog:allow-ask",
+ "dialog:allow-confirm",
+ "dialog:allow-message",
+ "fs:default",
+ "fs:read-all",
+ "fs:write-all",
+ "fs:scope-home-recursive",
+ "shell:default",
+ "shell:allow-open",
+ {
+ "identifier": "shell:allow-execute",
+ "allow": [
+ {
+ "name": "exec-sh",
+ "cmd": "sh",
+ "args": true
+ }
+ ]
+ },
+ {
+ "identifier": "shell:allow-spawn",
+ "allow": [
+ {
+ "name": "exec-sh",
+ "cmd": "sh",
+ "args": true
+ }
+ ]
+ },
+ "shell:allow-stdin-write",
+ "shell:allow-kill"
+ ]
+}
diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png
new file mode 100644
index 0000000..6be5e50
Binary files /dev/null and b/src-tauri/icons/128x128.png differ
diff --git a/src-tauri/icons/128x128@2x.png b/src-tauri/icons/128x128@2x.png
new file mode 100644
index 0000000..e81bece
Binary files /dev/null and b/src-tauri/icons/128x128@2x.png differ
diff --git a/src-tauri/icons/32x32.png b/src-tauri/icons/32x32.png
new file mode 100644
index 0000000..a437dd5
Binary files /dev/null and b/src-tauri/icons/32x32.png differ
diff --git a/src-tauri/icons/Square107x107Logo.png b/src-tauri/icons/Square107x107Logo.png
new file mode 100644
index 0000000..0ca4f27
Binary files /dev/null and b/src-tauri/icons/Square107x107Logo.png differ
diff --git a/src-tauri/icons/Square142x142Logo.png b/src-tauri/icons/Square142x142Logo.png
new file mode 100644
index 0000000..b81f820
Binary files /dev/null and b/src-tauri/icons/Square142x142Logo.png differ
diff --git a/src-tauri/icons/Square150x150Logo.png b/src-tauri/icons/Square150x150Logo.png
new file mode 100644
index 0000000..624c7bf
Binary files /dev/null and b/src-tauri/icons/Square150x150Logo.png differ
diff --git a/src-tauri/icons/Square284x284Logo.png b/src-tauri/icons/Square284x284Logo.png
new file mode 100644
index 0000000..c021d2b
Binary files /dev/null and b/src-tauri/icons/Square284x284Logo.png differ
diff --git a/src-tauri/icons/Square30x30Logo.png b/src-tauri/icons/Square30x30Logo.png
new file mode 100644
index 0000000..6219700
Binary files /dev/null and b/src-tauri/icons/Square30x30Logo.png differ
diff --git a/src-tauri/icons/Square310x310Logo.png b/src-tauri/icons/Square310x310Logo.png
new file mode 100644
index 0000000..f9bc048
Binary files /dev/null and b/src-tauri/icons/Square310x310Logo.png differ
diff --git a/src-tauri/icons/Square44x44Logo.png b/src-tauri/icons/Square44x44Logo.png
new file mode 100644
index 0000000..d5fbfb2
Binary files /dev/null and b/src-tauri/icons/Square44x44Logo.png differ
diff --git a/src-tauri/icons/Square71x71Logo.png b/src-tauri/icons/Square71x71Logo.png
new file mode 100644
index 0000000..63440d7
Binary files /dev/null and b/src-tauri/icons/Square71x71Logo.png differ
diff --git a/src-tauri/icons/Square89x89Logo.png b/src-tauri/icons/Square89x89Logo.png
new file mode 100644
index 0000000..f3f705a
Binary files /dev/null and b/src-tauri/icons/Square89x89Logo.png differ
diff --git a/src-tauri/icons/StoreLogo.png b/src-tauri/icons/StoreLogo.png
new file mode 100644
index 0000000..4556388
Binary files /dev/null and b/src-tauri/icons/StoreLogo.png differ
diff --git a/src-tauri/icons/icon.icns b/src-tauri/icons/icon.icns
new file mode 100644
index 0000000..12a5bce
Binary files /dev/null and b/src-tauri/icons/icon.icns differ
diff --git a/src-tauri/icons/icon.ico b/src-tauri/icons/icon.ico
new file mode 100644
index 0000000..b3636e4
Binary files /dev/null and b/src-tauri/icons/icon.ico differ
diff --git a/src-tauri/icons/icon.png b/src-tauri/icons/icon.png
new file mode 100644
index 0000000..e1cd261
Binary files /dev/null and b/src-tauri/icons/icon.png differ
diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs
new file mode 100644
index 0000000..1dd9002
--- /dev/null
+++ b/src-tauri/src/lib.rs
@@ -0,0 +1,232 @@
+use std::fs;
+use std::io::BufRead;
+use std::path::Path;
+
+#[derive(serde::Serialize)]
+pub struct DirEntry {
+ pub name: String,
+ pub path: String,
+ pub is_dir: bool,
+}
+
+#[tauri::command]
+fn read_directory(path: String) -> Result, String> {
+ let dir_path = Path::new(&path);
+ if !dir_path.is_dir() {
+ return Err(format!("{} is not a directory", path));
+ }
+
+ let mut entries: Vec = Vec::new();
+ let read_dir = fs::read_dir(dir_path).map_err(|e| e.to_string())?;
+
+ for entry in read_dir {
+ let entry = entry.map_err(|e| e.to_string())?;
+ let file_name = entry.file_name().to_string_lossy().to_string();
+
+ if file_name.starts_with('.') {
+ continue;
+ }
+
+ let file_path = entry.path().to_string_lossy().to_string();
+ let is_dir = entry.path().is_dir();
+
+ entries.push(DirEntry {
+ name: file_name,
+ path: file_path,
+ is_dir,
+ });
+ }
+
+ entries.sort_by(|a, b| {
+ if a.is_dir == b.is_dir {
+ a.name.to_lowercase().cmp(&b.name.to_lowercase())
+ } else if a.is_dir {
+ std::cmp::Ordering::Less
+ } else {
+ std::cmp::Ordering::Greater
+ }
+ });
+
+ Ok(entries)
+}
+
+#[tauri::command]
+fn read_file(path: String) -> Result {
+ fs::read_to_string(&path).map_err(|e| format!("Failed to read {}: {}", path, e))
+}
+
+#[tauri::command]
+fn write_file(path: String, contents: String) -> Result<(), String> {
+ fs::write(&path, contents).map_err(|e| format!("Failed to write {}: {}", path, e))
+}
+
+#[tauri::command]
+fn create_file(path: String) -> Result<(), String> {
+ if Path::new(&path).exists() {
+ return Err(format!("{} already exists", path));
+ }
+ fs::write(&path, "").map_err(|e| e.to_string())
+}
+
+#[tauri::command]
+fn create_directory(path: String) -> Result<(), String> {
+ fs::create_dir_all(&path).map_err(|e| e.to_string())
+}
+
+#[tauri::command]
+fn rename_path(old_path: String, new_path: String) -> Result<(), String> {
+ fs::rename(&old_path, &new_path).map_err(|e| e.to_string())
+}
+
+#[tauri::command]
+fn delete_path(path: String) -> Result<(), String> {
+ let p = Path::new(&path);
+ if p.is_dir() {
+ fs::remove_dir_all(p).map_err(|e| e.to_string())
+ } else {
+ fs::remove_file(p).map_err(|e| e.to_string())
+ }
+}
+
+#[derive(serde::Serialize)]
+pub struct SearchMatch {
+ pub file_path: String,
+ pub file_name: String,
+ pub line_number: usize,
+ pub line_content: String,
+ pub match_start: usize,
+ pub match_end: usize,
+}
+
+const SKIP_DIRS: &[&str] = &[
+ "node_modules", "target", ".git", "dist", "build", "__pycache__",
+ ".next", ".nuxt", "vendor", ".venv", "venv",
+];
+
+fn search_dir(
+ dir: &Path,
+ query: &str,
+ case_sensitive: bool,
+ results: &mut Vec,
+ max_results: usize,
+) {
+ if results.len() >= max_results {
+ return;
+ }
+
+ let read_dir = match fs::read_dir(dir) {
+ Ok(rd) => rd,
+ Err(_) => return,
+ };
+
+ let mut entries: Vec<_> = read_dir.filter_map(|e| e.ok()).collect();
+ entries.sort_by(|a, b| a.file_name().cmp(&b.file_name()));
+
+ for entry in entries {
+ if results.len() >= max_results {
+ return;
+ }
+
+ let name = entry.file_name().to_string_lossy().to_string();
+ if name.starts_with('.') {
+ continue;
+ }
+
+ let path = entry.path();
+ if path.is_dir() {
+ if SKIP_DIRS.contains(&name.as_str()) {
+ continue;
+ }
+ search_dir(&path, query, case_sensitive, results, max_results);
+ } else {
+ search_file(&path, &name, query, case_sensitive, results, max_results);
+ }
+ }
+}
+
+fn search_file(
+ path: &Path,
+ name: &str,
+ query: &str,
+ case_sensitive: bool,
+ results: &mut Vec,
+ max_results: usize,
+) {
+ let file = match fs::File::open(path) {
+ Ok(f) => f,
+ Err(_) => return,
+ };
+
+ // Skip binary/large files
+ let metadata = match file.metadata() {
+ Ok(m) => m,
+ Err(_) => return,
+ };
+ if metadata.len() > 2_000_000 {
+ return;
+ }
+
+ let reader = std::io::BufReader::new(file);
+ let query_lower = if case_sensitive { query.to_string() } else { query.to_lowercase() };
+ let path_str = path.to_string_lossy().to_string();
+
+ for (i, line) in reader.lines().enumerate() {
+ if results.len() >= max_results {
+ return;
+ }
+ let line = match line {
+ Ok(l) => l,
+ Err(_) => return, // likely binary
+ };
+ let search_line = if case_sensitive { line.clone() } else { line.to_lowercase() };
+ if let Some(pos) = search_line.find(&query_lower) {
+ results.push(SearchMatch {
+ file_path: path_str.clone(),
+ file_name: name.to_string(),
+ line_number: i + 1,
+ line_content: line.chars().take(500).collect(),
+ match_start: pos,
+ match_end: pos + query.len(),
+ });
+ }
+ }
+}
+
+#[tauri::command]
+fn search_in_files(
+ dir: String,
+ query: String,
+ case_sensitive: bool,
+) -> Result, String> {
+ let dir_path = Path::new(&dir);
+ if !dir_path.is_dir() {
+ return Err(format!("{} is not a directory", dir));
+ }
+ if query.is_empty() {
+ return Ok(vec![]);
+ }
+
+ let mut results = Vec::new();
+ search_dir(dir_path, &query, case_sensitive, &mut results, 1000);
+ Ok(results)
+}
+
+#[cfg_attr(mobile, tauri::mobile_entry_point)]
+pub fn run() {
+ tauri::Builder::default()
+ .plugin(tauri_plugin_fs::init())
+ .plugin(tauri_plugin_dialog::init())
+ .plugin(tauri_plugin_shell::init())
+ .invoke_handler(tauri::generate_handler![
+ read_directory,
+ read_file,
+ write_file,
+ create_file,
+ create_directory,
+ rename_path,
+ delete_path,
+ search_in_files,
+ ])
+ .run(tauri::generate_context!())
+ .expect("error while running tauri application");
+}
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
new file mode 100644
index 0000000..01fb414
--- /dev/null
+++ b/src-tauri/src/main.rs
@@ -0,0 +1,6 @@
+// Prevents additional console window on Windows in release, DO NOT REMOVE!!
+#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
+
+fn main() {
+ lunar_code_lib::run()
+}
diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json
new file mode 100644
index 0000000..d981e8f
--- /dev/null
+++ b/src-tauri/tauri.conf.json
@@ -0,0 +1,45 @@
+{
+ "$schema": "https://schema.tauri.app/config/2",
+ "productName": "Lunar Code",
+ "version": "0.1.0",
+ "identifier": "com.luna.lunar-code",
+ "build": {
+ "beforeDevCommand": "pnpm dev",
+ "devUrl": "http://localhost:1420",
+ "beforeBuildCommand": "pnpm build",
+ "frontendDist": "../dist"
+ },
+ "app": {
+ "windows": [
+ {
+ "title": "Lunar Code",
+ "width": 1200,
+ "height": 800,
+ "minWidth": 640,
+ "minHeight": 480
+ }
+ ],
+ "security": {
+ "csp": null
+ }
+ },
+ "bundle": {
+ "active": true,
+ "targets": "all",
+ "icon": [
+ "icons/32x32.png",
+ "icons/128x128.png",
+ "icons/128x128@2x.png",
+ "icons/icon.icns",
+ "icons/icon.ico"
+ ]
+ },
+ "plugins": {
+ "fs": {
+ "requireLiteralLeadingDot": false
+ },
+ "shell": {
+ "open": true
+ }
+ }
+}
diff --git a/src/App.tsx b/src/App.tsx
new file mode 100644
index 0000000..9d33b75
--- /dev/null
+++ b/src/App.tsx
@@ -0,0 +1,187 @@
+import { useState, useCallback, useRef, useEffect } from "react";
+import { Panel, Group as PanelGroup, Separator as PanelResizeHandle } from "react-resizable-panels";
+import { TooltipProvider } from "@/components/ui/tooltip";
+import { Toaster } from "sonner";
+import { AppMenubar } from "@/components/Menubar";
+import { FileTree } from "@/components/FileTree";
+import { SearchPanel } from "@/components/SearchPanel";
+import { EditorTabs } from "@/components/EditorTabs";
+import { Editor, type EditorHandle } from "@/components/Editor";
+import { StatusBar } from "@/components/StatusBar";
+import { CommandPalette } from "@/components/CommandPalette";
+import { QuickOpen } from "@/components/QuickOpen";
+import { SettingsDialog } from "@/components/SettingsDialog";
+import { GoToLineDialog } from "@/components/GoToLineDialog";
+import { WelcomeTab } from "@/components/WelcomeTab";
+import { Terminal } from "@/components/Terminal";
+import { useKeyboardShortcuts } from "@/hooks/useKeyboardShortcuts";
+import { useAutoSave } from "@/hooks/useAutoSave";
+import { useStore, actions } from "@/lib/store";
+import { applyTheme, loadCustomCSS } from "@/lib/themes";
+
+function App() {
+ const [commandPaletteOpen, setCommandPaletteOpen] = useState(false);
+ const [quickOpenOpen, setQuickOpenOpen] = useState(false);
+ const [settingsOpen, setSettingsOpen] = useState(false);
+ const [goToLineOpen, setGoToLineOpen] = useState(false);
+ const { sidebarVisible, sidebarView, terminalVisible, splitEditorPath, tabs, activeTabPath, settings } = useStore();
+ const editorRef = useRef(null);
+ const splitEditorRef = useRef(null);
+
+ const activeTab = tabs.find((t) => t.path === activeTabPath);
+
+ const openCommandPalette = useCallback(() => setCommandPaletteOpen(true), []);
+ const openQuickOpen = useCallback(() => setQuickOpenOpen(true), []);
+ const openSettings = useCallback(() => setSettingsOpen(true), []);
+ const openGoToLine = useCallback(() => setGoToLineOpen(true), []);
+
+ const handleToggleTerminal = useCallback(() => actions.toggleTerminal(), []);
+ const handleSearchInFiles = useCallback(() => actions.setSidebarView("search"), []);
+ const handleToggleSplitEditor = useCallback(() => {
+ if (splitEditorPath) {
+ actions.setSplitEditor(null);
+ } else if (activeTabPath) {
+ actions.setSplitEditor(activeTabPath);
+ }
+ }, [splitEditorPath, activeTabPath]);
+
+ const handleGoToLine = useCallback((line: number) => {
+ editorRef.current?.goToLine(line);
+ }, []);
+
+ useKeyboardShortcuts({
+ onOpenCommandPalette: openCommandPalette,
+ onOpenQuickOpen: openQuickOpen,
+ onToggleTerminal: handleToggleTerminal,
+ onSearchInFiles: handleSearchInFiles,
+ onGoToLine: openGoToLine,
+ onSplitEditor: handleToggleSplitEditor,
+ });
+
+ useAutoSave();
+
+ // Apply theme on mount and when theme changes
+ useEffect(() => {
+ applyTheme(settings.theme);
+ }, [settings.theme]);
+
+ // Load custom CSS on mount and when path changes
+ useEffect(() => {
+ loadCustomCSS(settings.customCssPath);
+ }, [settings.customCssPath]);
+
+ const maxLine = activeTab ? activeTab.content.split("\n").length : undefined;
+
+ return (
+
+
+ {/* Menubar */}
+
+
+ {/* Main content */}
+
+
+ {/* Sidebar */}
+ {sidebarVisible && (
+ <>
+
+ {sidebarView === "files" ? : }
+
+
+ >
+ )}
+
+ {/* Editor + Terminal vertical split */}
+
+
+ {/* Editor area */}
+
+
+
+
+ {tabs.length === 0 ? (
+
+ ) : (
+
+
+
+
+ {splitEditorPath && (
+ <>
+
+
+
+
+ >
+ )}
+
+ )}
+
+
+
+
+ {/* Terminal */}
+ {terminalVisible && (
+ <>
+
+
+
+
+ >
+ )}
+
+
+
+
+
+ {/* Status bar */}
+
+
+
+ {/* Dialogs */}
+
+
+
+
+
+
+
+ );
+}
+
+export default App;
diff --git a/src/components/CommandPalette.tsx b/src/components/CommandPalette.tsx
new file mode 100644
index 0000000..de98d72
--- /dev/null
+++ b/src/components/CommandPalette.tsx
@@ -0,0 +1,187 @@
+import { useCallback } from "react";
+import { Command } from "cmdk";
+import { Dialog, DialogContent, DialogTitle } from "@/components/ui/dialog";
+import { VisuallyHidden } from "@radix-ui/react-visually-hidden";
+import { actions, useStore } from "@/lib/store";
+import { invoke } from "@tauri-apps/api/core";
+import { open } from "@tauri-apps/plugin-dialog";
+import { toast } from "sonner";
+
+interface CommandPaletteProps {
+ open: boolean;
+ onOpenChange: (open: boolean) => void;
+ onOpenSettings: () => void;
+ onToggleTerminal: () => void;
+ onSearchInFiles: () => void;
+ onGoToLine: () => void;
+ onSplitEditor: () => void;
+}
+
+const itemClass =
+ "flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm text-foreground outline-none transition-colors aria-selected:bg-accent aria-selected:text-accent-foreground";
+
+export function CommandPalette({
+ open: isOpen,
+ onOpenChange,
+ onOpenSettings,
+ onToggleTerminal,
+ onSearchInFiles,
+ onGoToLine,
+ onSplitEditor,
+}: CommandPaletteProps) {
+ const store = useStore();
+ const activeTab = store.tabs.find((t) => t.path === store.activeTabPath);
+
+ const close = useCallback(() => onOpenChange(false), [onOpenChange]);
+
+ const handleSave = useCallback(async () => {
+ if (!activeTab) return;
+ try {
+ await invoke("write_file", { path: activeTab.path, contents: activeTab.content });
+ actions.markSaved(activeTab.path);
+ toast.success("File saved");
+ } catch (err) {
+ toast.error("Failed to save: " + String(err));
+ }
+ close();
+ }, [activeTab, close]);
+
+ const handleSaveAll = useCallback(async () => {
+ for (const tab of store.tabs) {
+ if (tab.content !== tab.savedContent) {
+ try {
+ await invoke("write_file", { path: tab.path, contents: tab.content });
+ actions.markSaved(tab.path);
+ } catch (err) {
+ toast.error(`Failed to save ${tab.name}: ${String(err)}`);
+ }
+ }
+ }
+ toast.success("All files saved");
+ close();
+ }, [store.tabs, close]);
+
+ const handleOpenFolder = useCallback(async () => {
+ const selected = await open({ directory: true, multiple: false });
+ if (selected) {
+ actions.setWorkspace(selected as string);
+ }
+ close();
+ }, [close]);
+
+ return (
+
+ );
+}
diff --git a/src/components/Editor.tsx b/src/components/Editor.tsx
new file mode 100644
index 0000000..b5afb73
--- /dev/null
+++ b/src/components/Editor.tsx
@@ -0,0 +1,162 @@
+import { useEffect, useRef, useCallback, useImperativeHandle, forwardRef } from "react";
+import { EditorView, keymap, lineNumbers, highlightActiveLineGutter, highlightSpecialChars, drawSelection, dropCursor, rectangularSelection, crosshairCursor, highlightActiveLine } from "@codemirror/view";
+import { EditorState } from "@codemirror/state";
+import { history, defaultKeymap, historyKeymap, indentWithTab } from "@codemirror/commands";
+import { foldGutter, indentOnInput, syntaxHighlighting, defaultHighlightStyle, bracketMatching, foldKeymap } from "@codemirror/language";
+import { closeBrackets, autocompletion, closeBracketsKeymap, completionKeymap } from "@codemirror/autocomplete";
+import { searchKeymap, highlightSelectionMatches } from "@codemirror/search";
+import { lintKeymap } from "@codemirror/lint";
+import { vscodeDark, vscodeLight } from "@uiw/codemirror-theme-vscode";
+import { actions, useStore } from "@/lib/store";
+import { getLanguageExtension } from "@/lib/languageDetect";
+import type { Extension } from "@codemirror/state";
+
+export interface EditorHandle {
+ getView(): EditorView | null;
+ goToLine(line: number): void;
+}
+
+interface EditorProps {
+ tabPath?: string; // if provided, use this instead of store.activeTabPath (for split view)
+}
+
+export const Editor = forwardRef(function Editor({ tabPath }, ref) {
+ const containerRef = useRef(null);
+ const viewRef = useRef(null);
+ const store = useStore();
+ const effectivePath = tabPath ?? store.activeTabPath;
+ const activeTab = store.tabs.find((t) => t.path === effectivePath);
+ const currentPathRef = useRef(null);
+
+ useImperativeHandle(ref, () => ({
+ getView() {
+ return viewRef.current;
+ },
+ goToLine(line: number) {
+ const view = viewRef.current;
+ if (!view) return;
+ const doc = view.state.doc;
+ const lineNum = Math.max(1, Math.min(line, doc.lines));
+ const pos = doc.line(lineNum).from;
+ view.dispatch({
+ selection: { anchor: pos },
+ scrollIntoView: true,
+ });
+ view.focus();
+ },
+ }));
+
+ const createView = useCallback(async (content: string, language: string, path: string) => {
+ if (!containerRef.current) return;
+
+ if (viewRef.current) {
+ viewRef.current.destroy();
+ viewRef.current = null;
+ }
+
+ const langExt = await getLanguageExtension(language);
+ const theme = store.settings.theme === "light" ? vscodeLight : vscodeDark;
+ const extensions: Extension[] = [
+ lineNumbers(),
+ highlightActiveLineGutter(),
+ highlightSpecialChars(),
+ history(),
+ foldGutter(),
+ drawSelection(),
+ dropCursor(),
+ EditorState.allowMultipleSelections.of(true),
+ indentOnInput(),
+ syntaxHighlighting(defaultHighlightStyle, { fallback: true }),
+ bracketMatching(),
+ closeBrackets(),
+ autocompletion(),
+ rectangularSelection(),
+ crosshairCursor(),
+ highlightActiveLine(),
+ highlightSelectionMatches(),
+ keymap.of([
+ ...closeBracketsKeymap,
+ ...defaultKeymap,
+ ...searchKeymap,
+ ...historyKeymap,
+ ...foldKeymap,
+ ...completionKeymap,
+ ...lintKeymap,
+ indentWithTab,
+ ]),
+ theme,
+ EditorState.tabSize.of(store.settings.tabSize),
+ EditorView.theme({
+ "&": {
+ fontSize: store.settings.fontSize + "px",
+ fontFamily: store.settings.fontFamily,
+ },
+ ".cm-content": {
+ fontFamily: store.settings.fontFamily,
+ },
+ ".cm-gutters": {
+ fontFamily: store.settings.fontFamily,
+ },
+ }),
+ EditorView.updateListener.of((update) => {
+ if (update.docChanged) {
+ actions.updateContent(path, update.state.doc.toString());
+ }
+ if (update.selectionSet && !tabPath) {
+ const pos = update.state.selection.main.head;
+ const line = update.state.doc.lineAt(pos);
+ actions.setCursor(line.number, pos - line.from + 1);
+ }
+ }),
+ ];
+
+ if (store.settings.wordWrap) {
+ extensions.push(EditorView.lineWrapping);
+ }
+
+ if (langExt) {
+ extensions.push(langExt);
+ }
+
+ const state = EditorState.create({
+ doc: content,
+ extensions,
+ });
+
+ viewRef.current = new EditorView({
+ state,
+ parent: containerRef.current,
+ });
+
+ currentPathRef.current = path;
+ }, [store.settings.fontSize, store.settings.fontFamily, store.settings.tabSize, store.settings.wordWrap, store.settings.theme, tabPath]);
+
+ useEffect(() => {
+ if (!activeTab) {
+ if (viewRef.current) {
+ viewRef.current.destroy();
+ viewRef.current = null;
+ currentPathRef.current = null;
+ }
+ return;
+ }
+
+ if (currentPathRef.current !== activeTab.path) {
+ createView(activeTab.content, activeTab.language, activeTab.path);
+ }
+ }, [activeTab, createView]);
+
+ useEffect(() => {
+ return () => {
+ if (viewRef.current) {
+ viewRef.current.destroy();
+ }
+ };
+ }, []);
+
+ if (!activeTab) {
+ return null;
+ }
+
+ return ;
+});
diff --git a/src/components/EditorTabs.tsx b/src/components/EditorTabs.tsx
new file mode 100644
index 0000000..de7ac0a
--- /dev/null
+++ b/src/components/EditorTabs.tsx
@@ -0,0 +1,141 @@
+import { useState, useCallback, useRef } from "react";
+import { X, SplitSquareHorizontal } from "lucide-react";
+import { ask } from "@tauri-apps/plugin-dialog";
+import { useStore, actions } from "@/lib/store";
+import { cn } from "@/lib/utils";
+import {
+ ContextMenu,
+ ContextMenuTrigger,
+ ContextMenuContent,
+ ContextMenuItem,
+ ContextMenuSeparator,
+} from "@/components/ui/context-menu";
+
+export async function confirmCloseTab(path: string): Promise {
+ const state = actions.getState();
+ const tab = state.tabs.find((t) => t.path === path);
+ if (!tab) return true;
+ if (tab.content === tab.savedContent) {
+ actions.closeTab(path);
+ return true;
+ }
+ const save = await ask(`"${tab.name}" has unsaved changes. Save before closing?`, {
+ title: "Unsaved Changes",
+ kind: "warning",
+ okLabel: "Save",
+ cancelLabel: "Don't Save",
+ });
+ if (save) {
+ const { invoke } = await import("@tauri-apps/api/core");
+ await invoke("write_file", { path: tab.path, contents: tab.content });
+ actions.markSaved(path);
+ }
+ actions.closeTab(path);
+ return true;
+}
+
+export function EditorTabs() {
+ const { tabs, activeTabPath } = useStore();
+ const [dragOverIndex, setDragOverIndex] = useState(null);
+ const dragIndexRef = useRef(null);
+
+ const handleDragStart = useCallback((e: React.DragEvent, index: number) => {
+ dragIndexRef.current = index;
+ e.dataTransfer.effectAllowed = "move";
+ e.dataTransfer.setData("text/plain", String(index));
+ }, []);
+
+ const handleDragOver = useCallback((e: React.DragEvent, index: number) => {
+ e.preventDefault();
+ e.dataTransfer.dropEffect = "move";
+ setDragOverIndex(index);
+ }, []);
+
+ const handleDrop = useCallback((e: React.DragEvent, toIndex: number) => {
+ e.preventDefault();
+ const fromIndex = dragIndexRef.current;
+ if (fromIndex !== null && fromIndex !== toIndex) {
+ actions.reorderTabs(fromIndex, toIndex);
+ }
+ dragIndexRef.current = null;
+ setDragOverIndex(null);
+ }, []);
+
+ const handleDragEnd = useCallback(() => {
+ dragIndexRef.current = null;
+ setDragOverIndex(null);
+ }, []);
+
+ if (tabs.length === 0) return null;
+
+ return (
+
+ {tabs.map((tab, index) => {
+ const isDirty = tab.content !== tab.savedContent;
+ const isActive = tab.path === activeTabPath;
+
+ return (
+
+
+ handleDragStart(e, index)}
+ onDragOver={(e) => handleDragOver(e, index)}
+ onDrop={(e) => handleDrop(e, index)}
+ onDragEnd={handleDragEnd}
+ onDragLeave={() => setDragOverIndex(null)}
+ onClick={() => actions.setActiveTab(tab.path)}
+ onMouseDown={(e) => {
+ if (e.button === 1) {
+ e.preventDefault();
+ confirmCloseTab(tab.path);
+ }
+ }}
+ >
+
+ {isDirty && ·}
+ {tab.name}
+
+
+
+
+
+ confirmCloseTab(tab.path)}>
+ Close
+
+ {
+ const others = tabs.filter((t) => t.path !== tab.path);
+ others.forEach((t) => confirmCloseTab(t.path));
+ }}>
+ Close Others
+
+
+ actions.setSplitEditor(tab.path)}>
+
+ Open to the Side
+
+
+
+ );
+ })}
+
+ );
+}
diff --git a/src/components/FileTree.tsx b/src/components/FileTree.tsx
new file mode 100644
index 0000000..9c3de63
--- /dev/null
+++ b/src/components/FileTree.tsx
@@ -0,0 +1,138 @@
+import { useState, useEffect, useCallback } from "react";
+import { FolderOpen, FilePlus, FolderPlus, RefreshCw, Search } from "lucide-react";
+import { invoke } from "@tauri-apps/api/core";
+import { open } from "@tauri-apps/plugin-dialog";
+import { ScrollArea } from "@/components/ui/scroll-area";
+import { Button } from "@/components/ui/button";
+import { Input } from "@/components/ui/input";
+import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
+import { FileTreeNode } from "@/components/FileTreeNode";
+import { useStore, actions } from "@/lib/store";
+
+interface DirEntry {
+ name: string;
+ path: string;
+ is_dir: boolean;
+}
+
+export function FileTree() {
+ const { workspacePath, fileTreeFilter } = useStore();
+ const [entries, setEntries] = useState([]);
+
+ const loadEntries = useCallback(async () => {
+ if (!workspacePath) return;
+ try {
+ const result = await invoke("read_directory", { path: workspacePath });
+ setEntries(result);
+ } catch (err) {
+ console.error("Failed to read workspace:", err);
+ }
+ }, [workspacePath]);
+
+ useEffect(() => {
+ loadEntries();
+ }, [loadEntries]);
+
+ const handleOpenFolder = useCallback(async () => {
+ const selected = await open({ directory: true, multiple: false });
+ if (selected) {
+ actions.setWorkspace(selected as string);
+ }
+ }, []);
+
+ const handleNewFile = useCallback(async () => {
+ if (!workspacePath) return;
+ const name = prompt("File name:");
+ if (!name) return;
+ try {
+ await invoke("create_file", { path: workspacePath + "/" + name });
+ loadEntries();
+ } catch (err) {
+ console.error("Failed to create file:", err);
+ }
+ }, [workspacePath, loadEntries]);
+
+ const handleNewFolder = useCallback(async () => {
+ if (!workspacePath) return;
+ const name = prompt("Folder name:");
+ if (!name) return;
+ try {
+ await invoke("create_directory", { path: workspacePath + "/" + name });
+ loadEntries();
+ } catch (err) {
+ console.error("Failed to create folder:", err);
+ }
+ }, [workspacePath, loadEntries]);
+
+ const folderName = workspacePath?.split("/").pop() ?? workspacePath?.split("\\").pop();
+
+ if (!workspacePath) {
+ return (
+
+
No folder open
+
+
+ );
+ }
+
+ return (
+
+
+
{folderName}
+
+
+
+
+
+ New File
+
+
+
+
+
+ New Folder
+
+
+
+
+
+ Refresh
+
+
+
+
+
+
+ actions.setFileTreeFilter(e.target.value)}
+ className="h-6 pl-6 text-xs"
+ />
+
+
+
+
+ {entries.map((entry) => (
+
+ ))}
+
+
+
+ );
+}
diff --git a/src/components/FileTreeNode.tsx b/src/components/FileTreeNode.tsx
new file mode 100644
index 0000000..dc3256d
--- /dev/null
+++ b/src/components/FileTreeNode.tsx
@@ -0,0 +1,259 @@
+import { useState, useCallback } from "react";
+import { ChevronRight, ChevronDown, FileCode, FileJson, FileText, File, Folder, FolderOpen, FileType } from "lucide-react";
+import { invoke } from "@tauri-apps/api/core";
+import { cn } from "@/lib/utils";
+import { actions } from "@/lib/store";
+import { detectLanguage } from "@/lib/languageDetect";
+import {
+ ContextMenu,
+ ContextMenuTrigger,
+ ContextMenuContent,
+ ContextMenuItem,
+ ContextMenuSeparator,
+} from "@/components/ui/context-menu";
+
+interface DirEntry {
+ name: string;
+ path: string;
+ is_dir: boolean;
+}
+
+interface FileTreeNodeProps {
+ entry: DirEntry;
+ depth: number;
+ filter?: string;
+ onRefresh: () => void;
+}
+
+function getFileIcon(name: string) {
+ const ext = name.split(".").pop()?.toLowerCase();
+ switch (ext) {
+ case "js":
+ case "jsx":
+ case "ts":
+ case "tsx":
+ case "py":
+ case "rs":
+ case "go":
+ case "java":
+ case "cpp":
+ case "c":
+ case "h":
+ case "php":
+ return ;
+ case "json":
+ case "jsonc":
+ return ;
+ case "md":
+ case "txt":
+ case "markdown":
+ return ;
+ case "html":
+ case "htm":
+ case "css":
+ case "scss":
+ return ;
+ default:
+ return ;
+ }
+}
+
+export function FileTreeNode({ entry, depth, filter, onRefresh }: FileTreeNodeProps) {
+ // If filter is active and this is a file that doesn't match, hide it
+ const filterLower = filter?.toLowerCase() ?? "";
+ const matchesFilter = !filterLower || entry.name.toLowerCase().includes(filterLower);
+
+ // Directories are always shown when filter is active (children might match)
+ // Files are hidden if they don't match
+ if (filterLower && !entry.is_dir && !matchesFilter) {
+ return null;
+ }
+
+ const [expanded, setExpanded] = useState(false);
+ const [children, setChildren] = useState([]);
+ const [loading, setLoading] = useState(false);
+ const [renaming, setRenaming] = useState(false);
+ const [renameValue, setRenameValue] = useState(entry.name);
+
+ const toggle = useCallback(async () => {
+ if (!entry.is_dir) return;
+ if (!expanded) {
+ setLoading(true);
+ try {
+ const entries = await invoke("read_directory", { path: entry.path });
+ setChildren(entries);
+ } catch (err) {
+ console.error("Failed to read directory:", err);
+ }
+ setLoading(false);
+ }
+ setExpanded(!expanded);
+ }, [expanded, entry.is_dir, entry.path]);
+
+ const refreshChildren = useCallback(async () => {
+ if (entry.is_dir && expanded) {
+ try {
+ const entries = await invoke("read_directory", { path: entry.path });
+ setChildren(entries);
+ } catch (err) {
+ console.error("Failed to refresh:", err);
+ }
+ }
+ }, [entry.is_dir, entry.path, expanded]);
+
+ const handleClick = useCallback(async () => {
+ if (entry.is_dir) {
+ toggle();
+ return;
+ }
+ try {
+ const content = await invoke("read_file", { path: entry.path });
+ const language = detectLanguage(entry.name);
+ actions.openFile(entry.path, entry.name, content, language);
+ } catch (err) {
+ console.error("Failed to open file:", err);
+ }
+ }, [entry, toggle]);
+
+ const handleNewFile = useCallback(async () => {
+ const name = prompt("File name:");
+ if (!name) return;
+ try {
+ await invoke("create_file", { path: entry.path + "/" + name });
+ await refreshChildren();
+ if (!expanded) setExpanded(true);
+ onRefresh();
+ } catch (err) {
+ console.error("Failed to create file:", err);
+ }
+ }, [entry.path, expanded, refreshChildren, onRefresh]);
+
+ const handleNewFolder = useCallback(async () => {
+ const name = prompt("Folder name:");
+ if (!name) return;
+ try {
+ await invoke("create_directory", { path: entry.path + "/" + name });
+ await refreshChildren();
+ if (!expanded) setExpanded(true);
+ onRefresh();
+ } catch (err) {
+ console.error("Failed to create folder:", err);
+ }
+ }, [entry.path, expanded, refreshChildren, onRefresh]);
+
+ const handleRename = useCallback(async () => {
+ if (renameValue === entry.name || !renameValue.trim()) {
+ setRenaming(false);
+ return;
+ }
+ const parentPath = entry.path.substring(0, entry.path.lastIndexOf("/"));
+ try {
+ await invoke("rename_path", {
+ oldPath: entry.path,
+ newPath: parentPath + "/" + renameValue,
+ });
+ onRefresh();
+ } catch (err) {
+ console.error("Failed to rename:", err);
+ }
+ setRenaming(false);
+ }, [renameValue, entry, onRefresh]);
+
+ const handleDelete = useCallback(async () => {
+ if (!confirm(`Delete "${entry.name}"?`)) return;
+ try {
+ await invoke("delete_path", { path: entry.path });
+ onRefresh();
+ } catch (err) {
+ console.error("Failed to delete:", err);
+ }
+ }, [entry, onRefresh]);
+
+ return (
+
+
+
+
+ {entry.is_dir ? (
+ <>
+ {expanded ? (
+
+ ) : (
+
+ )}
+ {expanded ? (
+
+ ) : (
+
+ )}
+ >
+ ) : (
+ <>
+
+ {getFileIcon(entry.name)}
+ >
+ )}
+ {renaming ? (
+ setRenameValue(e.target.value)}
+ onBlur={handleRename}
+ onKeyDown={(e) => {
+ if (e.key === "Enter") handleRename();
+ if (e.key === "Escape") setRenaming(false);
+ }}
+ autoFocus
+ onClick={(e) => e.stopPropagation()}
+ />
+ ) : (
+ {entry.name}
+ )}
+ {loading && ...}
+
+
+
+ {entry.is_dir && (
+ <>
+ New File
+ New Folder
+
+ >
+ )}
+ {
+ setRenameValue(entry.name);
+ setRenaming(true);
+ }}
+ >
+ Rename
+
+
+ Delete
+
+
+
+
+ {entry.is_dir && (expanded || !!filterLower) && (
+
+ {children.map((child) => (
+
+ ))}
+
+ )}
+
+ );
+}
diff --git a/src/components/GoToLineDialog.tsx b/src/components/GoToLineDialog.tsx
new file mode 100644
index 0000000..c19ae58
--- /dev/null
+++ b/src/components/GoToLineDialog.tsx
@@ -0,0 +1,51 @@
+import { useState, useCallback } from "react";
+import { Dialog, DialogContent, DialogTitle, DialogHeader } from "@/components/ui/dialog";
+import { Input } from "@/components/ui/input";
+import { Button } from "@/components/ui/button";
+
+interface GoToLineDialogProps {
+ open: boolean;
+ onOpenChange: (open: boolean) => void;
+ onGoToLine: (line: number) => void;
+ maxLine?: number;
+}
+
+export function GoToLineDialog({ open, onOpenChange, onGoToLine, maxLine }: GoToLineDialogProps) {
+ const [value, setValue] = useState("");
+
+ const handleGo = useCallback(() => {
+ const line = parseInt(value, 10);
+ if (!isNaN(line) && line > 0) {
+ onGoToLine(line);
+ onOpenChange(false);
+ setValue("");
+ }
+ }, [value, onGoToLine, onOpenChange]);
+
+ return (
+
+ );
+}
diff --git a/src/components/Menubar.tsx b/src/components/Menubar.tsx
new file mode 100644
index 0000000..ca2e7f9
--- /dev/null
+++ b/src/components/Menubar.tsx
@@ -0,0 +1,186 @@
+import { open } from "@tauri-apps/plugin-dialog";
+import { invoke } from "@tauri-apps/api/core";
+import {
+ Menubar as MenubarRoot,
+ MenubarMenu,
+ MenubarTrigger,
+ MenubarContent,
+ MenubarItem,
+ MenubarSeparator,
+ MenubarShortcut,
+ MenubarSub,
+ MenubarSubTrigger,
+ MenubarSubContent,
+} from "@/components/ui/menubar";
+import { actions, useStore } from "@/lib/store";
+import { toast } from "sonner";
+
+interface MenubarProps {
+ onOpenCommandPalette: () => void;
+ onOpenQuickOpen: () => void;
+ onOpenSettings: () => void;
+ onToggleTerminal: () => void;
+ onSearchInFiles: () => void;
+ onGoToLine: () => void;
+ onSplitEditor: () => void;
+}
+
+export function AppMenubar({
+ onOpenCommandPalette,
+ onOpenQuickOpen,
+ onOpenSettings,
+ onToggleTerminal,
+ onSearchInFiles,
+ onGoToLine,
+ onSplitEditor,
+}: MenubarProps) {
+ const store = useStore();
+ const activeTab = store.tabs.find((t) => t.path === store.activeTabPath);
+
+ const handleSave = async () => {
+ if (!activeTab) return;
+ try {
+ await invoke("write_file", { path: activeTab.path, contents: activeTab.content });
+ actions.markSaved(activeTab.path);
+ toast.success("File saved");
+ } catch (err) {
+ toast.error("Failed to save: " + String(err));
+ }
+ };
+
+ const handleSaveAll = async () => {
+ for (const tab of store.tabs) {
+ if (tab.content !== tab.savedContent) {
+ try {
+ await invoke("write_file", { path: tab.path, contents: tab.content });
+ actions.markSaved(tab.path);
+ } catch (err) {
+ toast.error(`Failed to save ${tab.name}: ${String(err)}`);
+ }
+ }
+ }
+ toast.success("All files saved");
+ };
+
+ const handleOpenFolder = async () => {
+ const selected = await open({ directory: true, multiple: false });
+ if (selected) {
+ actions.setWorkspace(selected as string);
+ }
+ };
+
+ return (
+
+
+ File
+
+
+ Open Folder
+
+ {store.recentWorkspaces.length > 0 && (
+
+ Open Recent
+
+ {store.recentWorkspaces.slice(0, 5).map((path) => {
+ const name = path.split("/").pop() ?? path.split("\\").pop() ?? path;
+ return (
+ actions.setWorkspace(path)}>
+ {name}
+
+ );
+ })}
+
+
+ )}
+
+
+ Save Ctrl+S
+
+
+ Save All Ctrl+Shift+S
+
+
+ activeTab && actions.closeTab(activeTab.path)} disabled={!activeTab}>
+ Close Tab Ctrl+W
+
+
+
+
+
+ Edit
+
+ document.execCommand("undo")}>
+ Undo Ctrl+Z
+
+ document.execCommand("redo")}>
+ Redo Ctrl+Shift+Z
+
+
+ document.execCommand("cut")}>
+ Cut Ctrl+X
+
+ document.execCommand("copy")}>
+ Copy Ctrl+C
+
+ document.execCommand("paste")}>
+ Paste Ctrl+V
+
+
+
+ Find File Ctrl+P
+
+
+ Search in Files Ctrl+Shift+F
+
+
+ Go to Line Ctrl+G
+
+
+
+
+
+ View
+
+ actions.toggleSidebar()}>
+ Toggle Sidebar Ctrl+B
+
+
+ Toggle Terminal Ctrl+`
+
+
+ Split Editor Ctrl+\
+
+
+
+ Command Palette Ctrl+Shift+P
+
+
+
+ Theme
+
+ actions.updateSettings({ theme: "dark" })}>
+ Dark
+
+ actions.updateSettings({ theme: "light" })}>
+ Light
+
+
+
+
+
+
+
+ Help
+
+
+ Settings
+
+
+
+ About Lunar Code
+
+
+
+
+ );
+}
diff --git a/src/components/QuickOpen.tsx b/src/components/QuickOpen.tsx
new file mode 100644
index 0000000..7736387
--- /dev/null
+++ b/src/components/QuickOpen.tsx
@@ -0,0 +1,109 @@
+import { useState, useEffect, useCallback } from "react";
+import { Command } from "cmdk";
+import { Dialog, DialogContent, DialogTitle } from "@/components/ui/dialog";
+import { VisuallyHidden } from "@radix-ui/react-visually-hidden";
+import { invoke } from "@tauri-apps/api/core";
+import { actions, useStore } from "@/lib/store";
+import { detectLanguage } from "@/lib/languageDetect";
+import { FileCode } from "lucide-react";
+
+interface QuickOpenProps {
+ open: boolean;
+ onOpenChange: (open: boolean) => void;
+}
+
+interface FileEntry {
+ name: string;
+ path: string;
+ relative: string;
+}
+
+async function collectFiles(dir: string, base: string, result: FileEntry[], depth: number) {
+ if (depth > 5) return;
+ try {
+ const entries = await invoke<{ name: string; path: string; is_dir: boolean }[]>("read_directory", { path: dir });
+ for (const entry of entries) {
+ const relative = base ? base + "/" + entry.name : entry.name;
+ if (entry.is_dir) {
+ if (entry.name === "node_modules" || entry.name === "target" || entry.name === ".git" || entry.name === "dist") continue;
+ await collectFiles(entry.path, relative, result, depth + 1);
+ } else {
+ result.push({ name: entry.name, path: entry.path, relative });
+ }
+ }
+ } catch {
+ // skip inaccessible dirs
+ }
+}
+
+export function QuickOpen({ open: isOpen, onOpenChange }: QuickOpenProps) {
+ const { workspacePath } = useStore();
+ const [files, setFiles] = useState([]);
+ const [loading, setLoading] = useState(false);
+
+ useEffect(() => {
+ if (isOpen && workspacePath) {
+ setLoading(true);
+ const result: FileEntry[] = [];
+ collectFiles(workspacePath, "", result, 0).then(() => {
+ setFiles(result);
+ setLoading(false);
+ });
+ }
+ }, [isOpen, workspacePath]);
+
+ const handleSelect = useCallback(
+ async (filePath: string, fileName: string) => {
+ try {
+ const content = await invoke("read_file", { path: filePath });
+ const language = detectLanguage(fileName);
+ actions.openFile(filePath, fileName, content, language);
+ } catch (err) {
+ console.error("Failed to open file:", err);
+ }
+ onOpenChange(false);
+ },
+ [onOpenChange]
+ );
+
+ return (
+
+ );
+}
diff --git a/src/components/SearchPanel.tsx b/src/components/SearchPanel.tsx
new file mode 100644
index 0000000..124566a
--- /dev/null
+++ b/src/components/SearchPanel.tsx
@@ -0,0 +1,166 @@
+import { useState, useCallback } from "react";
+import { Search, CaseSensitive, Regex, FileCode, X } from "lucide-react";
+import { invoke } from "@tauri-apps/api/core";
+import { Input } from "@/components/ui/input";
+import { Button } from "@/components/ui/button";
+import { ScrollArea } from "@/components/ui/scroll-area";
+import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
+import { useStore, actions, type SearchResult } from "@/lib/store";
+import { detectLanguage } from "@/lib/languageDetect";
+import { cn } from "@/lib/utils";
+
+export function SearchPanel() {
+ const { workspacePath, searchQuery, searchResults, searchCaseSensitive, searchRegex } = useStore();
+ const [loading, setLoading] = useState(false);
+ const [localQuery, setLocalQuery] = useState(searchQuery);
+
+ const handleSearch = useCallback(async () => {
+ if (!workspacePath || !localQuery.trim()) {
+ actions.setSearchResults([]);
+ return;
+ }
+
+ setLoading(true);
+ actions.setSearchQuery(localQuery);
+
+ try {
+ const results = await invoke("search_in_files", {
+ dir: workspacePath,
+ query: localQuery,
+ caseSensitive: searchCaseSensitive,
+ });
+ actions.setSearchResults(results);
+ } catch (err) {
+ console.error("Search failed:", err);
+ actions.setSearchResults([]);
+ }
+ setLoading(false);
+ }, [workspacePath, localQuery, searchCaseSensitive]);
+
+ const handleKeyDown = useCallback((e: React.KeyboardEvent) => {
+ if (e.key === "Enter") {
+ handleSearch();
+ }
+ }, [handleSearch]);
+
+ const handleResultClick = useCallback(async (result: SearchResult) => {
+ try {
+ const content = await invoke("read_file", { path: result.filePath });
+ const language = detectLanguage(result.fileName);
+ actions.openFile(result.filePath, result.fileName, content, language);
+ } catch (err) {
+ console.error("Failed to open file:", err);
+ }
+ }, []);
+
+ // Group results by file
+ const grouped = searchResults.reduce>((acc, r) => {
+ if (!acc[r.filePath]) acc[r.filePath] = [];
+ acc[r.filePath].push(r);
+ return acc;
+ }, {});
+
+ return (
+
+
+ Search
+
+
+
+
+
+
+
setLocalQuery(e.target.value)}
+ onKeyDown={handleKeyDown}
+ className="h-7 pl-6 pr-16 text-xs"
+ autoFocus
+ />
+
+
+
+
+
+ Match Case
+
+
+
+
+
+ Use Regex
+
+
+
+
+
+
+
+ {loading && (
+
Searching...
+ )}
+
+ {!loading && searchQuery && searchResults.length === 0 && (
+
No results found
+ )}
+
+ {!loading && Object.entries(grouped).map(([filePath, results]) => {
+ const relPath = workspacePath
+ ? filePath.replace(workspacePath + "/", "")
+ : filePath;
+
+ return (
+
+
+
+ {relPath}
+ {results.length}
+
+ {results.map((result, i) => (
+
handleResultClick(result)}
+ >
+
+ {result.lineNumber}
+
+
+ {result.lineContent.substring(0, result.matchStart)}
+
+ {result.lineContent.substring(result.matchStart, result.matchEnd)}
+
+ {result.lineContent.substring(result.matchEnd)}
+
+
+ ))}
+
+ );
+ })}
+
+
+
+ );
+}
diff --git a/src/components/SettingsDialog.tsx b/src/components/SettingsDialog.tsx
new file mode 100644
index 0000000..8bf0a8f
--- /dev/null
+++ b/src/components/SettingsDialog.tsx
@@ -0,0 +1,172 @@
+import { open as openDialog } from "@tauri-apps/plugin-dialog";
+import {
+ Dialog,
+ DialogContent,
+ DialogHeader,
+ DialogTitle,
+ DialogDescription,
+} from "@/components/ui/dialog";
+import { useStore, actions } from "@/lib/store";
+import { Button } from "@/components/ui/button";
+import { Separator } from "@/components/ui/separator";
+
+interface SettingsDialogProps {
+ open: boolean;
+ onOpenChange: (open: boolean) => void;
+}
+
+export function SettingsDialog({ open, onOpenChange }: SettingsDialogProps) {
+ const { settings } = useStore();
+
+ const handlePickCustomCSS = async () => {
+ const selected = await openDialog({
+ multiple: false,
+ filters: [{ name: "CSS Files", extensions: ["css"] }],
+ });
+ if (selected) {
+ actions.updateSettings({ customCssPath: selected as string });
+ }
+ };
+
+ const handleClearCustomCSS = () => {
+ actions.updateSettings({ customCssPath: null });
+ };
+
+ return (
+
+ );
+}
diff --git a/src/components/StatusBar.tsx b/src/components/StatusBar.tsx
new file mode 100644
index 0000000..ce77a04
--- /dev/null
+++ b/src/components/StatusBar.tsx
@@ -0,0 +1,50 @@
+import { useStore, actions } from "@/lib/store";
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from "@/components/ui/select";
+import { getLanguageDisplayName, supportedLanguages } from "@/lib/languageDetect";
+
+export function StatusBar() {
+ const store = useStore();
+ const activeTab = store.tabs.find((t) => t.path === store.activeTabPath);
+ const folderName = store.workspacePath?.split("/").pop() ?? store.workspacePath?.split("\\").pop() ?? "No folder";
+
+ return (
+
+
+ {folderName}
+
+
+
+ {activeTab && (
+ <>
+
+
+ Ln {store.cursorLine}, Col {store.cursorCol}
+
+ Spaces: {store.settings.tabSize}
+ UTF-8
+ >
+ )}
+
+
+ );
+}
diff --git a/src/components/Terminal.tsx b/src/components/Terminal.tsx
new file mode 100644
index 0000000..d144290
--- /dev/null
+++ b/src/components/Terminal.tsx
@@ -0,0 +1,160 @@
+import { useEffect, useRef, useCallback } from "react";
+import { Terminal as XTerminal } from "@xterm/xterm";
+import { FitAddon } from "@xterm/addon-fit";
+import { WebLinksAddon } from "@xterm/addon-web-links";
+import "@xterm/xterm/css/xterm.css";
+import { Command } from "@tauri-apps/plugin-shell";
+import { useStore } from "@/lib/store";
+
+export function Terminal() {
+ const termRef = useRef(null);
+ const xtermRef = useRef(null);
+ const fitAddonRef = useRef(null);
+ const { workspacePath, settings } = useStore();
+ const childRef = useRef(null);
+ const inputBufferRef = useRef("");
+
+ const initTerminal = useCallback(async () => {
+ if (!termRef.current || xtermRef.current) return;
+
+ const xterm = new XTerminal({
+ cursorBlink: true,
+ fontSize: settings.fontSize - 1,
+ fontFamily: settings.fontFamily,
+ theme: {
+ background: "#1e1e1e",
+ foreground: "#cccccc",
+ cursor: "#ffffff",
+ selectionBackground: "#264f78",
+ black: "#000000",
+ red: "#cd3131",
+ green: "#0dbc79",
+ yellow: "#e5e510",
+ blue: "#2472c8",
+ magenta: "#bc3fbc",
+ cyan: "#11a8cd",
+ white: "#e5e5e5",
+ },
+ allowProposedApi: true,
+ });
+
+ const fitAddon = new FitAddon();
+ xterm.loadAddon(fitAddon);
+ xterm.loadAddon(new WebLinksAddon());
+
+ xterm.open(termRef.current);
+ fitAddon.fit();
+
+ xtermRef.current = xterm;
+ fitAddonRef.current = fitAddon;
+
+ // Try to spawn a shell using Tauri shell plugin
+ try {
+ const shell = detectShell();
+ const cmd = Command.create("exec-sh", ["-c", shell], {
+ cwd: workspacePath ?? undefined,
+ });
+
+ cmd.on("close", () => {
+ xterm.writeln("\r\n[Process exited]");
+ });
+
+ cmd.stdout.on("data", (data: string) => {
+ xterm.write(data);
+ });
+
+ cmd.stderr.on("data", (data: string) => {
+ xterm.write(data);
+ });
+
+ const child = await cmd.spawn();
+ childRef.current = child;
+
+ xterm.onData((data: string) => {
+ child.write(data);
+ });
+ } catch (err) {
+ xterm.writeln(`Terminal: Could not spawn shell. Error: ${err}`);
+ xterm.writeln("Make sure shell permissions are configured in Tauri.");
+ xterm.writeln("");
+
+ // Fallback: simple command executor
+ xterm.write("$ ");
+ xterm.onData((data: string) => {
+ if (data === "\r") {
+ const cmd = inputBufferRef.current.trim();
+ inputBufferRef.current = "";
+ xterm.writeln("");
+ if (cmd) {
+ executeCommand(xterm, cmd);
+ } else {
+ xterm.write("$ ");
+ }
+ } else if (data === "\x7f") {
+ // Backspace
+ if (inputBufferRef.current.length > 0) {
+ inputBufferRef.current = inputBufferRef.current.slice(0, -1);
+ xterm.write("\b \b");
+ }
+ } else if (data >= " ") {
+ inputBufferRef.current += data;
+ xterm.write(data);
+ }
+ });
+ }
+
+ // Handle resize
+ const resizeObserver = new ResizeObserver(() => {
+ fitAddon.fit();
+ });
+ resizeObserver.observe(termRef.current);
+
+ return () => {
+ resizeObserver.disconnect();
+ };
+ }, [workspacePath, settings.fontSize, settings.fontFamily]);
+
+ useEffect(() => {
+ initTerminal();
+ return () => {
+ if (childRef.current) {
+ childRef.current.kill().catch(() => {});
+ }
+ if (xtermRef.current) {
+ xtermRef.current.dispose();
+ xtermRef.current = null;
+ }
+ };
+ }, [initTerminal]);
+
+ // Refit on visibility change
+ useEffect(() => {
+ if (fitAddonRef.current) {
+ setTimeout(() => fitAddonRef.current?.fit(), 50);
+ }
+ });
+
+ return (
+
+ );
+}
+
+function detectShell(): string {
+ // Check common shells
+ const shell = typeof navigator !== "undefined" ? "bash" : "bash";
+ return shell;
+}
+
+async function executeCommand(xterm: XTerminal, cmd: string) {
+ try {
+ const command = Command.create("exec-sh", ["-c", cmd]);
+ const output = await command.execute();
+ if (output.stdout) xterm.write(output.stdout.replace(/\n/g, "\r\n"));
+ if (output.stderr) xterm.write(output.stderr.replace(/\n/g, "\r\n"));
+ } catch (err) {
+ xterm.writeln(`Error: ${err}`);
+ }
+ xterm.write("$ ");
+}
diff --git a/src/components/WelcomeTab.tsx b/src/components/WelcomeTab.tsx
new file mode 100644
index 0000000..101517b
--- /dev/null
+++ b/src/components/WelcomeTab.tsx
@@ -0,0 +1,91 @@
+import { FolderOpen, Keyboard } from "lucide-react";
+import { open } from "@tauri-apps/plugin-dialog";
+import { Button } from "@/components/ui/button";
+import { useStore, actions } from "@/lib/store";
+
+const shortcuts = [
+ { keys: "Ctrl+P", action: "Quick Open File" },
+ { keys: "Ctrl+Shift+P", action: "Command Palette" },
+ { keys: "Ctrl+S", action: "Save File" },
+ { keys: "Ctrl+Shift+S", action: "Save All" },
+ { keys: "Ctrl+W", action: "Close Tab" },
+ { keys: "Ctrl+B", action: "Toggle Sidebar" },
+ { keys: "Ctrl+Shift+F", action: "Search in Files" },
+ { keys: "Ctrl+G", action: "Go to Line" },
+ { keys: "Ctrl+`", action: "Toggle Terminal" },
+ { keys: "Ctrl+\\", action: "Split Editor" },
+ { keys: "Ctrl+F", action: "Find in File" },
+];
+
+export function WelcomeTab() {
+ const { recentWorkspaces } = useStore();
+
+ const handleOpenFolder = async () => {
+ const selected = await open({ directory: true, multiple: false });
+ if (selected) {
+ actions.setWorkspace(selected as string);
+ }
+ };
+
+ const handleOpenRecent = (path: string) => {
+ actions.setWorkspace(path);
+ };
+
+ return (
+
+
+
+
Lunar Code
+
Lightweight. Fast. Focused.
+
+
+
+
+
+
+ {recentWorkspaces.length > 0 && (
+
+
+ Recent
+
+
+ {recentWorkspaces.slice(0, 5).map((path) => {
+ const name = path.split("/").pop() ?? path.split("\\").pop() ?? path;
+ return (
+
+ );
+ })}
+
+
+ )}
+
+
+
+
+ Keyboard Shortcuts
+
+
+ {shortcuts.map((s) => (
+
+ {s.action}
+
+ {s.keys}
+
+
+ ))}
+
+
+
+
+ );
+}
diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx
new file mode 100644
index 0000000..4fe0010
--- /dev/null
+++ b/src/components/ui/badge.tsx
@@ -0,0 +1,30 @@
+import * as React from "react";
+import { cva, type VariantProps } from "class-variance-authority";
+import { cn } from "@/lib/utils";
+
+const badgeVariants = cva(
+ "inline-flex items-center rounded-sm px-2 py-0.5 text-xs font-medium transition-colors focus:outline-none",
+ {
+ variants: {
+ variant: {
+ default: "bg-primary/20 text-primary-foreground",
+ secondary: "bg-secondary text-secondary-foreground",
+ destructive: "bg-destructive/20 text-destructive-foreground",
+ outline: "border border-border text-foreground",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ },
+ }
+);
+
+export interface BadgeProps
+ extends React.HTMLAttributes,
+ VariantProps {}
+
+function Badge({ className, variant, ...props }: BadgeProps) {
+ return ;
+}
+
+export { Badge, badgeVariants };
diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx
new file mode 100644
index 0000000..a4911b4
--- /dev/null
+++ b/src/components/ui/button.tsx
@@ -0,0 +1,48 @@
+import * as React from "react";
+import { Slot } from "@radix-ui/react-slot";
+import { cva, type VariantProps } from "class-variance-authority";
+import { cn } from "@/lib/utils";
+
+const buttonVariants = cva(
+ "inline-flex items-center justify-center whitespace-nowrap rounded-sm text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
+ {
+ variants: {
+ variant: {
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
+ destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
+ outline: "border border-border bg-transparent hover:bg-accent hover:text-accent-foreground",
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
+ ghost: "hover:bg-accent hover:text-accent-foreground",
+ link: "text-primary underline-offset-4 hover:underline",
+ },
+ size: {
+ default: "h-8 px-3 py-1",
+ sm: "h-7 px-2 text-xs",
+ lg: "h-9 px-4",
+ icon: "h-7 w-7",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ size: "default",
+ },
+ }
+);
+
+export interface ButtonProps
+ extends React.ButtonHTMLAttributes,
+ VariantProps {
+ asChild?: boolean;
+}
+
+const Button = React.forwardRef(
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
+ const Comp = asChild ? Slot : "button";
+ return (
+
+ );
+ }
+);
+Button.displayName = "Button";
+
+export { Button, buttonVariants };
diff --git a/src/components/ui/context-menu.tsx b/src/components/ui/context-menu.tsx
new file mode 100644
index 0000000..dc1b16e
--- /dev/null
+++ b/src/components/ui/context-menu.tsx
@@ -0,0 +1,59 @@
+import * as React from "react";
+import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
+import { cn } from "@/lib/utils";
+
+const ContextMenu = ContextMenuPrimitive.Root;
+const ContextMenuTrigger = ContextMenuPrimitive.Trigger;
+
+const ContextMenuContent = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+
+
+));
+ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;
+
+const ContextMenuItem = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef & { inset?: boolean }
+>(({ className, inset, ...props }, ref) => (
+
+));
+ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;
+
+const ContextMenuSeparator = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName;
+
+export {
+ ContextMenu,
+ ContextMenuTrigger,
+ ContextMenuContent,
+ ContextMenuItem,
+ ContextMenuSeparator,
+};
diff --git a/src/components/ui/dialog.tsx b/src/components/ui/dialog.tsx
new file mode 100644
index 0000000..0a44370
--- /dev/null
+++ b/src/components/ui/dialog.tsx
@@ -0,0 +1,95 @@
+import * as React from "react";
+import * as DialogPrimitive from "@radix-ui/react-dialog";
+import { X } from "lucide-react";
+import { cn } from "@/lib/utils";
+
+const Dialog = DialogPrimitive.Root;
+const DialogTrigger = DialogPrimitive.Trigger;
+const DialogPortal = DialogPrimitive.Portal;
+const DialogClose = DialogPrimitive.Close;
+
+const DialogOverlay = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
+
+const DialogContent = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+
+
+ {children}
+
+
+ Close
+
+
+
+));
+DialogContent.displayName = DialogPrimitive.Content.displayName;
+
+const DialogHeader = ({ className, ...props }: React.HTMLAttributes) => (
+
+);
+DialogHeader.displayName = "DialogHeader";
+
+const DialogFooter = ({ className, ...props }: React.HTMLAttributes) => (
+
+);
+DialogFooter.displayName = "DialogFooter";
+
+const DialogTitle = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+DialogTitle.displayName = DialogPrimitive.Title.displayName;
+
+const DialogDescription = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+DialogDescription.displayName = DialogPrimitive.Description.displayName;
+
+export {
+ Dialog,
+ DialogPortal,
+ DialogOverlay,
+ DialogClose,
+ DialogTrigger,
+ DialogContent,
+ DialogHeader,
+ DialogFooter,
+ DialogTitle,
+ DialogDescription,
+};
diff --git a/src/components/ui/dropdown-menu.tsx b/src/components/ui/dropdown-menu.tsx
new file mode 100644
index 0000000..77d2af9
--- /dev/null
+++ b/src/components/ui/dropdown-menu.tsx
@@ -0,0 +1,101 @@
+import * as React from "react";
+import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
+import { cn } from "@/lib/utils";
+
+const DropdownMenu = DropdownMenuPrimitive.Root;
+const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
+const DropdownMenuGroup = DropdownMenuPrimitive.Group;
+const DropdownMenuSub = DropdownMenuPrimitive.Sub;
+
+const DropdownMenuContent = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, sideOffset = 4, ...props }, ref) => (
+
+
+
+));
+DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
+
+const DropdownMenuItem = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef & { inset?: boolean }
+>(({ className, inset, ...props }, ref) => (
+
+));
+DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
+
+const DropdownMenuSeparator = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
+
+const DropdownMenuSubTrigger = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef & { inset?: boolean }
+>(({ className, inset, children, ...props }, ref) => (
+
+ {children}
+
+));
+DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
+
+const DropdownMenuSubContent = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+
+
+));
+DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
+
+export {
+ DropdownMenu,
+ DropdownMenuTrigger,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuSeparator,
+ DropdownMenuGroup,
+ DropdownMenuSub,
+ DropdownMenuSubTrigger,
+ DropdownMenuSubContent,
+};
diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx
new file mode 100644
index 0000000..e291198
--- /dev/null
+++ b/src/components/ui/input.tsx
@@ -0,0 +1,21 @@
+import * as React from "react";
+import { cn } from "@/lib/utils";
+
+const Input = React.forwardRef>(
+ ({ className, type, ...props }, ref) => {
+ return (
+
+ );
+ }
+);
+Input.displayName = "Input";
+
+export { Input };
diff --git a/src/components/ui/menubar.tsx b/src/components/ui/menubar.tsx
new file mode 100644
index 0000000..3af5f3e
--- /dev/null
+++ b/src/components/ui/menubar.tsx
@@ -0,0 +1,142 @@
+import * as React from "react";
+import * as MenubarPrimitive from "@radix-ui/react-menubar";
+import { cn } from "@/lib/utils";
+
+const MenubarMenu = MenubarPrimitive.Menu;
+const MenubarGroup = MenubarPrimitive.Group;
+const MenubarSub = MenubarPrimitive.Sub;
+const MenubarRadioGroup = MenubarPrimitive.RadioGroup;
+
+const Menubar = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+Menubar.displayName = MenubarPrimitive.Root.displayName;
+
+const MenubarTrigger = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+MenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName;
+
+const MenubarContent = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, align = "start", alignOffset = -4, sideOffset = 8, ...props }, ref) => (
+
+
+
+));
+MenubarContent.displayName = MenubarPrimitive.Content.displayName;
+
+const MenubarItem = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef & { inset?: boolean }
+>(({ className, inset, ...props }, ref) => (
+
+));
+MenubarItem.displayName = MenubarPrimitive.Item.displayName;
+
+const MenubarSeparator = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+MenubarSeparator.displayName = MenubarPrimitive.Separator.displayName;
+
+const MenubarShortcut = ({ className, ...props }: React.HTMLAttributes) => (
+
+);
+MenubarShortcut.displayName = "MenubarShortcut";
+
+const MenubarSubTrigger = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef & { inset?: boolean }
+>(({ className, inset, children, ...props }, ref) => (
+
+ {children}
+ ›
+
+));
+MenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName;
+
+const MenubarSubContent = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+
+
+));
+MenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName;
+
+export {
+ Menubar,
+ MenubarMenu,
+ MenubarTrigger,
+ MenubarContent,
+ MenubarItem,
+ MenubarSeparator,
+ MenubarShortcut,
+ MenubarGroup,
+ MenubarSub,
+ MenubarSubTrigger,
+ MenubarSubContent,
+ MenubarRadioGroup,
+};
diff --git a/src/components/ui/scroll-area.tsx b/src/components/ui/scroll-area.tsx
new file mode 100644
index 0000000..1c49354
--- /dev/null
+++ b/src/components/ui/scroll-area.tsx
@@ -0,0 +1,43 @@
+import * as React from "react";
+import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
+import { cn } from "@/lib/utils";
+
+const ScrollArea = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+
+ {children}
+
+
+
+
+));
+ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
+
+const ScrollBar = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, orientation = "vertical", ...props }, ref) => (
+
+
+
+));
+ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
+
+export { ScrollArea, ScrollBar };
diff --git a/src/components/ui/select.tsx b/src/components/ui/select.tsx
new file mode 100644
index 0000000..7632393
--- /dev/null
+++ b/src/components/ui/select.tsx
@@ -0,0 +1,82 @@
+import * as React from "react";
+import * as SelectPrimitive from "@radix-ui/react-select";
+import { ChevronDown } from "lucide-react";
+import { cn } from "@/lib/utils";
+
+const Select = SelectPrimitive.Root;
+const SelectGroup = SelectPrimitive.Group;
+const SelectValue = SelectPrimitive.Value;
+
+const SelectTrigger = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+ span]:line-clamp-1",
+ className
+ )}
+ {...props}
+ >
+ {children}
+
+
+
+
+));
+SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
+
+const SelectContent = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, position = "popper", ...props }, ref) => (
+
+
+
+ {children}
+
+
+
+));
+SelectContent.displayName = SelectPrimitive.Content.displayName;
+
+const SelectItem = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+ {children}
+
+));
+SelectItem.displayName = SelectPrimitive.Item.displayName;
+
+export {
+ Select,
+ SelectGroup,
+ SelectValue,
+ SelectTrigger,
+ SelectContent,
+ SelectItem,
+};
diff --git a/src/components/ui/separator.tsx b/src/components/ui/separator.tsx
new file mode 100644
index 0000000..5f4c764
--- /dev/null
+++ b/src/components/ui/separator.tsx
@@ -0,0 +1,23 @@
+import * as React from "react";
+import * as SeparatorPrimitive from "@radix-ui/react-separator";
+import { cn } from "@/lib/utils";
+
+const Separator = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => (
+
+));
+Separator.displayName = SeparatorPrimitive.Root.displayName;
+
+export { Separator };
diff --git a/src/components/ui/tooltip.tsx b/src/components/ui/tooltip.tsx
new file mode 100644
index 0000000..0c3966e
--- /dev/null
+++ b/src/components/ui/tooltip.tsx
@@ -0,0 +1,27 @@
+import * as React from "react";
+import * as TooltipPrimitive from "@radix-ui/react-tooltip";
+import { cn } from "@/lib/utils";
+
+const TooltipProvider = TooltipPrimitive.Provider;
+const Tooltip = TooltipPrimitive.Root;
+const TooltipTrigger = TooltipPrimitive.Trigger;
+
+const TooltipContent = React.forwardRef<
+ React.ComponentRef,
+ React.ComponentPropsWithoutRef
+>(({ className, sideOffset = 4, ...props }, ref) => (
+
+
+
+));
+TooltipContent.displayName = TooltipPrimitive.Content.displayName;
+
+export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
diff --git a/src/hooks/useAutoSave.ts b/src/hooks/useAutoSave.ts
new file mode 100644
index 0000000..3df87ed
--- /dev/null
+++ b/src/hooks/useAutoSave.ts
@@ -0,0 +1,43 @@
+import { useEffect, useRef } from "react";
+import { invoke } from "@tauri-apps/api/core";
+import { useStore, actions } from "@/lib/store";
+
+export function useAutoSave() {
+ const { settings, tabs } = useStore();
+ const timerRef = useRef | null>(null);
+ const prevContentRef = useRef("");
+
+ useEffect(() => {
+ if (!settings.autoSave) {
+ if (timerRef.current) {
+ clearTimeout(timerRef.current);
+ timerRef.current = null;
+ }
+ return;
+ }
+
+ const contentKey = tabs.map((t) => t.path + ":" + t.content.length).join("|");
+ if (contentKey === prevContentRef.current) return;
+ prevContentRef.current = contentKey;
+
+ if (timerRef.current) clearTimeout(timerRef.current);
+
+ timerRef.current = setTimeout(async () => {
+ const currentState = actions.getState();
+ for (const tab of currentState.tabs) {
+ if (tab.content !== tab.savedContent) {
+ try {
+ await invoke("write_file", { path: tab.path, contents: tab.content });
+ actions.markSaved(tab.path);
+ } catch (err) {
+ console.error("Auto-save failed for", tab.name, err);
+ }
+ }
+ }
+ }, 1500);
+
+ return () => {
+ if (timerRef.current) clearTimeout(timerRef.current);
+ };
+ }, [settings.autoSave, tabs]);
+}
diff --git a/src/hooks/useKeyboardShortcuts.ts b/src/hooks/useKeyboardShortcuts.ts
new file mode 100644
index 0000000..488c3c0
--- /dev/null
+++ b/src/hooks/useKeyboardShortcuts.ts
@@ -0,0 +1,119 @@
+import { useEffect } from "react";
+import { invoke } from "@tauri-apps/api/core";
+import { actions } from "@/lib/store";
+import { toast } from "sonner";
+
+interface ShortcutHandlers {
+ onOpenCommandPalette: () => void;
+ onOpenQuickOpen: () => void;
+ onToggleTerminal: () => void;
+ onSearchInFiles: () => void;
+ onGoToLine: () => void;
+ onSplitEditor: () => void;
+}
+
+export function useKeyboardShortcuts({
+ onOpenCommandPalette,
+ onOpenQuickOpen,
+ onToggleTerminal,
+ onSearchInFiles,
+ onGoToLine,
+ onSplitEditor,
+}: ShortcutHandlers) {
+ useEffect(() => {
+ const handler = async (e: KeyboardEvent) => {
+ const ctrl = e.ctrlKey || e.metaKey;
+
+ if (ctrl && e.shiftKey && e.key === "P") {
+ e.preventDefault();
+ onOpenCommandPalette();
+ return;
+ }
+
+ if (ctrl && e.key === "p") {
+ e.preventDefault();
+ onOpenQuickOpen();
+ return;
+ }
+
+ if (ctrl && e.key === "b") {
+ e.preventDefault();
+ actions.toggleSidebar();
+ return;
+ }
+
+ if (ctrl && e.key === "s") {
+ e.preventDefault();
+ const state = actions.getState();
+ const activeTab = state.tabs.find((t) => t.path === state.activeTabPath);
+ if (activeTab) {
+ try {
+ await invoke("write_file", { path: activeTab.path, contents: activeTab.content });
+ actions.markSaved(activeTab.path);
+ toast.success("Saved");
+ } catch (err) {
+ toast.error("Failed to save: " + String(err));
+ }
+ }
+ return;
+ }
+
+ if (ctrl && e.shiftKey && e.key === "S") {
+ e.preventDefault();
+ const state = actions.getState();
+ for (const tab of state.tabs) {
+ if (tab.content !== tab.savedContent) {
+ try {
+ await invoke("write_file", { path: tab.path, contents: tab.content });
+ actions.markSaved(tab.path);
+ } catch (err) {
+ toast.error(`Failed to save ${tab.name}: ${String(err)}`);
+ }
+ }
+ }
+ toast.success("All saved");
+ return;
+ }
+
+ if (ctrl && e.key === "w") {
+ e.preventDefault();
+ const state = actions.getState();
+ if (state.activeTabPath) {
+ actions.closeTab(state.activeTabPath);
+ }
+ return;
+ }
+
+ // Ctrl+` - Toggle Terminal
+ if (ctrl && e.key === "`") {
+ e.preventDefault();
+ onToggleTerminal();
+ return;
+ }
+
+ // Ctrl+Shift+F - Search in Files
+ if (ctrl && e.shiftKey && e.key === "F") {
+ e.preventDefault();
+ onSearchInFiles();
+ return;
+ }
+
+ // Ctrl+G - Go to Line
+ if (ctrl && e.key === "g") {
+ e.preventDefault();
+ onGoToLine();
+ return;
+ }
+
+ // Ctrl+\ - Split Editor
+ if (ctrl && e.key === "\\") {
+ e.preventDefault();
+ onSplitEditor();
+ return;
+ }
+ };
+
+ window.addEventListener("keydown", handler);
+ return () => window.removeEventListener("keydown", handler);
+ }, [onOpenCommandPalette, onOpenQuickOpen, onToggleTerminal, onSearchInFiles, onGoToLine, onSplitEditor]);
+}
diff --git a/src/index.css b/src/index.css
new file mode 100644
index 0000000..e58772d
--- /dev/null
+++ b/src/index.css
@@ -0,0 +1,116 @@
+@import "tailwindcss";
+
+@theme {
+ --color-background: #1e1e1e;
+ --color-foreground: #cccccc;
+ --color-card: #252526;
+ --color-card-foreground: #cccccc;
+ --color-popover: #252526;
+ --color-popover-foreground: #cccccc;
+ --color-primary: #007acc;
+ --color-primary-foreground: #ffffff;
+ --color-secondary: #3c3c3c;
+ --color-secondary-foreground: #cccccc;
+ --color-muted: #2d2d2d;
+ --color-muted-foreground: #969696;
+ --color-accent: #04395e;
+ --color-accent-foreground: #ffffff;
+ --color-destructive: #f44747;
+ --color-destructive-foreground: #ffffff;
+ --color-border: #3c3c3c;
+ --color-input: #3c3c3c;
+ --color-ring: #007acc;
+ --radius: 0.25rem;
+
+ --color-sidebar-background: #252526;
+ --color-sidebar-foreground: #cccccc;
+ --color-sidebar-primary: #007acc;
+ --color-sidebar-primary-foreground: #ffffff;
+ --color-sidebar-accent: #37373d;
+ --color-sidebar-accent-foreground: #cccccc;
+ --color-sidebar-border: #3c3c3c;
+ --color-sidebar-ring: #007acc;
+}
+
+@font-face {
+ font-family: 'JetBrains Mono';
+ src: local('JetBrains Mono'), local('JetBrainsMono');
+ font-display: swap;
+}
+
+html, body, #root {
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ overflow: hidden;
+ background-color: var(--color-background);
+ color: var(--color-foreground);
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
+ font-size: 13px;
+}
+
+/* CodeMirror overrides - do not let Tailwind preflight break it */
+.cm-editor {
+ height: 100%;
+ font-family: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace;
+}
+
+.cm-editor .cm-scroller {
+ font-family: inherit;
+}
+
+.cm-editor .cm-content {
+ font-family: inherit;
+}
+
+.cm-editor.cm-focused {
+ outline: none !important;
+}
+
+/* Search panel styling */
+.cm-editor .cm-panels {
+ background-color: #252526;
+ border-bottom: 1px solid #3c3c3c;
+}
+
+.cm-editor .cm-panels input {
+ background-color: #3c3c3c;
+ color: #cccccc;
+ border: 1px solid #3c3c3c;
+ border-radius: 2px;
+ padding: 2px 6px;
+}
+
+.cm-editor .cm-panels button {
+ color: #cccccc;
+ background: transparent;
+ border: none;
+ cursor: pointer;
+}
+
+.cm-editor .cm-panels button:hover {
+ background-color: #3c3c3c;
+}
+
+/* Scrollbar styling */
+::-webkit-scrollbar {
+ width: 10px;
+ height: 10px;
+}
+
+::-webkit-scrollbar-track {
+ background: transparent;
+}
+
+::-webkit-scrollbar-thumb {
+ background: #424242;
+ border-radius: 5px;
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background: #4f4f4f;
+}
+
+::-webkit-scrollbar-corner {
+ background: transparent;
+}
diff --git a/src/lib/languageDetect.ts b/src/lib/languageDetect.ts
new file mode 100644
index 0000000..d167bac
--- /dev/null
+++ b/src/lib/languageDetect.ts
@@ -0,0 +1,171 @@
+import type { Extension } from "@codemirror/state";
+import { StreamLanguage } from "@codemirror/language";
+
+const languageLoaders: Record Promise> = {
+ javascript: async () => {
+ const { javascript } = await import("@codemirror/lang-javascript");
+ return javascript({ jsx: true });
+ },
+ typescript: async () => {
+ const { javascript } = await import("@codemirror/lang-javascript");
+ return javascript({ jsx: true, typescript: true });
+ },
+ python: async () => {
+ const { python } = await import("@codemirror/lang-python");
+ return python();
+ },
+ rust: async () => {
+ const { rust } = await import("@codemirror/lang-rust");
+ return rust();
+ },
+ cpp: async () => {
+ const { cpp } = await import("@codemirror/lang-cpp");
+ return cpp();
+ },
+ java: async () => {
+ const { java } = await import("@codemirror/lang-java");
+ return java();
+ },
+ go: async () => {
+ const { go } = await import("@codemirror/lang-go");
+ return go();
+ },
+ php: async () => {
+ const { php } = await import("@codemirror/lang-php");
+ return php();
+ },
+ sql: async () => {
+ const { sql } = await import("@codemirror/lang-sql");
+ return sql();
+ },
+ html: async () => {
+ const { html } = await import("@codemirror/lang-html");
+ return html();
+ },
+ css: async () => {
+ const { css } = await import("@codemirror/lang-css");
+ return css();
+ },
+ json: async () => {
+ const { json } = await import("@codemirror/lang-json");
+ return json();
+ },
+ xml: async () => {
+ const { xml } = await import("@codemirror/lang-xml");
+ return xml();
+ },
+ markdown: async () => {
+ const { markdown } = await import("@codemirror/lang-markdown");
+ return markdown();
+ },
+ yaml: async () => {
+ const { yaml } = await import("@codemirror/lang-yaml");
+ return yaml();
+ },
+ shell: async () => {
+ const { shell } = await import("@codemirror/legacy-modes/mode/shell");
+ return StreamLanguage.define(shell);
+ },
+ toml: async () => {
+ const { toml } = await import("@codemirror/legacy-modes/mode/toml");
+ return StreamLanguage.define(toml);
+ },
+ dockerfile: async () => {
+ const { dockerFile } = await import("@codemirror/legacy-modes/mode/dockerfile");
+ return StreamLanguage.define(dockerFile);
+ },
+};
+
+const extToLanguage: Record = {
+ js: "javascript",
+ mjs: "javascript",
+ cjs: "javascript",
+ jsx: "javascript",
+ ts: "typescript",
+ tsx: "typescript",
+ mts: "typescript",
+ cts: "typescript",
+ py: "python",
+ pyw: "python",
+ rs: "rust",
+ c: "cpp",
+ h: "cpp",
+ cpp: "cpp",
+ cxx: "cpp",
+ cc: "cpp",
+ hpp: "cpp",
+ hxx: "cpp",
+ java: "java",
+ go: "go",
+ php: "php",
+ sql: "sql",
+ html: "html",
+ htm: "html",
+ svelte: "html",
+ vue: "html",
+ css: "css",
+ scss: "css",
+ less: "css",
+ json: "json",
+ jsonc: "json",
+ xml: "xml",
+ svg: "xml",
+ md: "markdown",
+ mdx: "markdown",
+ markdown: "markdown",
+ yaml: "yaml",
+ yml: "yaml",
+ sh: "shell",
+ bash: "shell",
+ zsh: "shell",
+ fish: "shell",
+ toml: "toml",
+ dockerfile: "dockerfile",
+};
+
+const filenameToLanguage: Record = {
+ Dockerfile: "dockerfile",
+ Makefile: "shell",
+ Jenkinsfile: "java",
+};
+
+export function detectLanguage(filename: string): string {
+ if (filenameToLanguage[filename]) {
+ return filenameToLanguage[filename];
+ }
+ const ext = filename.split(".").pop()?.toLowerCase() ?? "";
+ return extToLanguage[ext] ?? "plaintext";
+}
+
+export async function getLanguageExtension(language: string): Promise {
+ const loader = languageLoaders[language];
+ if (!loader) return null;
+ return loader();
+}
+
+export function getLanguageDisplayName(language: string): string {
+ const names: Record = {
+ javascript: "JavaScript",
+ typescript: "TypeScript",
+ python: "Python",
+ rust: "Rust",
+ cpp: "C/C++",
+ java: "Java",
+ go: "Go",
+ php: "PHP",
+ sql: "SQL",
+ html: "HTML",
+ css: "CSS",
+ json: "JSON",
+ xml: "XML",
+ markdown: "Markdown",
+ yaml: "YAML",
+ shell: "Shell",
+ toml: "TOML",
+ dockerfile: "Dockerfile",
+ plaintext: "Plain Text",
+ };
+ return names[language] ?? language;
+}
+
+export const supportedLanguages = Object.keys(languageLoaders).concat("plaintext");
diff --git a/src/lib/store.ts b/src/lib/store.ts
new file mode 100644
index 0000000..46b5d16
--- /dev/null
+++ b/src/lib/store.ts
@@ -0,0 +1,268 @@
+import { useSyncExternalStore, useCallback } from "react";
+
+export interface EditorTab {
+ path: string;
+ name: string;
+ content: string;
+ savedContent: string;
+ language: string;
+}
+
+export interface SearchResult {
+ filePath: string;
+ fileName: string;
+ lineNumber: number;
+ lineContent: string;
+ matchStart: number;
+ matchEnd: number;
+}
+
+export interface EditorSettings {
+ fontSize: number;
+ fontFamily: string;
+ tabSize: number;
+ wordWrap: boolean;
+ autoSave: boolean;
+ theme: "dark" | "light";
+ customCssPath: string | null;
+}
+
+interface EditorStore {
+ tabs: EditorTab[];
+ activeTabPath: string | null;
+ workspacePath: string | null;
+ sidebarVisible: boolean;
+ terminalVisible: boolean;
+ sidebarView: "files" | "search";
+ searchQuery: string;
+ searchResults: SearchResult[];
+ searchCaseSensitive: boolean;
+ searchRegex: boolean;
+ splitEditorPath: string | null;
+ recentWorkspaces: string[];
+ fileTreeFilter: string;
+ cursorLine: number;
+ cursorCol: number;
+ settings: EditorSettings;
+}
+
+const defaultSettings: EditorSettings = {
+ fontSize: 14,
+ fontFamily: "'JetBrains Mono', 'Fira Code', monospace",
+ tabSize: 2,
+ wordWrap: false,
+ autoSave: false,
+ theme: "dark",
+ customCssPath: null,
+};
+
+function loadSettings(): EditorSettings {
+ try {
+ const stored = localStorage.getItem("editor-settings");
+ if (stored) return { ...defaultSettings, ...JSON.parse(stored) };
+ } catch { /* ignore */ }
+ return defaultSettings;
+}
+
+function loadRecentWorkspaces(): string[] {
+ try {
+ const stored = localStorage.getItem("recent-workspaces");
+ if (stored) return JSON.parse(stored);
+ } catch { /* ignore */ }
+ return [];
+}
+
+let state: EditorStore = {
+ tabs: [],
+ activeTabPath: null,
+ workspacePath: null,
+ sidebarVisible: true,
+ terminalVisible: false,
+ sidebarView: "files",
+ searchQuery: "",
+ searchResults: [],
+ searchCaseSensitive: false,
+ searchRegex: false,
+ splitEditorPath: null,
+ recentWorkspaces: loadRecentWorkspaces(),
+ fileTreeFilter: "",
+ cursorLine: 1,
+ cursorCol: 1,
+ settings: loadSettings(),
+};
+
+const listeners = new Set<() => void>();
+
+function emit() {
+ listeners.forEach((l) => l());
+}
+
+function getSnapshot() {
+ return state;
+}
+
+function subscribe(listener: () => void) {
+ listeners.add(listener);
+ return () => listeners.delete(listener);
+}
+
+export function useStore() {
+ return useSyncExternalStore(subscribe, getSnapshot);
+}
+
+export function useStoreSelector(selector: (s: EditorStore) => T): T {
+ const select = useCallback(() => selector(getSnapshot()), [selector]);
+ return useSyncExternalStore(subscribe, select);
+}
+
+export const actions = {
+ openFile(path: string, name: string, content: string, language: string) {
+ const existing = state.tabs.find((t) => t.path === path);
+ if (existing) {
+ state = { ...state, activeTabPath: path };
+ } else {
+ state = {
+ ...state,
+ tabs: [...state.tabs, { path, name, content, savedContent: content, language }],
+ activeTabPath: path,
+ };
+ }
+ emit();
+ },
+
+ closeTab(path: string) {
+ const tabs = state.tabs.filter((t) => t.path !== path);
+ let activeTabPath = state.activeTabPath;
+ if (activeTabPath === path) {
+ const idx = state.tabs.findIndex((t) => t.path === path);
+ activeTabPath = tabs[Math.min(idx, tabs.length - 1)]?.path ?? null;
+ }
+ // Also close split if it was showing this file
+ let splitEditorPath = state.splitEditorPath;
+ if (splitEditorPath === path) {
+ splitEditorPath = null;
+ }
+ state = { ...state, tabs, activeTabPath, splitEditorPath };
+ emit();
+ },
+
+ setActiveTab(path: string) {
+ state = { ...state, activeTabPath: path };
+ emit();
+ },
+
+ updateContent(path: string, content: string) {
+ state = {
+ ...state,
+ tabs: state.tabs.map((t) => (t.path === path ? { ...t, content } : t)),
+ };
+ emit();
+ },
+
+ markSaved(path: string) {
+ state = {
+ ...state,
+ tabs: state.tabs.map((t) =>
+ t.path === path ? { ...t, savedContent: t.content } : t
+ ),
+ };
+ emit();
+ },
+
+ setWorkspace(path: string | null) {
+ state = { ...state, workspacePath: path };
+ if (path) {
+ const recents = [path, ...state.recentWorkspaces.filter((w) => w !== path)].slice(0, 10);
+ state = { ...state, recentWorkspaces: recents };
+ localStorage.setItem("recent-workspaces", JSON.stringify(recents));
+ }
+ emit();
+ },
+
+ toggleSidebar() {
+ state = { ...state, sidebarVisible: !state.sidebarVisible };
+ emit();
+ },
+
+ toggleTerminal() {
+ state = { ...state, terminalVisible: !state.terminalVisible };
+ emit();
+ },
+
+ setSidebarView(view: "files" | "search") {
+ state = { ...state, sidebarView: view, sidebarVisible: true };
+ emit();
+ },
+
+ setSearchQuery(query: string) {
+ state = { ...state, searchQuery: query };
+ emit();
+ },
+
+ setSearchResults(results: SearchResult[]) {
+ state = { ...state, searchResults: results };
+ emit();
+ },
+
+ setSearchCaseSensitive(value: boolean) {
+ state = { ...state, searchCaseSensitive: value };
+ emit();
+ },
+
+ setSearchRegex(value: boolean) {
+ state = { ...state, searchRegex: value };
+ emit();
+ },
+
+ setSplitEditor(path: string | null) {
+ state = { ...state, splitEditorPath: path };
+ emit();
+ },
+
+ setFileTreeFilter(filter: string) {
+ state = { ...state, fileTreeFilter: filter };
+ emit();
+ },
+
+ reorderTabs(fromIndex: number, toIndex: number) {
+ const tabs = [...state.tabs];
+ const [moved] = tabs.splice(fromIndex, 1);
+ tabs.splice(toIndex, 0, moved);
+ state = { ...state, tabs };
+ emit();
+ },
+
+ reloadFileContent(path: string, content: string) {
+ state = {
+ ...state,
+ tabs: state.tabs.map((t) =>
+ t.path === path ? { ...t, content, savedContent: content } : t
+ ),
+ };
+ emit();
+ },
+
+ setCursor(line: number, col: number) {
+ state = { ...state, cursorLine: line, cursorCol: col };
+ emit();
+ },
+
+ updateTabLanguage(path: string, language: string) {
+ state = {
+ ...state,
+ tabs: state.tabs.map((t) => (t.path === path ? { ...t, language } : t)),
+ };
+ emit();
+ },
+
+ updateSettings(partial: Partial) {
+ const settings = { ...state.settings, ...partial };
+ state = { ...state, settings };
+ localStorage.setItem("editor-settings", JSON.stringify(settings));
+ emit();
+ },
+
+ getState() {
+ return state;
+ },
+};
diff --git a/src/lib/themes.ts b/src/lib/themes.ts
new file mode 100644
index 0000000..0746e6f
--- /dev/null
+++ b/src/lib/themes.ts
@@ -0,0 +1,80 @@
+import { invoke } from "@tauri-apps/api/core";
+
+const darkTheme: Record = {
+ "--color-background": "#1e1e1e",
+ "--color-foreground": "#cccccc",
+ "--color-card": "#252526",
+ "--color-card-foreground": "#cccccc",
+ "--color-popover": "#252526",
+ "--color-popover-foreground": "#cccccc",
+ "--color-primary": "#007acc",
+ "--color-primary-foreground": "#ffffff",
+ "--color-secondary": "#3c3c3c",
+ "--color-secondary-foreground": "#cccccc",
+ "--color-muted": "#2d2d2d",
+ "--color-muted-foreground": "#969696",
+ "--color-accent": "#04395e",
+ "--color-accent-foreground": "#ffffff",
+ "--color-destructive": "#f44747",
+ "--color-destructive-foreground": "#ffffff",
+ "--color-border": "#3c3c3c",
+ "--color-input": "#3c3c3c",
+ "--color-ring": "#007acc",
+ "--color-sidebar-background": "#252526",
+ "--color-sidebar-foreground": "#cccccc",
+ "--color-sidebar-accent": "#37373d",
+ "--color-sidebar-accent-foreground": "#cccccc",
+ "--color-sidebar-border": "#3c3c3c",
+};
+
+const lightTheme: Record = {
+ "--color-background": "#ffffff",
+ "--color-foreground": "#333333",
+ "--color-card": "#f3f3f3",
+ "--color-card-foreground": "#333333",
+ "--color-popover": "#f3f3f3",
+ "--color-popover-foreground": "#333333",
+ "--color-primary": "#007acc",
+ "--color-primary-foreground": "#ffffff",
+ "--color-secondary": "#e0e0e0",
+ "--color-secondary-foreground": "#333333",
+ "--color-muted": "#f0f0f0",
+ "--color-muted-foreground": "#717171",
+ "--color-accent": "#c8ddf1",
+ "--color-accent-foreground": "#333333",
+ "--color-destructive": "#d32f2f",
+ "--color-destructive-foreground": "#ffffff",
+ "--color-border": "#d4d4d4",
+ "--color-input": "#d4d4d4",
+ "--color-ring": "#007acc",
+ "--color-sidebar-background": "#f3f3f3",
+ "--color-sidebar-foreground": "#333333",
+ "--color-sidebar-accent": "#e8e8e8",
+ "--color-sidebar-accent-foreground": "#333333",
+ "--color-sidebar-border": "#d4d4d4",
+};
+
+export function applyTheme(theme: "dark" | "light") {
+ const vars = theme === "dark" ? darkTheme : lightTheme;
+ const root = document.documentElement;
+ for (const [key, value] of Object.entries(vars)) {
+ root.style.setProperty(key, value);
+ }
+}
+
+export async function loadCustomCSS(path: string | null) {
+ const existing = document.getElementById("custom-theme-css");
+ if (existing) existing.remove();
+
+ if (!path) return;
+
+ try {
+ const css = await invoke("read_file", { path });
+ const style = document.createElement("style");
+ style.id = "custom-theme-css";
+ style.textContent = css;
+ document.head.appendChild(style);
+ } catch (err) {
+ console.error("Failed to load custom CSS:", err);
+ }
+}
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
new file mode 100644
index 0000000..365058c
--- /dev/null
+++ b/src/lib/utils.ts
@@ -0,0 +1,6 @@
+import { type ClassValue, clsx } from "clsx";
+import { twMerge } from "tailwind-merge";
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs));
+}
diff --git a/src/main.tsx b/src/main.tsx
new file mode 100644
index 0000000..8b1ddb9
--- /dev/null
+++ b/src/main.tsx
@@ -0,0 +1,10 @@
+import React from "react";
+import ReactDOM from "react-dom/client";
+import App from "./App";
+import "./index.css";
+
+ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
+
+
+ ,
+);
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..0d28e1d
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,30 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx",
+
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./src/*"]
+ },
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src"],
+ "references": [{ "path": "./tsconfig.node.json" }]
+}
diff --git a/tsconfig.node.json b/tsconfig.node.json
new file mode 100644
index 0000000..42872c5
--- /dev/null
+++ b/tsconfig.node.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "skipLibCheck": true,
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "allowSyntheticDefaultImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000..4398e66
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,32 @@
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react";
+import tailwindcss from "@tailwindcss/vite";
+import path from "path";
+
+// @ts-expect-error process is a nodejs global
+const host = process.env.TAURI_DEV_HOST;
+
+export default defineConfig(async () => ({
+ plugins: [react(), tailwindcss()],
+ resolve: {
+ alias: {
+ "@": path.resolve(__dirname, "./src"),
+ },
+ },
+ clearScreen: false,
+ server: {
+ port: 1420,
+ strictPort: true,
+ host: host || false,
+ hmr: host
+ ? {
+ protocol: "ws",
+ host,
+ port: 1421,
+ }
+ : undefined,
+ watch: {
+ ignored: ["**/src-tauri/**"],
+ },
+ },
+}));