From 2a8fade42075fd168017e1e4fb0502e3fda37b90 Mon Sep 17 00:00:00 2001 From: forgejo-actions Date: Wed, 3 Jun 2026 07:26:40 +0000 Subject: [PATCH 01/11] (qol): update release flake hash --- flake.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index 41b621a..c1ae625 100644 --- a/flake.nix +++ b/flake.nix @@ -6,8 +6,8 @@ outputs = {nixpkgs, ...}: let systems = ["x86_64-linux"]; forAllSystems = nixpkgs.lib.genAttrs systems; - version = "0.0.7"; - x86_64DebHash = "sha256-gRkUEx1T7mrCgFEVp0X/ZiaGrKWzO+cCvv33DKCkB+o="; + version = "0.0.8"; + x86_64DebHash = "sha256-xC8YHVk+JpeMvXHB1dZihYLFyzFDXne4bkV6TZiOFrE="; forgejoBaseUrl = "https://git.methanium.net/tensamin/client/releases/download/${version}"; in { packages = forAllSystems (system: let From be56080ba1b289a305bbc1e3992b2cdd2b2da80a Mon Sep 17 00:00:00 2001 From: Alois Date: Wed, 3 Jun 2026 14:53:18 +0200 Subject: [PATCH 02/11] (fix): remove unused dependencies (fix): remove dead code (fix): remove unused exports --- .fallowrc.json | 7 +- apps/electron/package.json | 4 +- apps/electron/src/main/main.ts | 7 +- apps/tauri/package.json | 6 +- apps/web/package.json | 13 +--- apps/web/src/components/sidebar.tsx | 2 +- apps/web/src/features/legal/screen.tsx | 2 +- apps/web/src/features/settings/components.tsx | 70 +------------------ apps/web/src/routes/app/layout.tsx | 21 +----- .../web/src/routes/app/useShowMobileNavbar.ts | 14 ++++ bun.lock | 49 +------------ packages/call/package.json | 5 -- packages/call/src/components/buttons/deaf.tsx | 31 ++------ .../call/src/components/buttons/leave.tsx | 25 ++----- packages/call/src/components/buttons/mute.tsx | 27 ++----- .../src/components/buttons/tooltipButton.tsx | 32 +++++++++ packages/call/src/components/modals/base.tsx | 2 +- packages/call/src/speakingIndicator.ts | 41 +++-------- packages/call/src/speakingState.ts | 55 +++++++++++++++ packages/call/src/store.tsx | 5 -- packages/call/src/values.ts | 11 --- packages/crypto/src/worker.ts | 37 ---------- packages/markdown/package.json | 1 - packages/markdown/src/markdown.tsx | 6 +- packages/notifications/package.json | 2 + packages/shared/package.json | 1 - packages/storage/src/session.tsx | 22 +++--- packages/tauth/package.json | 5 +- packages/ttp/package.json | 3 +- 29 files changed, 168 insertions(+), 338 deletions(-) create mode 100644 apps/web/src/routes/app/useShowMobileNavbar.ts create mode 100644 packages/call/src/components/buttons/tooltipButton.tsx create mode 100644 packages/call/src/speakingState.ts delete mode 100644 packages/call/src/values.ts diff --git a/.fallowrc.json b/.fallowrc.json index 320cbb5..022e0cc 100644 --- a/.fallowrc.json +++ b/.fallowrc.json @@ -1,6 +1,11 @@ { "$schema": "https://raw.githubusercontent.com/fallow-rs/fallow/main/schema.json", - "entry": ["src/index.{ts,tsx,js,jsx}", "src/main.{ts,tsx,js,jsx}"], + "entry": [ + "src/index.{ts,tsx,js,jsx}", + "src/main.{ts,tsx,js,jsx}", + "apps/tauri/render-version.ts", + "packages/**/*.test.ts" + ], "workspaces": { "packages": ["packages/*", "apps/*"] }, diff --git a/apps/electron/package.json b/apps/electron/package.json index aa4d5a0..f20bb96 100644 --- a/apps/electron/package.json +++ b/apps/electron/package.json @@ -26,9 +26,7 @@ "validate:raw": "bun run build && bun run package:linux:raw", "validate": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop --command bun run validate:raw; else bun run validate:raw; fi" }, - "dependencies": { - "electron-updater": "^6.6.2" - }, + "dependencies": {}, "devDependencies": { "@types/node": "^25.9.1", "electron": "^39.2.7", diff --git a/apps/electron/src/main/main.ts b/apps/electron/src/main/main.ts index 05f88fc..ebda1e5 100644 --- a/apps/electron/src/main/main.ts +++ b/apps/electron/src/main/main.ts @@ -12,6 +12,7 @@ import { import { checkForUpdates } from "./updates.js"; import { ipcChannels, + type DesktopScreenShareAudioOutput, type DesktopScreenShareCapabilities, } from "../shared/ipc.js"; @@ -88,7 +89,7 @@ function execJson(command: string, args: string[]) { }); } -async function listAudioOutputs() { +async function listAudioOutputs(): Promise { verboseLog("listAudioOutputs", { platform: process.platform }); if (process.platform !== "linux") return []; @@ -106,7 +107,9 @@ async function listAudioOutputs() { if (!id || !name) return null; return { id, name, isDefault: false }; }) - .filter(Boolean); + .filter( + (output): output is DesktopScreenShareAudioOutput => output != null, + ); } async function listScreenShareSources() { diff --git a/apps/tauri/package.json b/apps/tauri/package.json index 91c18bd..fb41de4 100644 --- a/apps/tauri/package.json +++ b/apps/tauri/package.json @@ -30,12 +30,10 @@ "@tauri-apps/api": "^2", "@tauri-apps/plugin-barcode-scanner": "~2", "@tauri-apps/plugin-deep-link": "~2", - "@tauri-apps/plugin-opener": "^2", + "react-dom": "^19.2.0", "@tensamin/ui": "*", "@tensamin/shared": "workspace:*", - "lucide-react": "^1.14.0", - "react": "^19.2.0", - "react-dom": "^19.2.0" + "react": "^19.2.0" }, "devDependencies": { "@tauri-apps/cli": "^2", diff --git a/apps/web/package.json b/apps/web/package.json index 0748a1f..04d731f 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -13,7 +13,6 @@ }, "dependencies": { "@fontsource-variable/inter": "^5.2.8", - "@noble/curves": "^2.2.0", "@tailwindcss/vite": "^4.2.4", "@tanstack/react-router": "^1.169.1", "@tanstack/react-virtual": "^3.13.24", @@ -30,21 +29,13 @@ "@tensamin/ui": "*", "@tensamin/user": "workspace:*", "@tensamin/notifications": "workspace:*", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "comlink": "^4.4.2", - "framer-motion": "^12.38.0", + "tw-animate-css": "^1.4.0", "lucide-react": "^1.14.0", "qrcode": "^1.5.4", "react": "^19.2.0", "react-dom": "^19.2.0", - "shadcn": "^4.6.0", - "sonner": "^2.0.7", - "tailwind-merge": "^3.5.0", - "tailwind-scrollbar-hide": "^4.0.0", "tailwindcss": "^4.2.4", - "tauri-plugin-app-events-api": "^0.2.0", - "tw-animate-css": "^1.4.0", + "tailwind-scrollbar-hide": "^4.0.0", "zod": "^4.3.6" }, "devDependencies": { diff --git a/apps/web/src/components/sidebar.tsx b/apps/web/src/components/sidebar.tsx index 054aff7..c9851a3 100644 --- a/apps/web/src/components/sidebar.tsx +++ b/apps/web/src/components/sidebar.tsx @@ -33,7 +33,7 @@ import { useIsMobile } from "@tensamin/ui"; import { MobileNavbar } from "./navbar"; import SidebarBox from "@tensamin/call/sidebarBox"; -import { useShowMobileNavbar } from "@/routes/app/layout"; +import { useShowMobileNavbar } from "@/routes/app/useShowMobileNavbar"; import { Ellipsis, Check } from "lucide-react"; import { useState } from "react"; import type { User } from "@tensamin/user/context"; diff --git a/apps/web/src/features/legal/screen.tsx b/apps/web/src/features/legal/screen.tsx index 6d4062c..9859036 100644 --- a/apps/web/src/features/legal/screen.tsx +++ b/apps/web/src/features/legal/screen.tsx @@ -220,7 +220,7 @@ function ContinueButton({ ); } -export function BigCheckbox({ +function BigCheckbox({ id, label, checked, diff --git a/apps/web/src/features/settings/components.tsx b/apps/web/src/features/settings/components.tsx index 7b4157b..b9f2967 100644 --- a/apps/web/src/features/settings/components.tsx +++ b/apps/web/src/features/settings/components.tsx @@ -1,5 +1,5 @@ import { Label } from "@tensamin/ui"; -import { Switch as UISwitch, Input as UIInput } from "@tensamin/ui"; +import { Switch as UISwitch } from "@tensamin/ui"; import { useEffect, useState } from "react"; import type { Storage } from "@tensamin/shared/data"; @@ -10,28 +10,6 @@ type BooleanStorageKey = { [K in keyof Storage]: Storage[K] extends boolean ? K : never; }[keyof Storage]; -type StringStorageKey = { - [K in keyof Storage]: Storage[K] extends string ? K : never; -}[keyof Storage]; - -type NumberStorageKey = { - [K in keyof Storage]: Storage[K] extends number ? K : never; -}[keyof Storage]; - -type InputProps = - | { - label: string; - id: StringStorageKey; - placeholder?: string; - type?: "text"; - } - | { - label: string; - id: NumberStorageKey; - placeholder?: string; - type: "number"; - }; - export function Switch({ label, id, @@ -60,49 +38,3 @@ export function Switch({ ); } - -export function Input({ label, id, placeholder, type }: InputProps) { - const { save, load } = useStorage(); - const [value, setValue] = useState( - type === "number" ? 0 : "", - ); - - useEffect(() => { - load(id).then((loadedValue) => { - if (type === "number") { - if (typeof loadedValue === "number") { - setValue(loadedValue); - } - return; - } - - if (typeof loadedValue === "string") { - setValue(loadedValue); - } - }); - }, [id, load, type]); - - return ( -
- - { - if (type === "number") { - const nextValue = Number(e.target.value); - setValue(nextValue); - save(id, nextValue); - return; - } - - const nextValue = e.target.value; - setValue(nextValue); - save(id, nextValue); - }} - /> -
- ); -} diff --git a/apps/web/src/routes/app/layout.tsx b/apps/web/src/routes/app/layout.tsx index a937d2f..4f5c657 100644 --- a/apps/web/src/routes/app/layout.tsx +++ b/apps/web/src/routes/app/layout.tsx @@ -2,17 +2,12 @@ import { type ReactNode } from "react"; import Sidebar from "@/components/sidebar"; import Navbar, { MobileNavbar } from "@/components/navbar"; +import { useShowMobileNavbar } from "./useShowMobileNavbar"; import { useIsMobile, cn, SidebarProvider } from "@tensamin/ui"; import { isTauri } from "@tauri-apps/api/core"; -import { useLocation, useMatches } from "@tanstack/react-router"; -/** - * Executes Layout. - * @param props Parameter props. - * @returns unknown. - */ export default function Layout({ children }: { children: ReactNode }) { const isMobile = useIsMobile(); const showMobileNavbar = useShowMobileNavbar(); @@ -47,17 +42,3 @@ export default function Layout({ children }: { children: ReactNode }) { ); } - -export function useShowMobileNavbar(): boolean { - const matches = useMatches(); - const location = useLocation(); - - const value = matches.some( - (match) => - match.pathname === location.pathname && - // @ts-expect-error Stuff - match.staticData?.showMobileNavbar === true, - ); - - return value; -} diff --git a/apps/web/src/routes/app/useShowMobileNavbar.ts b/apps/web/src/routes/app/useShowMobileNavbar.ts new file mode 100644 index 0000000..5fb039e --- /dev/null +++ b/apps/web/src/routes/app/useShowMobileNavbar.ts @@ -0,0 +1,14 @@ +import { useLocation, useMatches } from "@tanstack/react-router"; + +export function useShowMobileNavbar(): boolean { + const matches = useMatches(); + const location = useLocation(); + + return matches.some( + (match) => + match.pathname === location.pathname && + // Router staticData is app-defined and not typed by the route matcher here. + // @ts-expect-error App route metadata + match.staticData?.showMobileNavbar === true, + ); +} diff --git a/bun.lock b/bun.lock index 02db475..a1d9171 100644 --- a/bun.lock +++ b/bun.lock @@ -28,9 +28,6 @@ "apps/electron": { "name": "@tensamin/electron", "version": "0.0.3", - "dependencies": { - "electron-updater": "^6.6.2", - }, "devDependencies": { "@types/node": "^25.9.1", "electron": "^39.2.7", @@ -46,10 +43,8 @@ "@tauri-apps/api": "^2", "@tauri-apps/plugin-barcode-scanner": "~2", "@tauri-apps/plugin-deep-link": "~2", - "@tauri-apps/plugin-opener": "^2", "@tensamin/shared": "workspace:*", "@tensamin/ui": "*", - "lucide-react": "^1.14.0", "react": "^19.2.0", "react-dom": "^19.2.0", }, @@ -63,7 +58,6 @@ "version": "0.0.0", "dependencies": { "@fontsource-variable/inter": "^5.2.8", - "@noble/curves": "^2.2.0", "@tailwindcss/vite": "^4.2.4", "@tanstack/react-router": "^1.169.1", "@tanstack/react-virtual": "^3.13.24", @@ -80,20 +74,12 @@ "@tensamin/ttp": "workspace:*", "@tensamin/ui": "*", "@tensamin/user": "workspace:*", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "comlink": "^4.4.2", - "framer-motion": "^12.38.0", "lucide-react": "^1.14.0", "qrcode": "^1.5.4", "react": "^19.2.0", "react-dom": "^19.2.0", - "shadcn": "^4.6.0", - "sonner": "^2.0.7", - "tailwind-merge": "^3.5.0", "tailwind-scrollbar-hide": "^4.0.0", "tailwindcss": "^4.2.4", - "tauri-plugin-app-events-api": "^0.2.0", "tw-animate-css": "^1.4.0", "zod": "^4.3.6", }, @@ -116,15 +102,12 @@ "version": "0.0.0", "dependencies": { "@livekit/components-react": "^2.9.20", - "@tanstack/react-query": "^5.100.7", "@tanstack/react-router": "^1.169.1", "@tanstack/react-virtual": "^3.13.24", "@tauri-apps/api": "^2", "@tensamin/crypto": "workspace:*", - "@tensamin/markdown": "workspace:*", "@tensamin/shared": "workspace:*", "@tensamin/storage": "workspace:*", - "@tensamin/tauri": "workspace:*", "@tensamin/ttp": "workspace:*", "@tensamin/ui": "*", "@tensamin/user": "workspace:*", @@ -134,7 +117,6 @@ "react": "^19.2.0", "react-dom": "^19.2.0", "recharts": "^3.8.1", - "sonner": "^2.0.7", "zod": "^4.3.6", "zustand": "^5.0.8", }, @@ -177,7 +159,6 @@ "@codemirror/lang-markdown": "^6.5.0", "@codemirror/state": "^6.5.4", "@codemirror/view": "^6.41.1", - "@tensamin/ui": "*", "react": "^19.2.0", "react-dom": "^19.2.0", }, @@ -193,9 +174,11 @@ "@tensamin/shared": "workspace:*", "@tensamin/storage": "workspace:*", "@tensamin/ttp": "workspace:*", + "@tensamin/ui": "*", "@tensamin/user": "workspace:*", "react": "^19.2.0", "react-dom": "^19.2.0", + "sonner": "^2.0.7", "zod": "^4.3.6", }, }, @@ -207,7 +190,6 @@ "lucide-react": "^1.14.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "sonner": "^2.0.7", "zod": "^4.3.6", }, }, @@ -231,14 +213,12 @@ "@tensamin/crypto": "workspace:*", "@tensamin/shared": "workspace:*", "@tensamin/storage": "workspace:*", - "@tensamin/tauri": "workspace:*", "@tensamin/ttp": "workspace:*", "@tensamin/ui": "*", "@tensamin/user": "workspace:*", "lucide-react": "^1.8.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "sonner": "^2.0.7", "zod": "^4.3.6", }, }, @@ -256,7 +236,6 @@ "react": "^19.2.0", "react-dom": "^19.2.0", "tauri-plugin-app-events-api": "^0.2.0", - "zod": "^4.3.6", }, "devDependencies": { "eslint": "^10.0.3", @@ -740,8 +719,6 @@ "@tauri-apps/plugin-deep-link": ["@tauri-apps/plugin-deep-link@2.4.9", "", { "dependencies": { "@tauri-apps/api": "^2.11.0" } }, "sha512-u0SKOUHnJ1wqeqXsDFq2+kASCBj9xxbG0g9XZWPy9SOmU4wXtp6b/wiYpm6oH6/5fBTQsLqnLhIvqLBRpgHJlA=="], - "@tauri-apps/plugin-opener": ["@tauri-apps/plugin-opener@2.5.4", "", { "dependencies": { "@tauri-apps/api": "^2.11.0" } }, "sha512-1HnPkb+AmgO29HBazm4uPLKB+r7zzcTBW1d0fyYp1uP+jwtpoiNDGKMMzz58SFp49nOIrxdE3aUJtT57lfO9CQ=="], - "@tensamin/call": ["@tensamin/call@workspace:packages/call"], "@tensamin/chat": ["@tensamin/chat@workspace:packages/chat"], @@ -1122,8 +1099,6 @@ "electron-to-chromium": ["electron-to-chromium@1.5.349", "", {}, "sha512-QsWVGyRuY07Aqb234QytTfwd5d9AJlfNIQ5wIOl1L+PZDzI9d9+Fn0FRale/QYlFxt/bUnB0/nLd1jFPGxGK1A=="], - "electron-updater": ["electron-updater@6.8.3", "", { "dependencies": { "builder-util-runtime": "9.5.1", "fs-extra": "^10.1.0", "js-yaml": "^4.1.0", "lazy-val": "^1.0.5", "lodash.escaperegexp": "^4.1.2", "lodash.isequal": "^4.5.0", "semver": "~7.7.3", "tiny-typed-emitter": "^2.1.0" } }, "sha512-Z6sgw3jgbikWKXei1ENdqFOxBP0WlXg3TtKfz0rgw2vIZFJUyI4pD7ZN7jrkm7EoMK+tcm/qTnPUdqfZukBlBQ=="], - "electron-winstaller": ["electron-winstaller@5.4.0", "", { "dependencies": { "@electron/asar": "^3.2.1", "debug": "^4.1.1", "fs-extra": "^7.0.1", "lodash": "^4.17.21", "temp": "^0.9.0" }, "optionalDependencies": { "@electron/windows-sign": "^1.1.2" } }, "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg=="], "embla-carousel": ["embla-carousel@8.6.0", "", {}, "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA=="], @@ -1256,8 +1231,6 @@ "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], - "framer-motion": ["framer-motion@12.38.0", "", { "dependencies": { "motion-dom": "^12.38.0", "motion-utils": "^12.36.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g=="], - "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], "fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], @@ -1476,10 +1449,6 @@ "lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], - "lodash.escaperegexp": ["lodash.escaperegexp@4.1.2", "", {}, "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw=="], - - "lodash.isequal": ["lodash.isequal@4.5.0", "", {}, "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="], - "log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="], "loglevel": ["loglevel@1.9.2", "", {}, "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg=="], @@ -1528,10 +1497,6 @@ "mkdirp": ["mkdirp@0.5.6", "", { "dependencies": { "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="], - "motion-dom": ["motion-dom@12.38.0", "", { "dependencies": { "motion-utils": "^12.36.0" } }, "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA=="], - - "motion-utils": ["motion-utils@12.36.0", "", {}, "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg=="], - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], "msw": ["msw@2.14.2", "", { "dependencies": { "@inquirer/confirm": "^6.0.11", "@mswjs/interceptors": "^0.41.3", "@open-draft/deferred-promise": "^3.0.0", "@types/statuses": "^2.0.6", "cookie": "^1.1.1", "graphql": "^16.13.2", "headers-polyfill": "^5.0.1", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", "picocolors": "^1.1.1", "rettime": "^0.11.7", "statuses": "^2.0.2", "strict-event-emitter": "^0.5.1", "tough-cookie": "^6.0.1", "type-fest": "^5.5.0", "until-async": "^3.0.2", "yargs": "^17.7.2" }, "peerDependencies": { "typescript": ">= 4.8.x" }, "optionalPeers": ["typescript"], "bin": { "msw": "cli/index.js" } }, "sha512-D2bTe0tpuf9nw4DA39wFaqUD/hRPKj0DKpo2lAqu+A47Ifg4+h0hbfn6QxVOsiUY2uhgEN6TTpGSHDsc+ysYNg=="], @@ -1770,7 +1735,7 @@ "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], - "shadcn": ["shadcn@4.6.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/plugin-transform-typescript": "^7.28.0", "@babel/preset-typescript": "^7.27.1", "@dotenvx/dotenvx": "^1.48.4", "@modelcontextprotocol/sdk": "^1.26.0", "@types/validate-npm-package-name": "^4.0.2", "browserslist": "^4.26.2", "commander": "^14.0.0", "cosmiconfig": "^9.0.0", "dedent": "^1.6.0", "deepmerge": "^4.3.1", "diff": "^8.0.2", "execa": "^9.6.0", "fast-glob": "^3.3.3", "fs-extra": "^11.3.1", "fuzzysort": "^3.1.0", "https-proxy-agent": "^7.0.6", "kleur": "^4.1.5", "msw": "^2.10.4", "node-fetch": "^3.3.2", "open": "^11.0.0", "ora": "^8.2.0", "postcss": "^8.5.6", "postcss-selector-parser": "^7.1.0", "prompts": "^2.4.2", "recast": "^0.23.11", "stringify-object": "^5.0.0", "tailwind-merge": "^3.0.1", "ts-morph": "^26.0.0", "tsconfig-paths": "^4.2.0", "validate-npm-package-name": "^7.0.1", "zod": "^3.24.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "shadcn": "dist/index.js" } }, "sha512-4XeMwFf8ZZxmqQQp+U+Nsq2M+cY4Da8Joo/EaMdHVc4uVuWSTJoeidlZ3gDjyxXCjYB1FLcxYwR4lYQAH8emOg=="], + "shadcn": ["shadcn@3.8.5", "", { "dependencies": { "@antfu/ni": "^25.0.0", "@babel/core": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/plugin-transform-typescript": "^7.28.0", "@babel/preset-typescript": "^7.27.1", "@dotenvx/dotenvx": "^1.48.4", "@modelcontextprotocol/sdk": "^1.26.0", "@types/validate-npm-package-name": "^4.0.2", "browserslist": "^4.26.2", "commander": "^14.0.0", "cosmiconfig": "^9.0.0", "dedent": "^1.6.0", "deepmerge": "^4.3.1", "diff": "^8.0.2", "execa": "^9.6.0", "fast-glob": "^3.3.3", "fs-extra": "^11.3.1", "fuzzysort": "^3.1.0", "https-proxy-agent": "^7.0.6", "kleur": "^4.1.5", "msw": "^2.10.4", "node-fetch": "^3.3.2", "open": "^11.0.0", "ora": "^8.2.0", "postcss": "^8.5.6", "postcss-selector-parser": "^7.1.0", "prompts": "^2.4.2", "recast": "^0.23.11", "stringify-object": "^5.0.0", "tailwind-merge": "^3.0.1", "ts-morph": "^26.0.0", "tsconfig-paths": "^4.2.0", "validate-npm-package-name": "^7.0.1", "zod": "^3.24.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "shadcn": "dist/index.js" } }, "sha512-jPRx44e+eyeV7xwY3BLJXcfrks00+M0h5BGB9l6DdcBW4BpAj4x3lVmVy0TXPEs2iHEisxejr62sZAAw6B1EVA=="], "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], @@ -1850,8 +1815,6 @@ "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], - "tiny-typed-emitter": ["tiny-typed-emitter@2.1.0", "", {}, "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA=="], - "tinyexec": ["tinyexec@1.1.2", "", {}, "sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA=="], "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], @@ -2054,8 +2017,6 @@ "@tensamin/ui/recharts": ["recharts@3.8.0", "", { "dependencies": { "@reduxjs/toolkit": "^1.9.0 || 2.x.x", "clsx": "^2.1.1", "decimal.js-light": "^2.5.1", "es-toolkit": "^1.39.3", "eventemitter3": "^5.0.1", "immer": "^10.1.1", "react-redux": "8.x.x || 9.x.x", "reselect": "5.1.1", "tiny-invariant": "^1.3.3", "use-sync-external-store": "^1.2.2", "victory-vendor": "^37.0.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Z/m38DX3L73ExO4Tpc9/iZWHmHnlzWG4njQbxsF5aSjwqmHNDDIm0rdEBArkwsBvR8U6EirlEHiQNYWCVh9sGQ=="], - "@tensamin/ui/shadcn": ["shadcn@3.8.5", "", { "dependencies": { "@antfu/ni": "^25.0.0", "@babel/core": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/plugin-transform-typescript": "^7.28.0", "@babel/preset-typescript": "^7.27.1", "@dotenvx/dotenvx": "^1.48.4", "@modelcontextprotocol/sdk": "^1.26.0", "@types/validate-npm-package-name": "^4.0.2", "browserslist": "^4.26.2", "commander": "^14.0.0", "cosmiconfig": "^9.0.0", "dedent": "^1.6.0", "deepmerge": "^4.3.1", "diff": "^8.0.2", "execa": "^9.6.0", "fast-glob": "^3.3.3", "fs-extra": "^11.3.1", "fuzzysort": "^3.1.0", "https-proxy-agent": "^7.0.6", "kleur": "^4.1.5", "msw": "^2.10.4", "node-fetch": "^3.3.2", "open": "^11.0.0", "ora": "^8.2.0", "postcss": "^8.5.6", "postcss-selector-parser": "^7.1.0", "prompts": "^2.4.2", "recast": "^0.23.11", "stringify-object": "^5.0.0", "tailwind-merge": "^3.0.1", "ts-morph": "^26.0.0", "tsconfig-paths": "^4.2.0", "validate-npm-package-name": "^7.0.1", "zod": "^3.24.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "shadcn": "dist/index.js" } }, "sha512-jPRx44e+eyeV7xwY3BLJXcfrks00+M0h5BGB9l6DdcBW4BpAj4x3lVmVy0TXPEs2iHEisxejr62sZAAw6B1EVA=="], - "@types/cacheable-request/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], "@types/fs-extra/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], @@ -2180,10 +2141,6 @@ "@tensamin/tauri/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], - "@tensamin/ui/shadcn/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], - - "@tensamin/ui/shadcn/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "@types/cacheable-request/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], "@types/fs-extra/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], diff --git a/packages/call/package.json b/packages/call/package.json index c60a47d..080dd15 100644 --- a/packages/call/package.json +++ b/packages/call/package.json @@ -16,15 +16,11 @@ }, "dependencies": { "@livekit/components-react": "^2.9.20", - "@tanstack/react-query": "^5.100.7", "@tanstack/react-router": "^1.169.1", - "@tanstack/react-virtual": "^3.13.24", "@tauri-apps/api": "^2", "@tensamin/crypto": "workspace:*", - "@tensamin/markdown": "workspace:*", "@tensamin/shared": "workspace:*", "@tensamin/storage": "workspace:*", - "@tensamin/tauri": "workspace:*", "@tensamin/ttp": "workspace:*", "@tensamin/ui": "*", "@tensamin/user": "workspace:*", @@ -34,7 +30,6 @@ "react": "^19.2.0", "react-dom": "^19.2.0", "recharts": "^3.8.1", - "sonner": "^2.0.7", "zod": "^4.3.6", "zustand": "^5.0.8" } diff --git a/packages/call/src/components/buttons/deaf.tsx b/packages/call/src/components/buttons/deaf.tsx index 42dd3f4..6d0ede0 100644 --- a/packages/call/src/components/buttons/deaf.tsx +++ b/packages/call/src/components/buttons/deaf.tsx @@ -1,18 +1,14 @@ -import { Button, Tooltip, TooltipContent, TooltipTrigger } from "@tensamin/ui"; +import { Button } from "@tensamin/ui"; import { toggleDeaf, useCall } from "../../store"; import { HeadphoneOff, Headphones } from "lucide-react"; +import { type CallButtonProps, iconScale, withTooltip } from "./tooltipButton"; export default function DeafButton({ className, iconSize, tooltip, portalContainer, -}: { - className?: string; - iconSize?: number; - tooltip?: string; - portalContainer?: HTMLElement; -}) { +}: CallButtonProps) { const deaf = useCall((state) => state.deaf); const button = ( @@ -22,27 +18,12 @@ export default function DeafButton({ className={className} > {deaf ? ( - + ) : ( - + )} ); - if (!tooltip) { - return button; - } - - return ( - - - - {tooltip} - - - ); + return withTooltip(button, tooltip, portalContainer); } diff --git a/packages/call/src/components/buttons/leave.tsx b/packages/call/src/components/buttons/leave.tsx index 364b4be..d4f0371 100644 --- a/packages/call/src/components/buttons/leave.tsx +++ b/packages/call/src/components/buttons/leave.tsx @@ -1,18 +1,14 @@ import { LeaveIcon } from "@livekit/components-react"; -import { Button, Tooltip, TooltipContent, TooltipTrigger } from "@tensamin/ui"; +import { Button } from "@tensamin/ui"; import { disconnect, useCall } from "../../store"; +import { type CallButtonProps, iconScale, withTooltip } from "./tooltipButton"; export default function LeaveButton({ className, iconSize, tooltip, portalContainer, -}: { - className?: string; - iconSize?: number; - tooltip?: string; - portalContainer?: HTMLElement; -}) { +}: CallButtonProps) { const state = useCall((store) => store.state); const button = ( @@ -22,20 +18,9 @@ export default function LeaveButton({ disabled={state === "closing" || state === "closed"} variant="destructive" > - + ); - if (!tooltip) { - return button; - } - - return ( - - - - {tooltip} - - - ); + return withTooltip(button, tooltip, portalContainer); } diff --git a/packages/call/src/components/buttons/mute.tsx b/packages/call/src/components/buttons/mute.tsx index c8f2ba0..3067a2b 100644 --- a/packages/call/src/components/buttons/mute.tsx +++ b/packages/call/src/components/buttons/mute.tsx @@ -1,18 +1,14 @@ -import { Button, Tooltip, TooltipContent, TooltipTrigger } from "@tensamin/ui"; +import { Button } from "@tensamin/ui"; import { toggleMute, useCall } from "../../store"; import { Mic, MicOff } from "lucide-react"; +import { type CallButtonProps, iconScale, withTooltip } from "./tooltipButton"; export default function MuteButton({ className, iconSize, tooltip, portalContainer, -}: { - className?: string; - iconSize?: number; - tooltip?: string; - portalContainer?: HTMLElement; -}) { +}: CallButtonProps) { const micEnabled = useCall((state) => state.micEnabled); const button = ( @@ -22,23 +18,12 @@ export default function MuteButton({ onClick={() => void toggleMute()} > {micEnabled ? ( - + ) : ( - + )} ); - if (!tooltip) { - return button; - } - - return ( - - - - {tooltip} - - - ); + return withTooltip(button, tooltip, portalContainer); } diff --git a/packages/call/src/components/buttons/tooltipButton.tsx b/packages/call/src/components/buttons/tooltipButton.tsx new file mode 100644 index 0000000..72110f8 --- /dev/null +++ b/packages/call/src/components/buttons/tooltipButton.tsx @@ -0,0 +1,32 @@ +import { type ReactElement } from "react"; +import { Tooltip, TooltipContent, TooltipTrigger } from "@tensamin/ui"; + +export type CallButtonProps = { + className?: string; + iconSize?: number; + tooltip?: string; + portalContainer?: HTMLElement; +}; + +export function iconScale(iconSize?: number) { + return { scale: (iconSize ? iconSize + 100 : 100) + "%" }; +} + +export function withTooltip( + button: ReactElement, + tooltip?: string, + portalContainer?: HTMLElement, +) { + if (!tooltip) { + return button; + } + + return ( + + + + {tooltip} + + + ); +} diff --git a/packages/call/src/components/modals/base.tsx b/packages/call/src/components/modals/base.tsx index 768f6f5..47e47cf 100644 --- a/packages/call/src/components/modals/base.tsx +++ b/packages/call/src/components/modals/base.tsx @@ -18,7 +18,7 @@ import { import { Track, type Participant } from "livekit-client"; import { useEffect, useRef, useState } from "react"; import { useUser, type User } from "@tensamin/user/context"; -import { useIsSpeaking } from "../../speakingIndicator"; +import { useIsSpeaking } from "../../speakingState"; import VideoViewer from "../videoViewer"; import { HeadphoneOff, MicOff, Monitor, Plus, Shield } from "lucide-react"; diff --git a/packages/call/src/speakingIndicator.ts b/packages/call/src/speakingIndicator.ts index 0c4f5a5..8f05eb8 100644 --- a/packages/call/src/speakingIndicator.ts +++ b/packages/call/src/speakingIndicator.ts @@ -1,5 +1,10 @@ import { log } from "@tensamin/shared/log"; -import { useCall } from "./store"; +import { + clearSpeakingParticipants, + removeSpeakingParticipant, + setMicGated, + updateSpeakingParticipants, +} from "./speakingState"; const SPEAKING_THRESHOLD = 0.01; const SPEAKING_HANGTIME_MS = 500; @@ -85,12 +90,7 @@ class SpeakingDetector { } this.entries.delete(participantId); - useCall.setState((state) => { - if (!state.speakingParticipantIds.has(participantId)) return state; - const next = new Set(state.speakingParticipantIds); - next.delete(participantId); - return { speakingParticipantIds: next }; - }); + removeSpeakingParticipant(participantId); if (participantId === this.localParticipantId && this.localMicGateClosed) { this.muteLocalTrack(false); @@ -104,7 +104,7 @@ class SpeakingDetector { entry.isSpeaking = false; entry.lastSpeakingTime = 0; } - useCall.setState({ speakingParticipantIds: new Set() }); + clearSpeakingParticipants(); } } @@ -131,7 +131,7 @@ class SpeakingDetector { } this.localMicGateClosed = muted; - useCall.setState({ micGated: muted }); + setMicGated(muted); } private applyNoiseGate(rms: number) { @@ -197,24 +197,7 @@ class SpeakingDetector { } if (changed.size > 0) { - useCall.setState((state) => { - let hasDiff = false; - const next = new Set(state.speakingParticipantIds); - for (const [id, speaking] of changed) { - if (speaking) { - if (!next.has(id)) { - next.add(id); - hasDiff = true; - } - } else { - if (next.has(id)) { - next.delete(id); - hasDiff = true; - } - } - } - return hasDiff ? { speakingParticipantIds: next } : state; - }); + updateSpeakingParticipants(changed); } } @@ -246,7 +229,3 @@ export function disposeSpeakingDetector(): void { detectorInstance = null; } } - -export function useIsSpeaking(participantId: number): boolean { - return useCall((state) => state.speakingParticipantIds.has(participantId)); -} diff --git a/packages/call/src/speakingState.ts b/packages/call/src/speakingState.ts new file mode 100644 index 0000000..8f9e815 --- /dev/null +++ b/packages/call/src/speakingState.ts @@ -0,0 +1,55 @@ +import { create } from "zustand"; + +type SpeakingState = { + speakingParticipantIds: Set; + micGated: boolean; +}; + +const useSpeakingState = create(() => ({ + speakingParticipantIds: new Set(), + micGated: false, +})); + +export function setMicGated(micGated: boolean) { + useSpeakingState.setState({ micGated }); +} + +export function clearSpeakingParticipants() { + useSpeakingState.setState({ speakingParticipantIds: new Set() }); +} + +export function removeSpeakingParticipant(participantId: number) { + useSpeakingState.setState((state) => { + if (!state.speakingParticipantIds.has(participantId)) return state; + const next = new Set(state.speakingParticipantIds); + next.delete(participantId); + return { speakingParticipantIds: next }; + }); +} + +export function updateSpeakingParticipants(changed: Map) { + useSpeakingState.setState((state) => { + let hasDiff = false; + const next = new Set(state.speakingParticipantIds); + + for (const [id, speaking] of changed) { + if (speaking) { + if (!next.has(id)) { + next.add(id); + hasDiff = true; + } + } else if (next.has(id)) { + next.delete(id); + hasDiff = true; + } + } + + return hasDiff ? { speakingParticipantIds: next } : state; + }); +} + +export function useIsSpeaking(participantId: number): boolean { + return useSpeakingState((state) => + state.speakingParticipantIds.has(participantId), + ); +} diff --git a/packages/call/src/store.tsx b/packages/call/src/store.tsx index 6f3955c..7d3e609 100644 --- a/packages/call/src/store.tsx +++ b/packages/call/src/store.tsx @@ -109,8 +109,6 @@ type CallStore = { layoutVersion: number; screenRef: React.RefObject | null; runtime: Runtime | null; - speakingParticipantIds: Set; - micGated: boolean; }; let _keyProvider: ExternalE2EEKeyProvider | null = null; @@ -857,7 +855,6 @@ export async function disconnect() { watchedStreamParticipantIds: [], pendingWatchedParticipantIds: [], activeScreenShareParticipantIds: [], - micGated: false, }); getRoom().remoteParticipants.forEach((participant) => { @@ -1079,8 +1076,6 @@ export const useCall = create(() => ({ layoutVersion: 0, screenRef: null, runtime: null, - speakingParticipantIds: new Set(), - micGated: false, })); // Register app-level call listeners and wire React dependencies into the store. diff --git a/packages/call/src/values.ts b/packages/call/src/values.ts deleted file mode 100644 index 0564800..0000000 --- a/packages/call/src/values.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { z } from "zod"; -import { ttp } from "@tensamin/shared/data"; - -export type RawMessages = z.infer["messages"]; - -export type RawMessage = RawMessages[number]; - -export type LiveMessage = RawMessage & { - failed?: boolean; - localId: string; -}; diff --git a/packages/crypto/src/worker.ts b/packages/crypto/src/worker.ts index da393f6..f22fe42 100644 --- a/packages/crypto/src/worker.ts +++ b/packages/crypto/src/worker.ts @@ -395,49 +395,12 @@ export async function getSharedSecret( return out; }; - /** - * Returns WebCrypto subtle API when available. - * @returns SubtleCrypto instance or undefined. - */ const getSubtle = () => globalThis.crypto?.subtle; - { - /* - const hkdfAesGcmFromShared = async ( - sharedSecret: BufferSource, - infoStr: string - ): Promise => { - const subtle = getSubtle(); - if (!subtle) throw new Error("WebCrypto subtle not available"); - const info = textEncoder.encode(infoStr); - const baseKey = await subtle.importKey( - "raw", - sharedSecret, - "HKDF", - false, - ["deriveKey"] - ); - return await subtle.deriveKey( - { - name: "HKDF", - hash: "SHA-256", - salt: new Uint8Array(0), - info, - }, - baseKey, - { name: "AES-GCM", length: 256 }, - false, - ["encrypt", "decrypt"] - ); - }; - */ - } - const myJwk: JWK = normalizeOkpX448Jwk(ownJwk, "own_jwk"); const peerJwk: JWK = normalizeOkpX448Jwk(otherJwk, "other_jwk"); const subtle = getSubtle(); - //const infoStr = `ECDH-X448-AES-GCM-v1|my=${myJwk.x}|peer=${peerJwk.x}`; if (subtle) { const algorithms = [{ name: "ECDH", namedCurve: "X448" }, { name: "X448" }]; diff --git a/packages/markdown/package.json b/packages/markdown/package.json index 5090799..b82d265 100644 --- a/packages/markdown/package.json +++ b/packages/markdown/package.json @@ -17,7 +17,6 @@ "@codemirror/lang-markdown": "^6.5.0", "@codemirror/state": "^6.5.4", "@codemirror/view": "^6.41.1", - "@tensamin/ui": "*", "react": "^19.2.0", "react-dom": "^19.2.0" } diff --git a/packages/markdown/src/markdown.tsx b/packages/markdown/src/markdown.tsx index 46ebb92..976301a 100644 --- a/packages/markdown/src/markdown.tsx +++ b/packages/markdown/src/markdown.tsx @@ -80,7 +80,7 @@ const INLINE_TOKEN_REGEX = * @param input Parameter input. * @returns InlineNode[]. */ -export function parseInlineNodes(input: string): InlineNode[] { +function parseInlineNodes(input: string): InlineNode[] { const nodes: InlineNode[] = []; let cursor = 0; @@ -369,7 +369,7 @@ export function parseMarkdownBlocks(markdown: string): MarkdownBlock[] { * @param nodes Parameter nodes. * @returns React.ReactNode[]. */ -export function renderInline(nodes: InlineNode[]): React.ReactNode[] { +function renderInline(nodes: InlineNode[]): React.ReactNode[] { return nodes.map((node, index) => { if (node.type === "text") { return node.value; @@ -636,7 +636,7 @@ function readTable( }; } -export const markdownStyles = ` +const markdownStyles = ` .tm-md-root { color: hsl(var(--foreground)); line-height: 1.55; font-size: 0.95rem; } .tm-md-heading { margin: 0.2rem 0 0.35rem; font-weight: 700; line-height: 1.25; } .tm-md-h1 { font-size: 1.65rem; } diff --git a/packages/notifications/package.json b/packages/notifications/package.json index a6b06be..cfd540a 100644 --- a/packages/notifications/package.json +++ b/packages/notifications/package.json @@ -19,9 +19,11 @@ "@tensamin/chat": "workspace:*", "@tensamin/storage": "workspace:*", "@tensamin/ttp": "workspace:*", + "@tensamin/ui": "*", "@tensamin/user": "workspace:*", "react": "^19.2.0", "react-dom": "^19.2.0", + "sonner": "^2.0.7", "zod": "^4.3.6" } } diff --git a/packages/shared/package.json b/packages/shared/package.json index c009c34..3d06116 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -21,7 +21,6 @@ "lucide-react": "^1.14.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "sonner": "^2.0.7", "zod": "^4.3.6" } } diff --git a/packages/storage/src/session.tsx b/packages/storage/src/session.tsx index 892f3e6..46f36d6 100644 --- a/packages/storage/src/session.tsx +++ b/packages/storage/src/session.tsx @@ -25,9 +25,15 @@ export default function SessionProvider({ children }: { children: ReactNode }) { const { load, save } = useStorage(); const [contacts, setContacts] = useState([]); const [communities, setCommunities] = useState([]); - const [calls, setCalls] = useState([]); + const [localCalls, setLocalCalls] = useState([]); + const calls = [ + ...freshCalls, + ...localCalls.filter( + (call) => !freshCalls.some((fresh) => fresh.call_id === call.call_id), + ), + ]; - // Get cached data and merge fresh data + // Cached session data fills in items the server did not return freshly. useEffect(() => { load("cached_contacts").then((cachedData) => { setContacts([ @@ -53,16 +59,6 @@ export default function SessionProvider({ children }: { children: ReactNode }) { }); }, [load, freshContacts, freshCommunities]); - useEffect(() => { - setCalls((prevCalls) => [ - ...freshCalls, - ...prevCalls.filter( - (call) => !freshCalls.some((fresh) => fresh.call_id === call.call_id), - ), - ]); - }, [freshCalls]); - - // Save data useEffect(() => { save("cached_contacts", contacts); }, [contacts, save]); @@ -98,7 +94,7 @@ export default function SessionProvider({ children }: { children: ReactNode }) { }; const insertCall = (call: Calls[number]) => { - setCalls((prevCalls) => { + setLocalCalls((prevCalls) => { if (prevCalls.some((prevCall) => prevCall.call_id === call.call_id)) { return prevCalls; } diff --git a/packages/tauth/package.json b/packages/tauth/package.json index 3f5044a..2dd2329 100644 --- a/packages/tauth/package.json +++ b/packages/tauth/package.json @@ -17,14 +17,11 @@ "@tensamin/crypto": "workspace:*", "@tensamin/shared": "workspace:*", "@tensamin/storage": "workspace:*", - "@tensamin/tauri": "workspace:*", "@tensamin/ttp": "workspace:*", "@tensamin/ui": "*", "@tensamin/user": "workspace:*", "lucide-react": "^1.8.0", "react": "^19.2.0", - "react-dom": "^19.2.0", - "sonner": "^2.0.7", - "zod": "^4.3.6" + "react-dom": "^19.2.0" } } diff --git a/packages/ttp/package.json b/packages/ttp/package.json index ed09f35..7243f25 100644 --- a/packages/ttp/package.json +++ b/packages/ttp/package.json @@ -21,8 +21,7 @@ "@tauri-apps/api": "^2", "react": "^19.2.0", "react-dom": "^19.2.0", - "tauri-plugin-app-events-api": "^0.2.0", - "zod": "^4.3.6" + "tauri-plugin-app-events-api": "^0.2.0" }, "devDependencies": { "eslint": "^10.0.3" From 1a563f63a2616b90a4c79dc499fef29c03009efb Mon Sep 17 00:00:00 2001 From: Alois Date: Wed, 3 Jun 2026 14:54:34 +0200 Subject: [PATCH 03/11] (feat): add lint script to apps/electron/ --- apps/electron/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/electron/package.json b/apps/electron/package.json index f20bb96..d650270 100644 --- a/apps/electron/package.json +++ b/apps/electron/package.json @@ -9,6 +9,7 @@ "main": "dist/main/main.js", "scripts": { "clean": "rm -rf dist release", + "lint": "eslint src", "build:web": "cd ../.. && bun run build:web", "build": "tsc -p tsconfig.json && esbuild src/preload/preload.ts --bundle --platform=node --format=cjs --external:electron --outfile=dist/preload/preload.cjs", "dev:raw": "cd ../.. && bun run build:web && cd apps/electron && bun run build && electron . --verbose", From 7a7ab3ad2e6ab1d1600e54db468d243b25bb0075 Mon Sep 17 00:00:00 2001 From: Alois Date: Wed, 3 Jun 2026 15:25:30 +0200 Subject: [PATCH 04/11] (fix): dependency issue --- bun.lock | 3 +-- packages/tauth/package.json | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bun.lock b/bun.lock index a1d9171..2e3a763 100644 --- a/bun.lock +++ b/bun.lock @@ -103,7 +103,6 @@ "dependencies": { "@livekit/components-react": "^2.9.20", "@tanstack/react-router": "^1.169.1", - "@tanstack/react-virtual": "^3.13.24", "@tauri-apps/api": "^2", "@tensamin/crypto": "workspace:*", "@tensamin/shared": "workspace:*", @@ -213,13 +212,13 @@ "@tensamin/crypto": "workspace:*", "@tensamin/shared": "workspace:*", "@tensamin/storage": "workspace:*", + "@tensamin/tauri": "workspace:*", "@tensamin/ttp": "workspace:*", "@tensamin/ui": "*", "@tensamin/user": "workspace:*", "lucide-react": "^1.8.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "zod": "^4.3.6", }, }, "packages/ttp": { diff --git a/packages/tauth/package.json b/packages/tauth/package.json index 2dd2329..2e9adf2 100644 --- a/packages/tauth/package.json +++ b/packages/tauth/package.json @@ -17,6 +17,7 @@ "@tensamin/crypto": "workspace:*", "@tensamin/shared": "workspace:*", "@tensamin/storage": "workspace:*", + "@tensamin/tauri": "workspace:*", "@tensamin/ttp": "workspace:*", "@tensamin/ui": "*", "@tensamin/user": "workspace:*", From f4088691c5dc7d407d19f6681801d62b047c1fd9 Mon Sep 17 00:00:00 2001 From: Alois Date: Wed, 3 Jun 2026 16:14:39 +0200 Subject: [PATCH 05/11] (feat): improve profile popup in the navbar, add shared code to that popup --- apps/web/src/components/modals/profile.tsx | 103 ++++++++++++++++++--- apps/web/src/components/navbar.tsx | 4 +- packages/shared/package.json | 1 + packages/shared/src/code.ts | 20 ++++ 4 files changed, 114 insertions(+), 14 deletions(-) create mode 100644 packages/shared/src/code.ts diff --git a/apps/web/src/components/modals/profile.tsx b/apps/web/src/components/modals/profile.tsx index 6a31e36..c46e4ef 100644 --- a/apps/web/src/components/modals/profile.tsx +++ b/apps/web/src/components/modals/profile.tsx @@ -1,8 +1,62 @@ import type { User } from "@tensamin/user/context"; -import { Avatar, AvatarFallback, AvatarImage } from "@tensamin/ui"; +import { + Avatar, + AvatarFallback, + AvatarImage, + Button, + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@tensamin/ui"; +import { toLossySixDigitCode } from "@tensamin/shared/code"; import Text from "@tensamin/markdown/text"; +import { ChevronDown, ChevronUp, Info } from "lucide-react"; +import { useEffect, useState } from "react"; +import { useCrypto } from "@tensamin/crypto/context"; +import { useStorage } from "@tensamin/storage/context"; +import { useUser } from "@tensamin/user/context"; export default function Profile({ user }: { user: User }) { + const [showAdvancedInformation, setShowAdvancedInformation] = useState(false); + const [sharedSecret, setSharedSecret] = useState(""); + + const { getSharedSecret } = useCrypto(); + const { load } = useStorage(); + const { get } = useUser(); + + useEffect(() => { + let active = true; + + void (async () => { + try { + const ownId = await load("user_id"); + const privateKey = await load("private_key"); + const ownData = await get(ownId); + const secret = await getSharedSecret( + privateKey, + ownData.public_key, + user.public_key, + ); + + if (active) { + setSharedSecret(secret); + } + } catch { + if (active) { + setSharedSecret(""); + } + } + })(); + + return () => { + active = false; + }; + }, [get, getSharedSecret, load, user.public_key]); + + const sharedSecretCode = sharedSecret + ? toLossySixDigitCode(sharedSecret) + : "------"; + return (
@@ -18,17 +72,42 @@ export default function Profile({ user }: { user: User }) {
-
-

- iota: {user.iota_id} -

-

- user: {user.user_id} -

-

- pub key: {user.public_key} -

-
+ + {showAdvancedInformation && ( +
+

+ Shared Code: {sharedSecretCode}{" "} + + } /> + + You can compare this code with the conversation partner to + validate that this chat is E2EE + + +

+

+ Iota ID: {user.iota_id} +

+

+ User ID: {user.user_id} +

+

+ Public Key: {user.public_key} +

+
+ )} ); } diff --git a/apps/web/src/components/navbar.tsx b/apps/web/src/components/navbar.tsx index 1c48c6c..cb83cb6 100644 --- a/apps/web/src/components/navbar.tsx +++ b/apps/web/src/components/navbar.tsx @@ -74,7 +74,7 @@ export default function Navbar({ forMobile }: { forMobile: boolean }) { userId={id} component={(user) => isMobile ? ( -

{user?.display}

+

{user?.display}

) : ( -

{user?.display}

+

{user?.display}

} /> diff --git a/packages/shared/package.json b/packages/shared/package.json index 3d06116..26c0d9f 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -4,6 +4,7 @@ "version": "0.0.0", "type": "module", "exports": { + "./code": "./src/code.ts", "./data": "./src/data.ts", "./desktopMedia": "./src/desktopMedia.tsx", "./log": "./src/log.tsx", diff --git a/packages/shared/src/code.ts b/packages/shared/src/code.ts new file mode 100644 index 0000000..1f1d10e --- /dev/null +++ b/packages/shared/src/code.ts @@ -0,0 +1,20 @@ +export function toLossySixDigitCode(input: string): string { + let firstHash = 0xdeadbeef; + let secondHash = 0x41c6ce57; + + for (let index = 0; index < input.length; index += 1) { + const character = input.charCodeAt(index); + + firstHash = Math.imul(firstHash ^ character, 2654435761); + secondHash = Math.imul(secondHash ^ character, 1597334677); + } + + firstHash = Math.imul(firstHash ^ (firstHash >>> 16), 2246822507); + firstHash ^= Math.imul(secondHash ^ (secondHash >>> 13), 3266489909); + secondHash = Math.imul(secondHash ^ (secondHash >>> 16), 2246822507); + secondHash ^= Math.imul(firstHash ^ (firstHash >>> 13), 3266489909); + + const hash = 4294967296 * (2097151 & secondHash) + (firstHash >>> 0); + + return String(hash % 1_000_000).padStart(6, "0"); +} From 18e507b43973e8b4b37b88f560fc8bbf5e5fe782 Mon Sep 17 00:00:00 2001 From: Alois Date: Thu, 4 Jun 2026 22:29:20 +0200 Subject: [PATCH 06/11] (feat): use Inter instead of the system font for ui --- apps/web/src/index.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/web/src/index.css b/apps/web/src/index.css index 8175c9c..925d401 100644 --- a/apps/web/src/index.css +++ b/apps/web/src/index.css @@ -7,6 +7,8 @@ @source "../../../packages/**/src/**/*.{ts,tsx}"; @theme { + --font-sans: "Inter Variable", sans-serif; + --animate-wiggle: wiggle 0.5s ease-in-out infinite; @keyframes wiggle { @@ -28,6 +30,10 @@ body, overflow: hidden; } +body { + font-family: "Inter Variable", sans-serif; +} + #root { min-height: 0; } From 4f82b9c85bd1e617cd819f1c727ad88a8cc92481 Mon Sep 17 00:00:00 2001 From: Alois Date: Mon, 8 Jun 2026 11:12:44 +0200 Subject: [PATCH 07/11] (feat): add call popout --- apps/web/src/index.tsx | 2 + bun.lock | 4 +- package.json | 2 +- packages/call/package.json | 3 +- packages/call/src/components/popout.tsx | 485 ++++++++++++++++++++++++ packages/call/src/store.tsx | 5 + 6 files changed, 497 insertions(+), 4 deletions(-) create mode 100644 packages/call/src/components/popout.tsx diff --git a/apps/web/src/index.tsx b/apps/web/src/index.tsx index 6487ba1..a26c462 100644 --- a/apps/web/src/index.tsx +++ b/apps/web/src/index.tsx @@ -21,6 +21,7 @@ import ChatScreen from "@tensamin/chat/screen"; import CallScreen from "@tensamin/call/screen"; import Login from "@/routes/screens/login"; +import CallPopout from "@tensamin/call/popout"; import ChatContext from "@tensamin/chat/context"; import { useInitializeCall } from "@tensamin/call/store"; import { Provider as TTPProvider } from "@tensamin/ttp"; @@ -147,6 +148,7 @@ function AppShell() { + diff --git a/bun.lock b/bun.lock index 2e3a763..92a897c 100644 --- a/bun.lock +++ b/bun.lock @@ -254,7 +254,7 @@ }, }, "overrides": { - "@tensamin/ttp-core": "https://git.methanium.net/tensamin/ttp/archive/0.0.19.tar.gz", + "@tensamin/ttp-core": "https://git.methanium.net/tensamin/ttp/archive/0.0.20.tar.gz", "@tensamin/ui": "https://git.methanium.net/tensamin/ui/archive/0.0.36.tar.gz", }, "packages": { @@ -740,7 +740,7 @@ "@tensamin/ttp": ["@tensamin/ttp@workspace:packages/ttp"], - "@tensamin/ttp-core": ["@tensamin/ttp-core@https://git.methanium.net/tensamin/ttp/archive/0.0.19.tar.gz", { "dependencies": { "@eslint/js": "^10.0.1", "@typescript-eslint/parser": "^8.59.1", "@webtransport-bun/webtransport": "^0.3.0", "globals": "^17.5.0", "typescript": "^6.0.3", "typescript-eslint": "^8.59.1", "zod": "^4.4.1" } }, "sha512-La9VqXqJFtzzsRQotXVp+3Vr6u8kj4mQ4wTlSIMRDxKFBnbCvtZyB3V/f8HiIlf7FlZ0Xg0suUUpnamvtcvs9w=="], + "@tensamin/ttp-core": ["@tensamin/ttp-core@https://git.methanium.net/tensamin/ttp/archive/0.0.20.tar.gz", { "dependencies": { "@eslint/js": "^10.0.1", "@typescript-eslint/parser": "^8.59.1", "@webtransport-bun/webtransport": "^0.3.0", "globals": "^17.5.0", "typescript": "^6.0.3", "typescript-eslint": "^8.59.1", "zod": "^4.4.1" } }, "sha512-08pYuWTivuDWNiBoSSY2P8rIZz4FvuvLQZMjaQnf7KE/Pz9bGO69XHFcCHQXIz1SWsT2TyjochT0sPEGAta15g=="], "@tensamin/ui": ["@tensamin/ui@https://git.methanium.net/tensamin/ui/archive/0.0.36.tar.gz", { "dependencies": { "@base-ui/react": "^1.3.0", "@fontsource-variable/inter": "^5.2.6", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "date-fns": "^4.1.0", "embla-carousel-react": "^8.6.0", "input-otp": "^1.4.2", "lucide-react": "^1.8.0", "next-themes": "^0.4.6", "react-day-picker": "^9.14.0", "react-resizable-panels": "^4.10.0", "recharts": "3.8.0", "shadcn": "^3.5.0", "sonner": "^2.0.7", "tailwind-merge": "^3.5.0", "tw-animate-css": "^1.3.0", "vaul": "^1.1.2" }, "peerDependencies": { "react": "^19.2.0", "react-dom": "^19.2.0" } }, "sha512-5zql8LtBKVn7WuQDCIdLbthKvLEyxjWShAceXCYbk+kwO41VVILhS1EWuDvjgvv2BBdyuxoVWvdblPIW4BcdSQ=="], diff --git a/package.json b/package.json index 1c2b52d..b89f348 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ }, "overrides": { "@tensamin/ui": "https://git.methanium.net/tensamin/ui/archive/0.0.36.tar.gz", - "@tensamin/ttp-core": "https://git.methanium.net/tensamin/ttp/archive/0.0.19.tar.gz" + "@tensamin/ttp-core": "https://git.methanium.net/tensamin/ttp/archive/0.0.20.tar.gz" }, "dependencies": { "@tensamin/ttp-core": "*", diff --git a/packages/call/package.json b/packages/call/package.json index 080dd15..d3b5827 100644 --- a/packages/call/package.json +++ b/packages/call/package.json @@ -7,7 +7,8 @@ "./store": "./src/store.tsx", "./screen": "./src/screen.tsx", "./utils": "./src/utils.ts", - "./sidebarBox": "./src/components/sidebarBox.tsx" + "./sidebarBox": "./src/components/sidebarBox.tsx", + "./popout": "./src/components/popout.tsx" }, "scripts": { "format": "bunx prettier --write .", diff --git a/packages/call/src/components/popout.tsx b/packages/call/src/components/popout.tsx new file mode 100644 index 0000000..1327c9c --- /dev/null +++ b/packages/call/src/components/popout.tsx @@ -0,0 +1,485 @@ +import { Participant, Track } from "livekit-client"; +import VideoViewer from "./videoViewer"; +import { useLocation } from "@tanstack/react-router"; +import { getRoom, stopWatchingStream, useCall } from "../store"; +import { useState, useRef, useEffect, useCallback } from "react"; +import { Button, cn } from "@tensamin/ui"; +import { ScreenShareOff } from "lucide-react"; + +function getTrackPublicationBySource( + participant: Participant | undefined, + source: Track.Source, +) { + if (!participant) { + return undefined; + } + + return [...participant.trackPublications.values()].find( + (publication) => publication.source === source, + ); +} + +type Positions = "top-left" | "top-right" | "bottom-left" | "bottom-right"; +type ResizeEdge = + | "top" + | "right" + | "bottom" + | "left" + | "top-left" + | "top-right" + | "bottom-right" + | "bottom-left"; +type Point = { + x: number; + y: number; +}; + +const MARGIN = 40; +const MIN_SIZE = 240; +const MAX_SIZE = 1000; +const ASPECT_RATIO = 9 / 16; + +export function Popout({ participant }: { participant: Participant }) { + const screenSharePublication = getTrackPublicationBySource( + participant, + Track.Source.ScreenShare, + ); + + const popoutRef = useRef(null); + const coordsRef = useRef({ x: MARGIN, y: MARGIN }); + const dragOffsetRef = useRef({ x: 0, y: 0 }); + const sizeRef = useRef(400); + const hideOverlayTimeoutRef = useRef | null>( + null, + ); + const resizeRef = useRef<{ + size: number; + clientX: number; + clientY: number; + edge: ResizeEdge; + }>({ size: 400, clientX: 0, clientY: 0, edge: "right" }); + + const [size, setSize] = useState(400); + const [isDragging, setIsDragging] = useState(false); + const [isResizing, setIsResizing] = useState(false); + const [isOverlayVisible, setIsOverlayVisible] = useState(false); + const [position, setPosition] = useState("top-left"); + const [coords, setCoords] = useState({ x: MARGIN, y: MARGIN }); + + const setCoordsSafe = (next: Point) => { + coordsRef.current = next; + setCoords(next); + }; + + const setSizeSafe = (next: number) => { + sizeRef.current = next; + setSize(next); + }; + + const getMaxSize = useCallback(() => { + const maxWidth = window.innerWidth - MARGIN * 2; + const maxHeightWidth = (window.innerHeight - MARGIN * 2) / ASPECT_RATIO; + + return Math.max(MIN_SIZE, Math.min(MAX_SIZE, maxWidth, maxHeightWidth)); + }, []); + + const clampSize = useCallback( + (nextSize: number) => { + return Math.min(getMaxSize(), Math.max(MIN_SIZE, nextSize)); + }, + [getMaxSize], + ); + + const getPositionFromPoint = ( + clientX: number, + clientY: number, + ): Positions => { + const height = window.innerHeight / 2 > clientY ? "top" : "bottom"; + const width = window.innerWidth / 2 > clientX ? "left" : "right"; + + return `${height}-${width}` as Positions; + }; + + const getCoordsForPosition = useCallback( + (nextPosition: Positions, nextSize = size): Point => { + const width = nextSize; + const height = nextSize * ASPECT_RATIO; + + return { + x: nextPosition.endsWith("right") + ? window.innerWidth - width - MARGIN + : MARGIN, + y: nextPosition.startsWith("bottom") + ? window.innerHeight - height - MARGIN + : MARGIN, + }; + }, + [size], + ); + + useEffect(() => { + if (isDragging) return; + + // eslint-disable-next-line + setCoordsSafe(getCoordsForPosition(position)); + }, [position, size, isDragging, getCoordsForPosition]); + + useEffect(() => { + const handleResize = () => { + if (isDragging) return; + + const nextSize = clampSize(size); + + setSizeSafe(nextSize); + setCoordsSafe(getCoordsForPosition(position, nextSize)); + }; + + window.addEventListener("resize", handleResize); + return () => window.removeEventListener("resize", handleResize); + }, [position, size, isDragging, getCoordsForPosition, clampSize]); + + useEffect(() => { + return () => { + if (hideOverlayTimeoutRef.current) { + clearTimeout(hideOverlayTimeoutRef.current); + } + }; + }, []); + + const scheduleOverlayHide = () => { + if (hideOverlayTimeoutRef.current) { + clearTimeout(hideOverlayTimeoutRef.current); + } + + hideOverlayTimeoutRef.current = setTimeout(() => { + setIsOverlayVisible(false); + hideOverlayTimeoutRef.current = null; + }, 3000); + }; + + const showOverlay = () => { + setIsOverlayVisible(true); + scheduleOverlayHide(); + }; + + const hideOverlay = () => { + if (hideOverlayTimeoutRef.current) { + clearTimeout(hideOverlayTimeoutRef.current); + hideOverlayTimeoutRef.current = null; + } + + setIsOverlayVisible(false); + }; + + const getCornerResizeDelta = ( + e: React.PointerEvent, + horizontalDelta: number, + verticalDelta: number, + ) => { + return Math.abs(horizontalDelta) > Math.abs(verticalDelta) + ? horizontalDelta + : verticalDelta; + }; + + const getResizeDelta = (e: React.PointerEvent, edge: ResizeEdge) => { + switch (edge) { + case "left": + return resizeRef.current.clientX - e.clientX; + case "right": + return e.clientX - resizeRef.current.clientX; + case "top": + return (resizeRef.current.clientY - e.clientY) / ASPECT_RATIO; + case "bottom": + return (e.clientY - resizeRef.current.clientY) / ASPECT_RATIO; + case "top-left": + return getCornerResizeDelta( + e, + resizeRef.current.clientX - e.clientX, + (resizeRef.current.clientY - e.clientY) / ASPECT_RATIO, + ); + case "top-right": + return getCornerResizeDelta( + e, + e.clientX - resizeRef.current.clientX, + (resizeRef.current.clientY - e.clientY) / ASPECT_RATIO, + ); + case "bottom-right": + return getCornerResizeDelta( + e, + e.clientX - resizeRef.current.clientX, + (e.clientY - resizeRef.current.clientY) / ASPECT_RATIO, + ); + case "bottom-left": + return getCornerResizeDelta( + e, + resizeRef.current.clientX - e.clientX, + (e.clientY - resizeRef.current.clientY) / ASPECT_RATIO, + ); + } + }; + + const startResize = ( + e: React.PointerEvent, + edge: ResizeEdge, + ) => { + if (e.button !== 0) return; + + e.stopPropagation(); + e.currentTarget.setPointerCapture(e.pointerId); + + resizeRef.current = { + size, + clientX: e.clientX, + clientY: e.clientY, + edge, + }; + + setIsResizing(true); + }; + + const resizePopout = (e: React.PointerEvent) => { + if (!isResizing) return; + + const nextSize = clampSize( + resizeRef.current.size + getResizeDelta(e, resizeRef.current.edge), + ); + + setSizeSafe(nextSize); + setCoordsSafe(getCoordsForPosition(position, nextSize)); + }; + + const stopResize = (e: React.PointerEvent) => { + if (!isResizing) return; + + e.stopPropagation(); + setIsResizing(false); + setCoordsSafe(getCoordsForPosition(position, sizeRef.current)); + }; + + const resizeEdgeClassName = "absolute z-10 bg-transparent"; + const resizeCornerClassName = "absolute z-20 h-4 w-4 bg-transparent"; + + if (!screenSharePublication) { + return null; + } + + return ( +
{ + if (e.button !== 0) return; + if (isResizing) return; + + e.currentTarget.setPointerCapture(e.pointerId); + + const current = coordsRef.current; + + dragOffsetRef.current = { + x: e.clientX - current.x, + y: e.clientY - current.y, + }; + + setIsDragging(true); + }} + onPointerMove={(e) => { + if (!isDragging) return; + + setCoordsSafe({ + x: e.clientX - dragOffsetRef.current.x, + y: e.clientY - dragOffsetRef.current.y, + }); + }} + onPointerUp={(e) => { + if (!isDragging) return; + + const nextPosition = getPositionFromPoint(e.clientX, e.clientY); + + setPosition(nextPosition); + setIsDragging(false); + + requestAnimationFrame(() => { + setCoordsSafe(getCoordsForPosition(nextPosition)); + }); + }} + onPointerCancel={() => { + setIsDragging(false); + + requestAnimationFrame(() => { + setCoordsSafe(getCoordsForPosition(position)); + }); + }} + onMouseEnter={showOverlay} + onMouseMove={showOverlay} + onMouseLeave={hideOverlay} + className={cn( + "fixed left-0 top-0 aspect-video z-200 rounded-lg border-2 border-muted-foreground bg-black", + "select-none touch-none", + isDragging ? "cursor-grabbing" : "cursor-grab", + )} + style={{ + width: size, + transform: `translate3d(${coords.x}px, ${coords.y}px, 0)`, + transition: + isDragging || isResizing + ? "none" + : "transform 420ms cubic-bezier(0.34, 1.56, 0.64, 1)", + willChange: "transform", + }} + > + +
+
+
+
+
+
+ +
+
+
startResize(e, "top")} + onPointerMove={resizePopout} + onPointerUp={stopResize} + onPointerCancel={stopResize} + /> +
startResize(e, "right")} + onPointerMove={resizePopout} + onPointerUp={stopResize} + onPointerCancel={stopResize} + /> +
startResize(e, "bottom")} + onPointerMove={resizePopout} + onPointerUp={stopResize} + onPointerCancel={stopResize} + /> +
startResize(e, "left")} + onPointerMove={resizePopout} + onPointerUp={stopResize} + onPointerCancel={stopResize} + /> +
startResize(e, "top-left")} + onPointerMove={resizePopout} + onPointerUp={stopResize} + onPointerCancel={stopResize} + /> +
startResize(e, "top-right")} + onPointerMove={resizePopout} + onPointerUp={stopResize} + onPointerCancel={stopResize} + /> +
startResize(e, "bottom-right")} + onPointerMove={resizePopout} + onPointerUp={stopResize} + onPointerCancel={stopResize} + /> +
startResize(e, "bottom-left")} + onPointerMove={resizePopout} + onPointerUp={stopResize} + onPointerCancel={stopResize} + /> +
+ ); +} + +export default function Wrapper() { + const room = getRoom(); + const { pathname } = useLocation(); + const state = useCall((state) => state.state); + const watchedStreamParticipantIds = useCall( + (state) => state.watchedStreamParticipantIds, + ); + const lastFocusedParticipantId = useCall( + (state) => state.lastFocusedParticipantId, + ); + const participant = room.getParticipantByIdentity( + String(lastFocusedParticipantId), + ); + + if (!participant || !lastFocusedParticipantId) { + return null; + } + + const active = + !pathname.startsWith("/call") && + state === "open" && + watchedStreamParticipantIds.includes(Number(participant.identity ?? 0)); + + return active && ; +} diff --git a/packages/call/src/store.tsx b/packages/call/src/store.tsx index 7d3e609..efa3802 100644 --- a/packages/call/src/store.tsx +++ b/packages/call/src/store.tsx @@ -109,6 +109,7 @@ type CallStore = { layoutVersion: number; screenRef: React.RefObject | null; runtime: Runtime | null; + lastFocusedParticipantId: number | null; }; let _keyProvider: ExternalE2EEKeyProvider | null = null; @@ -695,6 +696,7 @@ export function focusParticipant( ) { useCall.setState({ focusedParticipantId: participantId, + lastFocusedParticipantId: participantId, focusedParticipantType: type, view: "focused", }); @@ -855,6 +857,7 @@ export async function disconnect() { watchedStreamParticipantIds: [], pendingWatchedParticipantIds: [], activeScreenShareParticipantIds: [], + lastFocusedParticipantId: null, }); getRoom().remoteParticipants.forEach((participant) => { @@ -1016,6 +1019,7 @@ export function resetCallState() { watchedStreamParticipantIds: [], pendingWatchedParticipantIds: [], activeScreenShareParticipantIds: [], + lastFocusedParticipantId: null, }); syncParticipantState(); @@ -1076,6 +1080,7 @@ export const useCall = create(() => ({ layoutVersion: 0, screenRef: null, runtime: null, + lastFocusedParticipantId: null, })); // Register app-level call listeners and wire React dependencies into the store. From 28a3d72fad91de3c4f29ae12e853e8905f244c3b Mon Sep 17 00:00:00 2001 From: Alois Date: Mon, 8 Jun 2026 13:41:36 +0200 Subject: [PATCH 08/11] (feat): remove homepage dev buttons (fix): some call related bugs (qol): update todo --- apps/web/src/components/navbar.tsx | 29 +++--- apps/web/src/routes/app/home.tsx | 11 -- packages/call/src/components/actions.tsx | 7 +- packages/call/src/components/top.tsx | 2 +- packages/call/src/screen.tsx | 122 ++++++++++++++++++++++- packages/call/src/store.tsx | 1 + packages/call/src/views/main/layout.tsx | 31 +++++- packages/call/todo.md | 1 + 8 files changed, 175 insertions(+), 29 deletions(-) diff --git a/apps/web/src/components/navbar.tsx b/apps/web/src/components/navbar.tsx index cb83cb6..7550b28 100644 --- a/apps/web/src/components/navbar.tsx +++ b/apps/web/src/components/navbar.tsx @@ -33,8 +33,6 @@ export default function Navbar({ forMobile }: { forMobile: boolean }) { const isMobile = useIsMobile(); - const [selectOpen, setSelectOpen] = useState(false); - const [userInfoOpen, setUserInfoOpen] = useState(false); return ( @@ -86,7 +84,9 @@ export default function Navbar({ forMobile }: { forMobile: boolean }) { textDecorationLine: "none", }} > -

{user?.display}

+

+ {user?.display} +

} /> @@ -131,15 +131,20 @@ export default function Navbar({ forMobile }: { forMobile: boolean }) { ) : ( <> - - + ( + + )} + /> + {currentCalls.map((call) => ( - -
); } diff --git a/packages/call/src/components/actions.tsx b/packages/call/src/components/actions.tsx index 0aa7220..ad990c3 100644 --- a/packages/call/src/components/actions.tsx +++ b/packages/call/src/components/actions.tsx @@ -53,10 +53,13 @@ export default function Actions() { }, [screenRef]); const toggleFullscreen = async () => { + const screen = screenRef?.current; + const fullscreenDocument = screen?.ownerDocument ?? document; + if (callIsFullscreen) { - await document.exitFullscreen().catch(() => undefined); + await fullscreenDocument.exitFullscreen().catch(() => undefined); } else { - await screenRef?.current?.requestFullscreen().catch(() => undefined); + await screen?.requestFullscreen().catch(() => undefined); } triggerCallLayoutCalculation(); diff --git a/packages/call/src/components/top.tsx b/packages/call/src/components/top.tsx index 610493a..4da11db 100644 --- a/packages/call/src/components/top.tsx +++ b/packages/call/src/components/top.tsx @@ -75,7 +75,7 @@ export default function TopBar() { - + {user.display.slice(0, 2).toUpperCase()} diff --git a/packages/call/src/screen.tsx b/packages/call/src/screen.tsx index 49c6a11..433f5ec 100644 --- a/packages/call/src/screen.tsx +++ b/packages/call/src/screen.tsx @@ -1,11 +1,18 @@ -import { useCall } from "./store"; +import { useEffect, useRef, useState } from "react"; +import { createPortal } from "react-dom"; +import { + setCallIsFullscreen, + setCallIsPopout, + triggerCallLayoutCalculation, + useCall, +} from "./store"; import MainLayout from "./views/main/layout"; import MainGrid from "./views/main/grid"; import MainFocused from "./views/main/focused"; import Preview from "./views/preview"; -export default function Screen() { +function ScreenContent() { const view = useCall((state) => state.view); return view === "preview" ? ( @@ -14,3 +21,114 @@ export default function Screen() { {view === "grid" ? : } ); } + +// Popout Window +function copyDocumentStyles(targetDocument: Document) { + for (const node of document.querySelectorAll( + 'link[rel="stylesheet"], style', + )) { + targetDocument.head.appendChild(node.cloneNode(true)); + } +} + +function syncDocumentClasses(targetDocument: Document) { + targetDocument.documentElement.className = document.documentElement.className; + targetDocument.body.className = document.body.className; +} + +function PopoutScreen() { + const closeCheckRef = useRef | null>( + null, + ); + const [container, setContainer] = useState(null); + + useEffect(() => { + const popoutWindow = window.open( + "", + "tensamin-call-popout", + "popup,width=1280,height=720", + ); + + if (!popoutWindow) { + setCallIsFullscreen(false); + setCallIsPopout(false); + return; + } + + let isMounted = true; + + popoutWindow.document.title = document.title; + popoutWindow.document.body.innerHTML = ""; + popoutWindow.document.body.style.margin = "0"; + popoutWindow.document.documentElement.style.height = "100%"; + popoutWindow.document.body.style.height = "100%"; + + copyDocumentStyles(popoutWindow.document); + syncDocumentClasses(popoutWindow.document); + + const containerElement = popoutWindow.document.createElement("div"); + containerElement.style.width = "100%"; + containerElement.style.height = "100%"; + popoutWindow.document.body.appendChild(containerElement); + queueMicrotask(() => { + if (isMounted) { + setContainer(containerElement); + } + }); + + const closePopout = () => { + setCallIsFullscreen(false); + setCallIsPopout(false); + }; + const syncLayout = () => triggerCallLayoutCalculation(); + + popoutWindow.addEventListener("beforeunload", closePopout); + popoutWindow.addEventListener("resize", syncLayout); + popoutWindow.focus(); + + closeCheckRef.current = window.setInterval(() => { + if (popoutWindow.closed) { + closePopout(); + } + }, 500); + + triggerCallLayoutCalculation(); + + return () => { + isMounted = false; + popoutWindow.removeEventListener("beforeunload", closePopout); + popoutWindow.removeEventListener("resize", syncLayout); + + if (closeCheckRef.current) { + window.clearInterval(closeCheckRef.current); + closeCheckRef.current = null; + } + + if (!popoutWindow.closed) { + popoutWindow.close(); + } + + setCallIsFullscreen(false); + triggerCallLayoutCalculation(); + }; + }, []); + + if (!container) { + return null; + } + + return createPortal(, container); +} + +export default function Screen() { + const callIsPopout = useCall((state) => state.callIsPopout); + + return callIsPopout ? ( +
+

The window is popped out.

+ +
+ ) : ( + + ); +} diff --git a/packages/call/src/store.tsx b/packages/call/src/store.tsx index efa3802..a5b4b83 100644 --- a/packages/call/src/store.tsx +++ b/packages/call/src/store.tsx @@ -857,6 +857,7 @@ export async function disconnect() { watchedStreamParticipantIds: [], pendingWatchedParticipantIds: [], activeScreenShareParticipantIds: [], + callIsFullscreen: false, lastFocusedParticipantId: null, }); diff --git a/packages/call/src/views/main/layout.tsx b/packages/call/src/views/main/layout.tsx index b3710da..f20e233 100644 --- a/packages/call/src/views/main/layout.tsx +++ b/packages/call/src/views/main/layout.tsx @@ -1,7 +1,12 @@ import { useEffect, useLayoutEffect, useRef, useState } from "react"; import Actions from "../../components/actions"; import TopBar from "../../components/top"; -import { setScreenRef, useCall } from "../../store"; +import { + setCallIsFullscreen, + setScreenRef, + triggerCallLayoutCalculation, + useCall, +} from "../../store"; export default function Layout({ children }: { children: React.ReactNode }) { const screenRef = useRef(null); @@ -16,6 +21,30 @@ export default function Layout({ children }: { children: React.ReactNode }) { useEffect(() => { setScreenRef(screenRef); + + const screen = screenRef.current; + const fullscreenDocument = screen?.ownerDocument; + + if (!screen || !fullscreenDocument) { + return; + } + + const handleFullscreenChange = () => { + setCallIsFullscreen(fullscreenDocument.fullscreenElement === screen); + triggerCallLayoutCalculation(); + }; + + fullscreenDocument.addEventListener( + "fullscreenchange", + handleFullscreenChange, + ); + + return () => { + fullscreenDocument.removeEventListener( + "fullscreenchange", + handleFullscreenChange, + ); + }; }, []); const usersInFocusedViewHidden = useCall( diff --git a/packages/call/todo.md b/packages/call/todo.md index 2d8db1b..f44c6fd 100644 --- a/packages/call/todo.md +++ b/packages/call/todo.md @@ -11,3 +11,4 @@ - Context menus - Popout Window - Add quality selection +- Good preview page From 9edd5484666a96b318f4f19c02f7beb12018fee0 Mon Sep 17 00:00:00 2001 From: Alois Date: Mon, 8 Jun 2026 13:43:28 +0200 Subject: [PATCH 09/11] (fix): two small errors --- packages/call/src/components/popout.tsx | 5 ----- packages/call/src/screen.tsx | 4 +--- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/packages/call/src/components/popout.tsx b/packages/call/src/components/popout.tsx index 1327c9c..20611ca 100644 --- a/packages/call/src/components/popout.tsx +++ b/packages/call/src/components/popout.tsx @@ -172,7 +172,6 @@ export function Popout({ participant }: { participant: Participant }) { }; const getCornerResizeDelta = ( - e: React.PointerEvent, horizontalDelta: number, verticalDelta: number, ) => { @@ -193,25 +192,21 @@ export function Popout({ participant }: { participant: Participant }) { return (e.clientY - resizeRef.current.clientY) / ASPECT_RATIO; case "top-left": return getCornerResizeDelta( - e, resizeRef.current.clientX - e.clientX, (resizeRef.current.clientY - e.clientY) / ASPECT_RATIO, ); case "top-right": return getCornerResizeDelta( - e, e.clientX - resizeRef.current.clientX, (resizeRef.current.clientY - e.clientY) / ASPECT_RATIO, ); case "bottom-right": return getCornerResizeDelta( - e, e.clientX - resizeRef.current.clientX, (e.clientY - resizeRef.current.clientY) / ASPECT_RATIO, ); case "bottom-left": return getCornerResizeDelta( - e, resizeRef.current.clientX - e.clientX, (e.clientY - resizeRef.current.clientY) / ASPECT_RATIO, ); diff --git a/packages/call/src/screen.tsx b/packages/call/src/screen.tsx index 433f5ec..975360e 100644 --- a/packages/call/src/screen.tsx +++ b/packages/call/src/screen.tsx @@ -37,9 +37,7 @@ function syncDocumentClasses(targetDocument: Document) { } function PopoutScreen() { - const closeCheckRef = useRef | null>( - null, - ); + const closeCheckRef = useRef(null); const [container, setContainer] = useState(null); useEffect(() => { From 4068669704ec69445f6e73c7ce9ca9de5b9955c8 Mon Sep 17 00:00:00 2001 From: Alois Date: Mon, 8 Jun 2026 15:40:04 +0200 Subject: [PATCH 10/11] (feat): add context menu to call users (feat): ui changes to invite popup & call ui in general (feat): make eslint less aggressive (fix): stop watching button on own screenshares (qol): update todo --- eslint.config.ts | 1 + packages/call/src/components/actions.tsx | 9 +- packages/call/src/components/invitePopup.tsx | 16 +-- packages/call/src/components/modals/base.tsx | 111 ++++++++++++++++-- .../src/components/modals/contextMenu.tsx | 95 +++++++++++++++ packages/call/src/components/popout.tsx | 1 - .../call/src/components/screenshareDialog.tsx | 1 - packages/call/todo.md | 7 +- packages/tauth/src/context.tsx | 1 - 9 files changed, 214 insertions(+), 28 deletions(-) create mode 100644 packages/call/src/components/modals/contextMenu.tsx diff --git a/eslint.config.ts b/eslint.config.ts index 19d24ae..16951eb 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -31,6 +31,7 @@ export default [ }, rules: { ...reactHooks.configs.recommended.rules, + "react-hooks/set-state-in-effect": "off", }, }, ]; diff --git a/packages/call/src/components/actions.tsx b/packages/call/src/components/actions.tsx index ad990c3..a0d3a77 100644 --- a/packages/call/src/components/actions.tsx +++ b/packages/call/src/components/actions.tsx @@ -28,6 +28,7 @@ import { SquareArrowOutDownLeft, SquareArrowOutUpRight, } from "lucide-react"; +import { useStorage } from "@tensamin/storage/context"; export default function Actions() { const sharedClasses = "w-14 h-10"; @@ -42,6 +43,12 @@ export default function Actions() { focusedParticipantId != null && watchedStreamParticipantIds.includes(focusedParticipantId); + const { load } = useStorage(); + const [ownId, setOwnId] = useState(0); + useEffect(() => { + load("user_id").then(setOwnId); + }, [load]); + // Fullscreen stuff const callIsPopout = useCall((state) => state.callIsPopout); const callIsFullscreen = useCall((state) => state.callIsFullscreen); @@ -122,7 +129,7 @@ export default function Actions() { iconSize={sharedIconSize} tooltip="Invite" /> - {isWatchingFocusedStream ? ( + {isWatchingFocusedStream && focusedParticipantId !== ownId ? (

{user.display}

+ -
diff --git a/packages/call/src/components/modals/base.tsx b/packages/call/src/components/modals/base.tsx index 47e47cf..936765b 100644 --- a/packages/call/src/components/modals/base.tsx +++ b/packages/call/src/components/modals/base.tsx @@ -3,9 +3,7 @@ import { AvatarFallback, AvatarImage, Button, - ContextMenu, - ContextMenuContent, - ContextMenuItem, + ContextMenu as UIContextMenu, ContextMenuTrigger, } from "@tensamin/ui"; import { @@ -21,6 +19,8 @@ import { useUser, type User } from "@tensamin/user/context"; import { useIsSpeaking } from "../../speakingState"; import VideoViewer from "../videoViewer"; import { HeadphoneOff, MicOff, Monitor, Plus, Shield } from "lucide-react"; +import ContextMenu from "./contextMenu"; +import { useStorage } from "@tensamin/storage/context"; function getTrackPublicationBySource( participant: Participant | undefined, @@ -43,6 +43,69 @@ function TransparentButton({ children }: { children: React.ReactNode }) { ); } +function getAverageImageColor(src: string) { + return new Promise((resolve) => { + const image = new Image(); + + image.crossOrigin = "anonymous"; + image.referrerPolicy = "no-referrer"; + image.onload = () => { + const canvas = document.createElement("canvas"); + const context = canvas.getContext("2d", { willReadFrequently: true }); + + if (!context) { + resolve(undefined); + return; + } + + canvas.width = 32; + canvas.height = 32; + context.drawImage(image, 0, 0, canvas.width, canvas.height); + + try { + const { data } = context.getImageData( + 0, + 0, + canvas.width, + canvas.height, + ); + let red = 0; + let green = 0; + let blue = 0; + let total = 0; + + for (let index = 0; index < data.length; index += 4) { + const alpha = data[index + 3]; + + if (alpha < 128) { + continue; + } + + red += data[index] * alpha; + green += data[index + 1] * alpha; + blue += data[index + 2] * alpha; + total += alpha; + } + + if (total === 0) { + resolve(undefined); + return; + } + + const darken = 0.7; + + resolve( + `rgb(${Math.round((red / total) * darken)}, ${Math.round((green / total) * darken)}, ${Math.round((blue / total) * darken)})`, + ); + } catch { + resolve(undefined); + } + }; + image.onerror = () => resolve(undefined); + image.src = src; + }); +} + function Overlay({ type, user, @@ -100,10 +163,14 @@ export default function Base({ flush?: boolean; }) { const { get } = useUser(); + const { load } = useStorage(); const focusedParticipantId = useCall((state) => state.focusedParticipantId); const view = useCall((state) => state.view); const [user, setUser] = useState(null); + const [avatarBackgroundColor, setAvatarBackgroundColor] = useState< + string | undefined + >(undefined); const isSpeaking = useIsSpeaking(user?.user_id ?? -1); const screenSharePublication = getTrackPublicationBySource( participant, @@ -111,6 +178,11 @@ export default function Base({ ); const screenSharePreview = participant?.attributes["screenSharePreview"]; + const [ownId, setOwnId] = useState(0); + useEffect(() => { + load("user_id").then(setOwnId); + }, [load]); + useEffect(() => { const participantId = Number(participant?.identity); @@ -119,7 +191,6 @@ export default function Base({ !Number.isInteger(participantId) || participantId <= 0 ) { - // eslint-disable-next-line setUser(null); return; } @@ -137,6 +208,25 @@ export default function Base({ }; }, [participant, get]); + useEffect(() => { + if (type !== "user" || !user?.avatar) { + setAvatarBackgroundColor(undefined); + return; + } + + let active = true; + + void getAverageImageColor(user.avatar).then((color) => { + if (active) { + setAvatarBackgroundColor(color); + } + }); + + return () => { + active = false; + }; + }, [type, user?.avatar]); + // Avatar calc const currentCard = useRef(null); @@ -169,7 +259,7 @@ export default function Base({ view === "focused" && user.user_id === focusedParticipantId; return ( - + {/* Detect video / user and place here */} @@ -264,9 +357,7 @@ export default function Base({
} /> - - Stop Watching - - + + ); } diff --git a/packages/call/src/components/modals/contextMenu.tsx b/packages/call/src/components/modals/contextMenu.tsx new file mode 100644 index 0000000..4a1e5f0 --- /dev/null +++ b/packages/call/src/components/modals/contextMenu.tsx @@ -0,0 +1,95 @@ +import { + ContextMenuCheckboxItem, + ContextMenuContent, + ContextMenuItem, + ContextMenuSeparator, + Slider, +} from "@tensamin/ui"; +import { User } from "@tensamin/user/context"; +import { useCall } from "../../store"; +import { useState } from "react"; + +function EmptyCheckboxIndicator({ checked }: { checked: boolean }) { + if (checked) { + return null; + } + + return ( + + ); +} + +export default function ContextMenu({ + user, + ownId, +}: { + user: User; + ownId: number; +}) { + const [muted, setMuted] = useState(false); + const [soundboardMuted, setSoundboardMuted] = useState(false); + const [serverDeafened, setServerDeafened] = useState(false); + const [serverMuted, setServerMuted] = useState(false); + const watchedStreamParticipantIds = useCall( + (state) => state.watchedStreamParticipantIds, + ); + + return ( + + {watchedStreamParticipantIds.includes(user.user_id) && + user.user_id !== ownId ? ( + Stop Watching + ) : null} + Profile + Change Nickname + + e.preventDefault()} + className="flex flex-col items-start pb-2" + > +

Volume

+ e.stopPropagation()} + onPointerDown={(e) => e.stopPropagation()} + /> +
+ e.preventDefault()} + className="flex justify-between" + > +

Mute

+ +
+ e.preventDefault()} + className="flex justify-between" + > +

Mute Soundboard

+ +
+ e.preventDefault()} + className="flex justify-between text-destructive focus:text-destructive" + > +

Server Deaf

+ +
+ e.preventDefault()} + className="flex justify-between text-destructive focus:text-destructive" + > +

Server Mute

+ +
+ Disconnect +
+ ); +} diff --git a/packages/call/src/components/popout.tsx b/packages/call/src/components/popout.tsx index 20611ca..398b9e2 100644 --- a/packages/call/src/components/popout.tsx +++ b/packages/call/src/components/popout.tsx @@ -120,7 +120,6 @@ export function Popout({ participant }: { participant: Participant }) { useEffect(() => { if (isDragging) return; - // eslint-disable-next-line setCoordsSafe(getCoordsForPosition(position)); }, [position, size, isDragging, getCoordsForPosition]); diff --git a/packages/call/src/components/screenshareDialog.tsx b/packages/call/src/components/screenshareDialog.tsx index 03ce110..a11e75d 100644 --- a/packages/call/src/components/screenshareDialog.tsx +++ b/packages/call/src/components/screenshareDialog.tsx @@ -92,7 +92,6 @@ export default function ScreenShareDialog({ let active = true; - // eslint-disable-next-line setLoading(true); setSelectedSourceId(null); setSelectedAudioOutputId(NONE_AUDIO_OUTPUT); diff --git a/packages/call/todo.md b/packages/call/todo.md index f44c6fd..4d00174 100644 --- a/packages/call/todo.md +++ b/packages/call/todo.md @@ -1,14 +1,9 @@ - Overlay for stream modals -- User modals - - Bg based on avatar - Mobile -- Call invite popup - - Save call invite in `calls` array - Sounds - Admin call actions - Timeout - Disconnect -- Context menus -- Popout Window +- Implement context menu features - Add quality selection - Good preview page diff --git a/packages/tauth/src/context.tsx b/packages/tauth/src/context.tsx index faa00bd..0e094a0 100644 --- a/packages/tauth/src/context.tsx +++ b/packages/tauth/src/context.tsx @@ -123,7 +123,6 @@ export default function Wrapper({ children }: { children: ReactNode }) { const redirect = params.get("redirect"); const challenge = params.get("challenge"); if (!identifier || !redirect) { - // eslint-disable-next-line setAllowChildern(true); return; } From 066db995c1069240c91e0fac7b5b5e17620ed983 Mon Sep 17 00:00:00 2001 From: Alois Date: Tue, 9 Jun 2026 16:14:29 +0200 Subject: [PATCH 11/11] (feat): add tauri notifications (feat): bump version --- apps/tauri/package.json | 7 +- apps/tauri/src-tauri/Cargo.lock | 2466 +++++++---------- apps/tauri/src-tauri/Cargo.toml | 3 + .../tauri/src-tauri/capabilities/default.json | 3 +- apps/tauri/src-tauri/capabilities/mobile.json | 5 +- apps/tauri/src-tauri/src/lib.rs | 2 +- bun.lock | 3 + package.json | 2 +- 8 files changed, 952 insertions(+), 1539 deletions(-) diff --git a/apps/tauri/package.json b/apps/tauri/package.json index fb41de4..80b8b3a 100644 --- a/apps/tauri/package.json +++ b/apps/tauri/package.json @@ -30,10 +30,11 @@ "@tauri-apps/api": "^2", "@tauri-apps/plugin-barcode-scanner": "~2", "@tauri-apps/plugin-deep-link": "~2", - "react-dom": "^19.2.0", - "@tensamin/ui": "*", + "@tauri-apps/plugin-notification": "~2", "@tensamin/shared": "workspace:*", - "react": "^19.2.0" + "@tensamin/ui": "*", + "react": "^19.2.0", + "react-dom": "^19.2.0" }, "devDependencies": { "@tauri-apps/cli": "^2", diff --git a/apps/tauri/src-tauri/Cargo.lock b/apps/tauri/src-tauri/Cargo.lock index 77d465a..386b3fc 100644 --- a/apps/tauri/src-tauri/Cargo.lock +++ b/apps/tauri/src-tauri/Cargo.lock @@ -41,62 +41,51 @@ dependencies = [ "libc", ] -[[package]] -name = "anstream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" - -[[package]] -name = "anstyle-parse" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" -dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys 0.61.2", -] - [[package]] name = "anyhow" version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +[[package]] +name = "asn1-rs" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f43a50ac4fdca5df8e885c21b835997f0a1cdee65494a6847694a98652d9d8" +dependencies = [ + "asn1-rs-derive", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 2.0.18", + "time", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "async-broadcast" version = "0.7.2" @@ -195,9 +184,9 @@ dependencies = [ [[package]] name = "async-signal" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" +checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485" dependencies = [ "async-io", "async-lock", @@ -259,9 +248,32 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "aws-lc-rs" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00" +dependencies = [ + "aws-lc-sys", + "untrusted 0.7.1", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] [[package]] name = "base64" @@ -281,7 +293,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ - "bit-vec", + "bit-vec 0.8.0", ] [[package]] @@ -290,6 +302,15 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +[[package]] +name = "bit-vec" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51" +dependencies = [ + "serde", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -298,9 +319,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.0" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" dependencies = [ "serde_core", ] @@ -314,6 +335,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +dependencies = [ + "hybrid-array", +] + [[package]] name = "block2" version = "0.6.2" @@ -338,9 +368,9 @@ dependencies = [ [[package]] name = "brotli" -version = "8.0.2" +version = "8.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +checksum = "8119e4516436f5708bbc474a9d395bf12f1b5395e93a92a56e647ac3388c8610" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -349,19 +379,28 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "5.0.0" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +checksum = "5962523e1b92ce1b5e793d9169b9943eece10d39f62550bc04bb605d75b94924" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", ] [[package]] -name = "bumpalo" -version = "3.20.2" +name = "bs58" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytemuck" @@ -375,12 +414,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" -[[package]] -name = "byteorder-lite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" - [[package]] name = "bytes" version = "1.11.1" @@ -390,22 +423,13 @@ dependencies = [ "serde", ] -[[package]] -name = "bzip2" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" -dependencies = [ - "libbz2-rs-sys", -] - [[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", + "bitflags 2.13.0", "cairo-sys-rs", "glib", "libc", @@ -468,38 +492,16 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.59" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", + "jobserver", + "libc", "shlex", ] -[[package]] -name = "cef" -version = "146.4.1+146.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5dad6495c583fedab04a24f6fc08274c59a28b33967ca87709398e1f11c2ebe" -dependencies = [ - "cef-dll-sys", - "libloading 0.9.0", - "objc2", - "windows-sys 0.61.2", -] - -[[package]] -name = "cef-dll-sys" -version = "146.4.1+146.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6616217417da12da57bb7650acc3c8be0fc26e7120892ab926d2ba8d84c8c9c2" -dependencies = [ - "anyhow", - "cmake", - "download-cef", - "serde_json", -] - [[package]] name = "cesu8" version = "1.1.0" @@ -534,10 +536,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] -name = "chrono" -version = "0.4.44" +name = "cfg_aliases" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "num-traits", @@ -545,46 +553,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "clap" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "clap_lex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" - [[package]] name = "cmake" version = "0.1.58" @@ -594,18 +562,6 @@ dependencies = [ "cc", ] -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - -[[package]] -name = "colorchoice" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" - [[package]] name = "combine" version = "4.6.7" @@ -626,16 +582,10 @@ dependencies = [ ] [[package]] -name = "console" -version = "0.16.3" +name = "const-oid" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d64e8af5551369d19cf50138de61f1c42074ab970f74e99be916646777f8fc87" -dependencies = [ - "encode_unicode", - "libc", - "unicode-width", - "windows-sys 0.61.2", -] +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "const-random" @@ -657,41 +607,16 @@ dependencies = [ "tiny-keccak", ] -[[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 = [ - "percent-encoding", "time", "version_check", ] -[[package]] -name = "cookie_store" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b2c103cf610ec6cae3da84a766285b42fd16aad564758459e6ecf128c75206" -dependencies = [ - "cookie", - "document-features", - "idna", - "indexmap 2.13.1", - "log", - "serde", - "serde_derive", - "serde_json", - "time", - "url", -] - [[package]] name = "core-foundation" version = "0.10.1" @@ -714,7 +639,7 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "core-foundation", "core-graphics-types", "foreign-types", @@ -727,7 +652,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "core-foundation", "libc", ] @@ -741,6 +666,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.5.0" @@ -782,20 +716,12 @@ dependencies = [ ] [[package]] -name = "cssparser" -version = "0.29.6" +name = "crypto-common" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa", - "matches", - "phf 0.10.1", - "proc-macro2", - "quote", - "smallvec", - "syn 1.0.109", + "hybrid-array", ] [[package]] @@ -807,7 +733,7 @@ dependencies = [ "cssparser-macros", "dtoa-short", "itoa", - "phf 0.13.1", + "phf", "smallvec", ] @@ -823,14 +749,20 @@ dependencies = [ [[package]] name = "ctor" -version = "0.2.9" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" +checksum = "352d39c2f7bef1d6ad73db6f5160efcaed66d94ef8c6c573a8410c00bf909a98" dependencies = [ - "quote", - "syn 2.0.117", + "ctor-proc-macro", + "dtor", ] +[[package]] +name = "ctor-proc-macro" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1" + [[package]] name = "darling" version = "0.23.0" @@ -865,6 +797,12 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "data-encoding" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" + [[package]] name = "dbus" version = "0.9.11" @@ -876,6 +814,20 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "der-parser" +version = "10.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" +dependencies = [ + "asn1-rs", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + [[package]] name = "deranged" version = "0.5.8" @@ -886,19 +838,6 @@ dependencies = [ "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" @@ -926,15 +865,20 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", - "crypto-common", + "block-buffer 0.10.4", + "crypto-common 0.1.7", ] [[package]] -name = "dioxus-debug-cell" -version = "0.1.1" +name = "digest" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ea539174bb236e0e7dc9c12b19b88eae3cb574dedbd0252a2d43ea7e6de13e2" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer 0.12.0", + "const-oid", + "crypto-common 0.2.2", +] [[package]] name = "dirs" @@ -957,25 +901,13 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "dispatch2" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a0d569e003ff27784e0e14e4a594048698e0c0f0b66cabcb51511be55a7caa0" -dependencies = [ - "bitflags 2.11.0", - "block2", - "libc", - "objc2", -] - [[package]] name = "dispatch2" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "block2", "libc", "objc2", @@ -983,9 +915,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -1024,15 +956,6 @@ dependencies = [ "const-random", ] -[[package]] -name = "document-features" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" -dependencies = [ - "litrs", -] - [[package]] name = "dom_query" version = "0.27.0" @@ -1040,37 +963,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89" dependencies = [ "bit-set", - "cssparser 0.36.0", + "cssparser", "foldhash 0.2.0", - "html5ever 0.38.0", + "html5ever", "precomputed-hash", - "selectors 0.36.1", - "tendril 0.5.0", -] - -[[package]] -name = "downcast-rs" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - -[[package]] -name = "download-cef" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7471a7d5d3bd8df1b3b75871f0317d8a6dd73270ab861cc97ae7907ee63e554" -dependencies = [ - "bzip2", - "clap", - "indicatif", - "regex", - "semver", - "serde", - "serde_json", - "sha1_smol", - "tar", - "thiserror 2.0.18", - "ureq", + "selectors", + "tendril", ] [[package]] @@ -1097,6 +995,21 @@ dependencies = [ "dtoa", ] +[[package]] +name = "dtor" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1057d6c64987086ff8ed0fd3fbf377a6b7d205cc7715868cd401705f715cbe4" +dependencies = [ + "dtor-proc-macro", +] + +[[package]] +name = "dtor-proc-macro" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5" + [[package]] name = "dunce" version = "1.0.5" @@ -1111,14 +1024,14 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "embed-resource" -version = "3.0.8" +version = "3.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63a1d0de4f2249aa0ff5884d7080814f446bb241a559af6c170a41e878ed2d45" +checksum = "c31a88c8d26de40ed18fe748c547845aa39de1db3afd958f8cb91579f3644bcb" dependencies = [ "cc", "memchr", "rustc_version", - "toml 0.9.12+spec-1.1.0", + "toml 1.1.2+spec-1.1.0", "vswhom", "winreg", ] @@ -1129,12 +1042,6 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" -[[package]] -name = "encode_unicode" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" - [[package]] name = "endi" version = "1.1.1" @@ -1212,9 +1119,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.3.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "fdeflate" @@ -1235,17 +1142,6 @@ dependencies = [ "rustc_version", ] -[[package]] -name = "filetime" -version = "0.2.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" -dependencies = [ - "cfg-if", - "libc", - "libredox", -] - [[package]] name = "find-msvc-tools" version = "0.1.9" @@ -1317,14 +1213,10 @@ dependencies = [ ] [[package]] -name = "futf" -version = "0.1.5" +name = "fs_extra" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures-channel" @@ -1410,15 +1302,6 @@ dependencies = [ "slab", ] -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - [[package]] name = "gdk" version = "0.18.2" @@ -1528,17 +1411,6 @@ dependencies = [ "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" @@ -1546,8 +1418,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", + "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", + "wasm-bindgen", ] [[package]] @@ -1557,9 +1431,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi 5.3.0", "wasip2", + "wasm-bindgen", ] [[package]] @@ -1613,7 +1489,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "futures-channel", "futures-core", "futures-executor", @@ -1746,9 +1622,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.1" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "heck" @@ -1774,18 +1650,6 @@ 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" @@ -1793,14 +1657,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2" dependencies = [ "log", - "markup5ever 0.38.0", + "markup5ever", ] [[package]] -name = "http" -version = "1.4.0" +name = "httlib-huffman" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "1a9fcbcc408c5526c3ab80d534e5c86e7967c1fb7aa0a8c76abd1edc27deb877" + +[[package]] +name = "http" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -1836,10 +1706,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] -name = "hyper" -version = "1.9.0" +name = "hybrid-array" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +dependencies = [ + "typenum", +] + +[[package]] +name = "hyper" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", @@ -2019,41 +1898,14 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", "icu_properties", ] -[[package]] -name = "image" -version = "0.24.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-traits", -] - -[[package]] -name = "image" -version = "0.25.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" -dependencies = [ - "bytemuck", - "byteorder-lite", - "moxcms", - "num-traits", - "png 0.18.1", - "zune-core", - "zune-jpeg", -] - [[package]] name = "indexmap" version = "1.9.3" @@ -2067,29 +1919,16 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.13.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a8a2b9cb3e0b0c1803dbb0758ffac5de2f425b23c28f518faabd9d805342ff" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "serde", "serde_core", ] -[[package]] -name = "indicatif" -version = "0.18.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25470f23803092da7d239834776d653104d551bc4d7eacaf31e6837854b8e9eb" -dependencies = [ - "console", - "portable-atomic", - "unicode-width", - "unit-prefix", - "web-time", -] - [[package]] name = "infer" version = "0.19.0" @@ -2105,16 +1944,6 @@ 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" @@ -2134,12 +1963,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "is_terminal_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" - [[package]] name = "itoa" version = "1.0.18" @@ -2214,14 +2037,23 @@ dependencies = [ ] [[package]] -name = "js-sys" -version = "0.3.94" +name = "jobserver" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -2253,23 +2085,11 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.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 = "lazy_static" version = "1.5.0" @@ -2302,21 +2122,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" dependencies = [ "gtk-sys", - "libloading 0.7.4", + "libloading", "once_cell", ] -[[package]] -name = "libbz2-rs-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" - [[package]] name = "libc" -version = "0.2.184" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libdbus-sys" @@ -2337,42 +2151,13 @@ dependencies = [ "winapi", ] -[[package]] -name = "libloading" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754ca22de805bb5744484a5b151a9e1a8e837d5dc232c2d7d8c2e3492edc8b60" -dependencies = [ - "cfg-if", - "windows-link 0.2.1", -] - [[package]] name = "libredox" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08" +checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ - "bitflags 2.11.0", "libc", - "plain", - "redox_syscall 0.7.3", -] - -[[package]] -name = "libwayshot" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2efa01ecfd021b1e7db27f21f4e79b35b048081c9cae9d2f898eddc98444d69" -dependencies = [ - "image 0.24.9", - "log", - "memmap2", - "nix", - "thiserror 1.0.69", - "wayland-client", - "wayland-protocols", - "wayland-protocols-wlr", ] [[package]] @@ -2387,12 +2172,6 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" -[[package]] -name = "litrs" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" - [[package]] name = "lock_api" version = "0.4.14" @@ -2404,28 +2183,26 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" [[package]] -name = "mac" -version = "0.1.1" +name = "lru-slab" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] -name = "markup5ever" -version = "0.14.1" +name = "mac-notification-sys" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" +checksum = "50efa634682b3fc5a1ab6f3dd5b2bce7b848011fc485b53b063dc68f2f74feae" 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", + "cc", + "objc2", + "objc2-foundation", + "time", ] [[package]] @@ -2435,41 +2212,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862" dependencies = [ "log", - "tendril 0.5.0", + "tendril", "web_atoms", ] -[[package]] -name = "match_token" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" - -[[package]] -name = "memmap2" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" -dependencies = [ - "libc", -] +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "memoffset" @@ -2486,6 +2237,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.8.9" @@ -2498,30 +2255,20 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "windows-sys 0.61.2", ] -[[package]] -name = "moxcms" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" -dependencies = [ - "num-traits", - "pxfm", -] - [[package]] name = "muda" -version = "0.17.2" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c9fec5a4e89860383d778d10563a605838f8f0b2f9303868937e5ff32e86177" +checksum = "47a2e3dff89cd322c66647942668faee0a2b1f88ea6cbb4d374b4a8d7e92528c" dependencies = [ "crossbeam-channel", "dpi", @@ -2532,10 +2279,10 @@ dependencies = [ "objc2-core-foundation", "objc2-foundation", "once_cell", - "png 0.17.16", + "png 0.18.1", "serde", "thiserror 2.0.18", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -2544,7 +2291,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "jni-sys 0.3.1", "log", "ndk-sys", @@ -2553,12 +2300,6 @@ dependencies = [ "thiserror 1.0.69", ] -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - [[package]] name = "ndk-sys" version = "0.6.0+11769913" @@ -2575,27 +2316,53 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] -name = "nix" -version = "0.27.1" +name = "nom" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "bitflags 2.11.0", - "cfg-if", - "libc", + "memchr", + "minimal-lexical", ] [[package]] -name = "nodrop" -version = "0.1.14" +name = "notify-rust" +version = "4.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" +checksum = "50ff2e74231b72c832d82982193b417f230945be6bdb5575b251d941d31adb00" +dependencies = [ + "futures-lite", + "log", + "mac-notification-sys", + "serde", + "tauri-winrt-notification", + "zbus", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] [[package]] name = "num-conv" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] [[package]] name = "num-traits" @@ -2644,50 +2411,10 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "block2", - "libc", "objc2", - "objc2-cloud-kit", - "objc2-core-data", "objc2-core-foundation", - "objc2-core-graphics", - "objc2-core-image", - "objc2-core-text", - "objc2-core-video", - "objc2-foundation", - "objc2-quartz-core", -] - -[[package]] -name = "objc2-av-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478ae33fcac9df0a18db8302387c666b8ef08a3e2d62b510ca4fc278a384b6c0" -dependencies = [ - "bitflags 2.11.0", - "block2", - "dispatch2 0.3.1", - "objc2", - "objc2-avf-audio", - "objc2-core-audio-types", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-core-image", - "objc2-core-video", - "objc2-foundation", - "objc2-image-io", - "objc2-media-toolbox", - "objc2-quartz-core", -] - -[[package]] -name = "objc2-avf-audio" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13a380031deed8e99db00065c45937da434ca987c034e13b87e4441f9e4090be" -dependencies = [ - "objc2", "objc2-foundation", ] @@ -2697,40 +2424,17 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "objc2", "objc2-foundation", ] -[[package]] -name = "objc2-core-audio" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1eebcea8b0dbff5f7c8504f3107c68fc061a3eb44932051c8cf8a68d969c3b2" -dependencies = [ - "dispatch2 0.3.1", - "objc2", - "objc2-core-audio-types", - "objc2-core-foundation", -] - -[[package]] -name = "objc2-core-audio-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a89f2ec274a0cf4a32642b2991e8b351a404d290da87bb6a9a9d8632490bd1c" -dependencies = [ - "bitflags 2.11.0", - "objc2", -] - [[package]] name = "objc2-core-data" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.11.0", "objc2", "objc2-foundation", ] @@ -2741,10 +2445,8 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.11.0", - "block2", - "dispatch2 0.3.1", - "libc", + "bitflags 2.13.0", + "dispatch2", "objc2", ] @@ -2754,14 +2456,11 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.11.0", - "block2", - "dispatch2 0.3.1", - "libc", + "bitflags 2.13.0", + "dispatch2", "objc2", "objc2-core-foundation", "objc2-io-surface", - "objc2-metal", ] [[package]] @@ -2775,19 +2474,13 @@ dependencies = [ ] [[package]] -name = "objc2-core-media" +name = "objc2-core-location" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ec576860167a15dd9fce7fbee7512beb4e31f532159d3482d1f9c6caedf31d" +checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" dependencies = [ - "bitflags 2.11.0", - "block2", - "dispatch2 0.3.1", "objc2", - "objc2-core-audio", - "objc2-core-audio-types", - "objc2-core-foundation", - "objc2-core-video", + "objc2-foundation", ] [[package]] @@ -2796,27 +2489,12 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "objc2", "objc2-core-foundation", "objc2-core-graphics", ] -[[package]] -name = "objc2-core-video" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" -dependencies = [ - "bitflags 2.11.0", - "block2", - "objc2", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-io-surface", - "objc2-metal", -] - [[package]] name = "objc2-encode" version = "4.1.0" @@ -2838,31 +2516,20 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "block2", "libc", "objc2", "objc2-core-foundation", ] -[[package]] -name = "objc2-image-io" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b0446e98cf4a784cc7a0177715ff317eeaa8463841c616cfc78aa4f953c4ea" -dependencies = [ - "objc2", - "objc2-core-foundation", - "objc2-core-graphics", -] - [[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", + "bitflags 2.13.0", "objc2", "objc2-core-foundation", ] @@ -2877,36 +2544,13 @@ dependencies = [ "objc2-core-foundation", ] -[[package]] -name = "objc2-media-toolbox" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd9fdde720df3da7046bb9097811000c1e7ab5cd579fa89d96b27d56781fb30" -dependencies = [ - "objc2", - "objc2-core-audio-types", - "objc2-core-foundation", - "objc2-core-media", -] - -[[package]] -name = "objc2-metal" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" -dependencies = [ - "bitflags 2.11.0", - "objc2", - "objc2-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", + "bitflags 2.13.0", "objc2", "objc2-core-foundation", "objc2-foundation", @@ -2918,7 +2562,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "objc2", "objc2-core-foundation", ] @@ -2929,9 +2573,28 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", + "block2", "objc2", + "objc2-cloud-kit", + "objc2-core-data", "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-location", + "objc2-core-text", + "objc2-foundation", + "objc2-quartz-core", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" +dependencies = [ + "objc2", "objc2-foundation", ] @@ -2941,7 +2604,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "block2", "objc2", "objc2-app-kit", @@ -2951,23 +2614,32 @@ dependencies = [ "objc2-security", ] +[[package]] +name = "octets" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8311fa8ab7a57759b4ff1f851a3048d9ef0effaa0130726426b742d26d8a88e7" + +[[package]] +name = "oid-registry" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7" +dependencies = [ + "asn1-rs", +] + [[package]] name = "once_cell" version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" -[[package]] -name = "once_cell_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - [[package]] name = "open" -version = "5.3.3" +version = "5.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43bb73a7fa3799b198970490a51174027ba0d4ec504b03cd08caf513d40024bc" +checksum = "2fbaa89d2ddc8473c78a3adf69eea8cffa28c483b8e02a971ef31527cd0fc92c" dependencies = [ "dunce", "is-wsl", @@ -2975,6 +2647,12 @@ dependencies = [ "pathdiff", ] +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + [[package]] name = "option-ext" version = "0.2.0" @@ -3050,7 +2728,7 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.18", + "redox_syscall", "smallvec", "windows-link 0.2.1", ] @@ -3061,111 +2739,41 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" +[[package]] +name = "pem" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" +dependencies = [ + "base64 0.22.1", + "serde_core", +] + [[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", + "phf_macros", + "phf_shared", "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", + "phf_generator", + "phf_shared", ] [[package]] @@ -3175,34 +2783,7 @@ 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", + "phf_shared", ] [[package]] @@ -3211,47 +2792,20 @@ 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", + "phf_generator", + "phf_shared", "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", + "siphasher", ] [[package]] @@ -3273,25 +2827,19 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] name = "plist" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" +checksum = "092791278e026273c1b65bbdcfbba3a300f2994c896bd01ab01da613c29c46f1" dependencies = [ "base64 0.22.1", - "indexmap 2.13.1", - "quick-xml 0.38.4", + "indexmap 2.14.0", + "quick-xml 0.39.4", "serde", "time", ] @@ -3315,7 +2863,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "crc32fast", "fdeflate", "flate2", @@ -3336,12 +2884,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "portable-atomic" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" - [[package]] name = "potential_utf" version = "0.1.5" @@ -3408,7 +2950,7 @@ 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", + "toml_edit 0.25.12+spec-1.1.0", ] [[package]] @@ -3435,12 +2977,6 @@ dependencies = [ "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" @@ -3450,37 +2986,78 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "pxfm" -version = "0.1.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" - [[package]] name = "quick-xml" -version = "0.30.0" +version = "0.37.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" dependencies = [ "memchr", ] [[package]] name = "quick-xml" -version = "0.38.4" +version = "0.39.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" dependencies = [ "memchr", ] [[package]] -name = "quick-xml" -version = "0.39.2" +name = "quinn" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958f21e8e7ceb5a1aa7fa87fab28e7c75976e0bfe7e23ff069e0a260f894067d" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ - "memchr", + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror 2.0.18", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +dependencies = [ + "aws-lc-rs", + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand 0.9.4", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.18", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.60.2", ] [[package]] @@ -3506,23 +3083,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.7.3" +version = "0.8.6" 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" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" dependencies = [ "libc", "rand_chacha 0.3.1", @@ -3530,13 +3093,13 @@ dependencies = [ ] [[package]] -name = "rand_chacha" -version = "0.2.2" +name = "rand" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", + "rand_chacha 0.9.0", + "rand_core 0.9.5", ] [[package]] @@ -3550,12 +3113,13 @@ dependencies = [ ] [[package]] -name = "rand_core" -version = "0.5.1" +name = "rand_chacha" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ - "getrandom 0.1.16", + "ppv-lite86", + "rand_core 0.9.5", ] [[package]] @@ -3568,21 +3132,12 @@ dependencies = [ ] [[package]] -name = "rand_hc" -version = "0.2.0" +name = "rand_core" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" 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", + "getrandom 0.3.4", ] [[package]] @@ -3591,22 +3146,26 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" +[[package]] +name = "rcgen" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57f6d249aad744e274e682777a50283a225a32705394ee6d5fcc01efa25e4055" +dependencies = [ + "aws-lc-rs", + "rustls-pki-types", + "time", + "x509-parser", + "yasna", +] + [[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_syscall" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" -dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", ] [[package]] @@ -3671,9 +3230,9 @@ checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "reqwest" -version = "0.13.2" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" +checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" dependencies = [ "base64 0.22.1", "bytes", @@ -3713,7 +3272,7 @@ dependencies = [ "cfg-if", "getrandom 0.2.17", "libc", - "untrusted", + "untrusted 0.9.0", "windows-sys 0.52.0", ] @@ -3742,13 +3301,22 @@ dependencies = [ "semver", ] +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] + [[package]] name = "rustix" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys", @@ -3757,10 +3325,11 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.37" +version = "0.23.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" +checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" dependencies = [ + "aws-lc-rs", "log", "once_cell", "ring", @@ -3771,23 +3340,37 @@ dependencies = [ ] [[package]] -name = "rustls-pki-types" -version = "1.14.0" +name = "rustls-native-certs" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pki-types" +version = "1.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +dependencies = [ + "web-time", "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.103.10" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", - "untrusted", + "untrusted 0.9.0", ] [[package]] @@ -3805,6 +3388,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "schemars" version = "0.8.22" @@ -3878,21 +3470,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -name = "selectors" -version = "0.24.0" +name = "security-framework" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" 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", + "bitflags 2.13.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" +dependencies = [ + "core-foundation-sys", + "libc", ] [[package]] @@ -3901,16 +3498,16 @@ 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", + "bitflags 2.13.0", + "cssparser", + "derive_more", "log", "new_debug_unreachable", - "phf 0.13.1", - "phf_codegen 0.13.1", + "phf", + "phf_codegen", "precomputed-hash", "rustc-hash", - "servo_arc 0.4.3", + "servo_arc", "smallvec", ] @@ -3979,11 +3576,11 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ - "indexmap 2.13.1", + "indexmap 2.14.0", "itoa", "memchr", "serde", @@ -4022,15 +3619,16 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.18.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f" +checksum = "76a5c54c7310e7b8b9577c286d7e399ddd876c3e12b3ed917a8aabc4b96e9e8c" dependencies = [ "base64 0.22.1", + "bs58", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.13.1", + "indexmap 2.14.0", "schemars 0.9.0", "schemars 1.2.1", "serde_core", @@ -4041,9 +3639,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.18.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65" +checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660" dependencies = [ "darling", "proc-macro2", @@ -4073,16 +3671,6 @@ dependencies = [ "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" @@ -4092,12 +3680,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "sha1_smol" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" - [[package]] name = "sha2" version = "0.10.9" @@ -4105,15 +3687,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", - "digest", + "cpufeatures 0.2.17", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.3", ] [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook-registry" @@ -4133,15 +3726,9 @@ checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" [[package]] name = "siphasher" -version = "0.3.11" +version = "1.0.3" 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" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "slab" @@ -4157,25 +3744,14 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", ] -[[package]] -name = "socks" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c3dbbd9ae980613c6dd8e28a9407b50509d3803b57624d5dfe8315218cd58b" -dependencies = [ - "byteorder", - "libc", - "winapi", -] - [[package]] name = "softbuffer" version = "0.4.8" @@ -4191,7 +3767,7 @@ dependencies = [ "objc2-foundation", "objc2-quartz-core", "raw-window-handle", - "redox_syscall 0.5.18", + "redox_syscall", "tracing", "wasm-bindgen", "web-sys", @@ -4230,19 +3806,6 @@ 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" @@ -4251,30 +3814,18 @@ checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" dependencies = [ "new_debug_unreachable", "parking_lot", - "phf_shared 0.13.1", + "phf_shared", "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", + "phf_generator", + "phf_shared", "proc-macro2", "quote", ] @@ -4285,6 +3836,24 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" + +[[package]] +name = "strum_macros" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "subtle" version = "2.6.1" @@ -4309,7 +3878,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", - "quote", "unicode-ident", ] @@ -4359,16 +3927,17 @@ dependencies = [ [[package]] name = "tao" -version = "0.34.8" +version = "0.35.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9103edf55f2da3c82aea4c7fab7c4241032bfeea0e71fa557d98e00e7ce7cc20" +checksum = "d1c93047acf68669466a34690ac58cca7010bd1b201e1ec86f1fd0a75d3dd4a9" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "block2", "core-foundation", "core-graphics", "crossbeam-channel", - "dispatch2 0.3.1", + "dbus", + "dispatch2", "dlopen2", "dpi", "gdkwayland-sys", @@ -4378,18 +3947,19 @@ dependencies = [ "libc", "log", "ndk", - "ndk-context", "ndk-sys", "objc2", "objc2-app-kit", "objc2-foundation", + "objc2-ui-kit", "once_cell", "parking_lot", + "percent-encoding", "raw-window-handle", "tao-macros", "unicode-segmentation", "url", - "windows 0.61.3", + "windows", "windows-core 0.61.2", "windows-version", "x11-dl", @@ -4406,17 +3976,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "tar" -version = "0.4.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22692a6476a21fa75fdfc11d452fda482af402c008cdbaf3476414e122040973" -dependencies = [ - "filetime", - "libc", - "xattr", -] - [[package]] name = "target-lexicon" version = "0.12.16" @@ -4425,8 +3984,8 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.10.3" -source = "git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef#37deabe7f13f1d32f4076723610de6b6b62865fc" +version = "2.11.2" +source = "git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef#7372c8ee97fe590046aca95388895d7cf6b7d807" dependencies = [ "anyhow", "bytes", @@ -4458,12 +4017,11 @@ dependencies = [ "serde_repr", "serialize-to-javascript", "swift-rs", - "tauri-build 2.5.6 (git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef)", + "tauri-build 2.6.2 (git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef)", "tauri-macros", "tauri-runtime", - "tauri-runtime-cef", "tauri-runtime-wry", - "tauri-utils 2.8.3 (git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef)", + "tauri-utils 2.9.2 (git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef)", "thiserror 2.0.18", "tokio", "tray-icon", @@ -4471,14 +4029,14 @@ dependencies = [ "webkit2gtk", "webview2-com", "window-vibrancy", - "windows 0.61.3", + "windows", ] [[package]] name = "tauri-build" -version = "2.5.6" +version = "2.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bbc990d1dbf57a8e1c7fa2327f2a614d8b757805603c1b9ba5c81bade09fd4d" +checksum = "4aa1f9055fc23919a54e4e125052bed16ed04aef0487086e758fe01a67b451c7" dependencies = [ "anyhow", "cargo_toml", @@ -4490,16 +4048,15 @@ dependencies = [ "semver", "serde", "serde_json", - "tauri-utils 2.8.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tauri-utils 2.9.2 (registry+https://github.com/rust-lang/crates.io-index)", "tauri-winres", - "toml 0.9.12+spec-1.1.0", "walkdir", ] [[package]] name = "tauri-build" -version = "2.5.6" -source = "git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef#37deabe7f13f1d32f4076723610de6b6b62865fc" +version = "2.6.2" +source = "git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef#7372c8ee97fe590046aca95388895d7cf6b7d807" dependencies = [ "anyhow", "cargo_toml", @@ -4511,16 +4068,15 @@ dependencies = [ "semver", "serde", "serde_json", - "tauri-utils 2.8.3 (git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef)", + "tauri-utils 2.9.2 (git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef)", "tauri-winres", - "toml 0.9.12+spec-1.1.0", "walkdir", ] [[package]] name = "tauri-codegen" -version = "2.5.5" -source = "git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef#37deabe7f13f1d32f4076723610de6b6b62865fc" +version = "2.6.2" +source = "git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef#7372c8ee97fe590046aca95388895d7cf6b7d807" dependencies = [ "base64 0.22.1", "brotli", @@ -4533,9 +4089,9 @@ dependencies = [ "semver", "serde", "serde_json", - "sha2", + "sha2 0.10.9", "syn 2.0.117", - "tauri-utils 2.8.3 (git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef)", + "tauri-utils 2.9.2 (git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef)", "thiserror 2.0.18", "time", "url", @@ -4545,22 +4101,22 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.5.5" -source = "git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef#37deabe7f13f1d32f4076723610de6b6b62865fc" +version = "2.6.2" +source = "git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef#7372c8ee97fe590046aca95388895d7cf6b7d807" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", "syn 2.0.117", "tauri-codegen", - "tauri-utils 2.8.3 (git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef)", + "tauri-utils 2.9.2 (git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef)", ] [[package]] name = "tauri-plugin" -version = "2.5.4" +version = "2.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddde7d51c907b940fb573006cdda9a642d6a7c8153657e88f8a5c3c9290cd4aa" +checksum = "e126abc9e84e35cdfd01596140a73a1850cdb0df0a23acf0185776c30b469a6e" dependencies = [ "anyhow", "glob", @@ -4568,8 +4124,7 @@ dependencies = [ "schemars 0.8.22", "serde", "serde_json", - "tauri-utils 2.8.3 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.9.12+spec-1.1.0", + "tauri-utils 2.9.2 (registry+https://github.com/rust-lang/crates.io-index)", "walkdir", ] @@ -4587,9 +4142,9 @@ dependencies = [ [[package]] name = "tauri-plugin-barcode-scanner" -version = "2.4.4" +version = "2.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "485cbcf227f04117e930be748ea71d835900466dcd1d455d5ec284d36107a305" +checksum = "d3b68f0e3782b61a6e16a67380be40226e2b7233f3e36dadf6e5d03f07d2e7b3" dependencies = [ "log", "serde", @@ -4601,9 +4156,9 @@ dependencies = [ [[package]] name = "tauri-plugin-deep-link" -version = "2.4.8" +version = "2.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db49816aee496a9b200d55b55ab6ae73fd50847c79f2fabc7ee20871fa75c95" +checksum = "70ee75bc5627f77bfdf40c913255ebc258117b10ebe2b2239a1a1cf40b0b58aa" dependencies = [ "dunce", "plist", @@ -4612,7 +4167,7 @@ dependencies = [ "serde_json", "tauri", "tauri-plugin", - "tauri-utils 2.8.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tauri-utils 2.9.2 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror 2.0.18", "tracing", "url", @@ -4621,10 +4176,29 @@ dependencies = [ ] [[package]] -name = "tauri-plugin-opener" -version = "2.5.3" +name = "tauri-plugin-notification" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc624469b06f59f5a29f874bbc61a2ed737c0f9c23ef09855a292c389c42e83f" +checksum = "01fc2c5ff41105bd1f7242d8201fdf3efd70749b82fa013a17f2126357d194cc" +dependencies = [ + "log", + "notify-rust", + "rand 0.9.4", + "serde", + "serde_json", + "serde_repr", + "tauri", + "tauri-plugin", + "thiserror 2.0.18", + "time", + "url", +] + +[[package]] +name = "tauri-plugin-opener" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17e1bea14edce6b793a04e2417e3fd924b9bc4faae83cdee7d714156cceeed29" dependencies = [ "dunce", "glob", @@ -4638,14 +4212,14 @@ dependencies = [ "tauri-plugin", "thiserror 2.0.18", "url", - "windows 0.61.3", + "windows", "zbus", ] [[package]] name = "tauri-runtime" -version = "2.10.1" -source = "git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef#37deabe7f13f1d32f4076723610de6b6b62865fc" +version = "2.11.2" +source = "git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef#7372c8ee97fe590046aca95388895d7cf6b7d807" dependencies = [ "cookie", "dpi", @@ -4657,44 +4231,16 @@ dependencies = [ "raw-window-handle", "serde", "serde_json", - "tauri-utils 2.8.3 (git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef)", + "tauri-utils 2.9.2 (git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef)", "thiserror 2.0.18", "url", - "windows 0.61.3", -] - -[[package]] -name = "tauri-runtime-cef" -version = "0.1.0" -source = "git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef#37deabe7f13f1d32f4076723610de6b6b62865fc" -dependencies = [ - "base64 0.22.1", - "cef", - "cef-dll-sys", - "dioxus-debug-cell", - "dirs", - "gtk", - "html5ever 0.29.1", - "http", - "kuchikiki", - "objc2", - "objc2-app-kit", - "objc2-foundation", - "raw-window-handle", - "serde", - "serde_json", - "sha2", - "tauri-runtime", - "tauri-utils 2.8.3 (git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef)", - "url", - "windows 0.61.3", - "x11-dl", + "windows", ] [[package]] name = "tauri-runtime-wry" -version = "2.10.1" -source = "git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef#37deabe7f13f1d32f4076723610de6b6b62865fc" +version = "2.11.2" +source = "git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef#7372c8ee97fe590046aca95388895d7cf6b7d807" dependencies = [ "gtk", "http", @@ -4709,33 +4255,33 @@ dependencies = [ "softbuffer", "tao", "tauri-runtime", - "tauri-utils 2.8.3 (git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef)", + "tauri-utils 2.9.2 (git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef)", "url", "webkit2gtk", "webview2-com", - "windows 0.61.3", + "windows", "wry", ] [[package]] name = "tauri-utils" -version = "2.8.3" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219a1f983a2af3653f75b5747f76733b0da7ff03069c7a41901a5eb3ace4557d" +checksum = "092379df9a707631978e6c56b1bc2401d387f01e2d4a3c123360d167bbb9aa95" dependencies = [ "anyhow", "cargo_metadata", "ctor", + "dom_query", "dunce", "glob", - "html5ever 0.29.1", "http", "infer", "json-patch", - "kuchikiki", "log", "memchr", - "phf 0.11.3", + "phf", + "plist", "proc-macro2", "quote", "regex", @@ -4747,7 +4293,7 @@ dependencies = [ "serde_with", "swift-rs", "thiserror 2.0.18", - "toml 0.9.12+spec-1.1.0", + "toml 1.1.2+spec-1.1.0", "url", "urlpattern", "uuid", @@ -4756,23 +4302,23 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.8.3" -source = "git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef#37deabe7f13f1d32f4076723610de6b6b62865fc" +version = "2.9.2" +source = "git+https://github.com/tauri-apps/tauri?branch=feat%2Fcef#7372c8ee97fe590046aca95388895d7cf6b7d807" dependencies = [ "anyhow", "brotli", "cargo_metadata", "ctor", + "dom_query", "dunce", "glob", - "html5ever 0.29.1", "http", "infer", "json-patch", - "kuchikiki", "log", "memchr", - "phf 0.11.3", + "phf", + "plist", "proc-macro2", "quote", "regex", @@ -4784,7 +4330,7 @@ dependencies = [ "serde_with", "swift-rs", "thiserror 2.0.18", - "toml 0.9.12+spec-1.1.0", + "toml 1.1.2+spec-1.1.0", "url", "urlpattern", "uuid", @@ -4793,13 +4339,25 @@ dependencies = [ [[package]] name = "tauri-winres" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1087b111fe2b005e42dbdc1990fc18593234238d47453b0c99b7de1c9ab2c1e0" +checksum = "cc65d45c68858bfe420dd29e834b5d15dbecf8a07a8a16cf4d532c7b1f69d4b6" dependencies = [ "dunce", "embed-resource", - "toml 0.9.12+spec-1.1.0", + "toml 1.1.2+spec-1.1.0", +] + +[[package]] +name = "tauri-winrt-notification" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b1e66e07de489fe43a46678dd0b8df65e0c973909df1b60ba33874e297ba9b9" +dependencies = [ + "quick-xml 0.37.5", + "thiserror 2.0.18", + "windows", + "windows-version", ] [[package]] @@ -4815,17 +4373,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[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" @@ -4840,17 +4387,17 @@ dependencies = [ name = "tensamin" version = "0.0.0" dependencies = [ - "base64 0.22.1", - "image 0.25.10", "serde", "serde_json", "tauri", - "tauri-build 2.5.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tauri-build 2.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "tauri-plugin-app-events", "tauri-plugin-barcode-scanner", "tauri-plugin-deep-link", + "tauri-plugin-notification", "tauri-plugin-opener", - "xcap", + "ttp-core", + "ttp-native", ] [[package]] @@ -4944,19 +4491,48 @@ dependencies = [ ] [[package]] -name = "tokio" -version = "1.51.0" +name = "tinyvec" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bd1c4c0fc4a7ab90fc15ef6daaa3ec3b893f004f915f2392557ed23237820cd" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" dependencies = [ "bytes", "libc", "mio", + "parking_lot", "pin-project-lite", + "signal-hook-registry", "socket2", + "tokio-macros", "windows-sys 0.61.2", ] +[[package]] +name = "tokio-macros" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "tokio-util" version = "0.7.18" @@ -4988,7 +4564,7 @@ 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", + "indexmap 2.14.0", "serde_core", "serde_spanned 1.1.1", "toml_datetime 0.7.5+spec-1.1.0", @@ -4997,6 +4573,21 @@ dependencies = [ "winnow 0.7.15", ] +[[package]] +name = "toml" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +dependencies = [ + "indexmap 2.14.0", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 1.0.3", +] + [[package]] name = "toml_datetime" version = "0.6.3" @@ -5030,7 +4621,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.13.1", + "indexmap 2.14.0", "toml_datetime 0.6.3", "winnow 0.5.40", ] @@ -5041,7 +4632,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.13.1", + "indexmap 2.14.0", "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.3", @@ -5050,14 +4641,14 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.10+spec-1.1.0" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82418ca169e235e6c399a84e395ab6debeb3bc90edc959bf0f48647c6a32d1b" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ - "indexmap 2.13.1", + "indexmap 2.14.0", "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow 1.0.1", + "winnow 1.0.3", ] [[package]] @@ -5066,7 +4657,7 @@ 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", + "winnow 1.0.3", ] [[package]] @@ -5092,20 +4683,20 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.8" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "bytes", "futures-util", "http", "http-body", - "iri-string", "pin-project-lite", "tower", "tower-layer", "tower-service", + "url", ] [[package]] @@ -5153,9 +4744,9 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.21.3" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e85aa143ceb072062fc4d6356c1b520a51d636e7bc8e77ec94be3608e5e80c" +checksum = "e47e6d063cfe4ad2e416fcbb310be3a37c5fd85c745b62cb562bfa4a003df674" dependencies = [ "crossbeam-channel", "dirs", @@ -5167,10 +4758,10 @@ dependencies = [ "objc2-core-graphics", "objc2-foundation", "once_cell", - "png 0.17.16", + "png 0.18.1", "serde", "thiserror 2.0.18", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -5179,6 +4770,33 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "ttp-core" +version = "0.1.0" +source = "git+https://git.methanium.net/tensamin/ttp.git#23438fa8f884e6ad0d32ca1004c0dedcce0cc8d2" +dependencies = [ + "base64 0.22.1", + "byteorder", + "rand 0.8.6", + "serde_json", + "strum", + "strum_macros", +] + +[[package]] +name = "ttp-native" +version = "0.1.0" +source = "git+https://git.methanium.net/tensamin/ttp.git#23438fa8f884e6ad0d32ca1004c0dedcce0cc8d2" +dependencies = [ + "quinn", + "rustls", + "rustls-native-certs", + "thiserror 2.0.18", + "tokio", + "ttp-core", + "wtransport", +] + [[package]] name = "typeid" version = "1.0.3" @@ -5187,9 +4805,9 @@ checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "uds_windows" @@ -5251,15 +4869,9 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" - -[[package]] -name = "unicode-width" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-xid" @@ -5268,10 +4880,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] -name = "unit-prefix" -version = "0.5.2" +name = "untrusted" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "untrusted" @@ -5279,39 +4891,6 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" -[[package]] -name = "ureq" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dea7109cdcd5864d4eeb1b58a1648dc9bf520360d7af16ec26d0a9354bafcfc0" -dependencies = [ - "base64 0.22.1", - "cookie_store", - "flate2", - "log", - "percent-encoding", - "rustls", - "rustls-pki-types", - "serde", - "serde_json", - "socks", - "ureq-proto", - "utf8-zero", - "webpki-roots", -] - -[[package]] -name = "ureq-proto" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e994ba84b0bd1b1b0cf92878b7ef898a5c1760108fe7b6010327e274917a808c" -dependencies = [ - "base64 0.22.1", - "http", - "httparse", - "log", -] - [[package]] name = "url" version = "2.5.8" @@ -5343,29 +4922,17 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" -[[package]] -name = "utf8-zero" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8c0a043c9540bae7c578c88f91dda8bd82e59ae27c21baca69c8b191aaf5a6e" - [[package]] name = "utf8_iter" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - [[package]] name = "uuid" -version = "1.23.0" +version = "1.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" +checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -5424,12 +4991,6 @@ 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" @@ -5438,11 +4999,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.2+wasi-0.2.9" +version = "1.0.3+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.57.1", ] [[package]] @@ -5451,14 +5012,14 @@ 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", + "wit-bindgen 0.51.0", ] [[package]] name = "wasm-bindgen" -version = "0.2.117" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" +checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" dependencies = [ "cfg-if", "once_cell", @@ -5469,9 +5030,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.67" +version = "0.4.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03623de6905b7206edd0a75f69f747f134b7f0a2323392d664448bf2d3c5d87e" +checksum = "54568702fabf5d4849ce2b90fadfa64168a097eaf4b351ce9df8b687a0086aaf" dependencies = [ "js-sys", "wasm-bindgen", @@ -5479,9 +5040,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.117" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" +checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5489,9 +5050,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.117" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" +checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" dependencies = [ "bumpalo", "proc-macro2", @@ -5502,9 +5063,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.117" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" +checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" dependencies = [ "unicode-ident", ] @@ -5526,7 +5087,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" dependencies = [ "anyhow", - "indexmap 2.13.1", + "indexmap 2.14.0", "wasm-encoder", "wasmparser", ] @@ -5550,87 +5111,17 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.13.0", "hashbrown 0.15.5", - "indexmap 2.13.1", + "indexmap 2.14.0", "semver", ] -[[package]] -name = "wayland-backend" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2857dd20b54e916ec7253b3d6b4d5c4d7d4ca2c33c2e11c6c76a99bd8744755d" -dependencies = [ - "cc", - "downcast-rs", - "rustix", - "smallvec", - "wayland-sys", -] - -[[package]] -name = "wayland-client" -version = "0.31.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" -dependencies = [ - "bitflags 2.11.0", - "rustix", - "wayland-backend", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" -dependencies = [ - "bitflags 2.11.0", - "wayland-backend", - "wayland-client", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols-wlr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" -dependencies = [ - "bitflags 2.11.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", -] - -[[package]] -name = "wayland-scanner" -version = "0.31.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" -dependencies = [ - "proc-macro2", - "quick-xml 0.39.2", - "quote", -] - -[[package]] -name = "wayland-sys" -version = "0.31.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8eab23fefc9e41f8e841df4a9c707e8a8c4ed26e944ef69297184de2785e3be" -dependencies = [ - "pkg-config", -] - [[package]] name = "web-sys" -version = "0.3.94" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a" +checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" dependencies = [ "js-sys", "wasm-bindgen", @@ -5648,14 +5139,14 @@ dependencies = [ [[package]] name = "web_atoms" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a9779e9f04d2ac1ce317aee707aa2f6b773afba7b931222bff6983843b1576" +checksum = "d7cff6eef815df1834fd250e3a2ff436044d82a9f1bc1980ca1dbdf07effc538" dependencies = [ - "phf 0.13.1", - "phf_codegen 0.13.1", - "string_cache 0.9.0", - "string_cache_codegen 0.6.1", + "phf", + "phf_codegen", + "string_cache", + "string_cache_codegen", ] [[package]] @@ -5702,15 +5193,6 @@ dependencies = [ "system-deps", ] -[[package]] -name = "webpki-roots" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "webview2-com" version = "0.38.2" @@ -5719,9 +5201,9 @@ checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" dependencies = [ "webview2-com-macros", "webview2-com-sys", - "windows 0.61.3", + "windows", "windows-core 0.61.2", - "windows-implement 0.60.2", + "windows-implement", "windows-interface", ] @@ -5743,16 +5225,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" dependencies = [ "thiserror 2.0.18", - "windows 0.61.3", + "windows", "windows-core 0.61.2", ] -[[package]] -name = "widestring" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" - [[package]] name = "winapi" version = "0.3.9" @@ -5799,39 +5275,17 @@ dependencies = [ "windows-version", ] -[[package]] -name = "windows" -version = "0.60.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf874e74c7a99773e62b1c671427abf01a425e77c3d3fb9fb1e4883ea934529" -dependencies = [ - "windows-collections 0.1.1", - "windows-core 0.60.1", - "windows-future 0.1.1", - "windows-link 0.1.3", - "windows-numerics 0.1.1", -] - [[package]] name = "windows" version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ - "windows-collections 0.2.0", + "windows-collections", "windows-core 0.61.2", - "windows-future 0.2.1", + "windows-future", "windows-link 0.1.3", - "windows-numerics 0.2.0", -] - -[[package]] -name = "windows-collections" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5467f79cc1ba3f52ebb2ed41dbb459b8e7db636cc3429458d9a852e15bc24dec" -dependencies = [ - "windows-core 0.60.1", + "windows-numerics", ] [[package]] @@ -5843,26 +5297,13 @@ dependencies = [ "windows-core 0.61.2", ] -[[package]] -name = "windows-core" -version = "0.60.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca21a92a9cae9bf4ccae5cf8368dce0837100ddf6e6d57936749e85f152f6247" -dependencies = [ - "windows-implement 0.59.0", - "windows-interface", - "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.3.1", -] - [[package]] name = "windows-core" version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement 0.60.2", + "windows-implement", "windows-interface", "windows-link 0.1.3", "windows-result 0.3.4", @@ -5875,23 +5316,13 @@ version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement 0.60.2", + "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.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a787db4595e7eb80239b74ce8babfb1363d8e343ab072f2ffe901400c03349f0" -dependencies = [ - "windows-core 0.60.1", - "windows-link 0.1.3", -] - [[package]] name = "windows-future" version = "0.2.1" @@ -5903,17 +5334,6 @@ dependencies = [ "windows-threading", ] -[[package]] -name = "windows-implement" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "windows-implement" version = "0.60.2" @@ -5948,16 +5368,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-numerics" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "005dea54e2f6499f2cee279b8f703b3cf3b5734a2d8d21867c8f44003182eeed" -dependencies = [ - "windows-core 0.60.1", - "windows-link 0.1.3", -] - [[package]] name = "windows-numerics" version = "0.2.0" @@ -5997,15 +5407,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "windows-strings" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" -dependencies = [ - "windows-link 0.1.3", -] - [[package]] name = "windows-strings" version = "0.4.2" @@ -6287,15 +5688,12 @@ name = "winnow" version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" -dependencies = [ - "memchr", -] [[package]] name = "winnow" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" dependencies = [ "memchr", ] @@ -6319,6 +5717,12 @@ dependencies = [ "wit-bindgen-rust-macro", ] +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + [[package]] name = "wit-bindgen-core" version = "0.51.0" @@ -6338,7 +5742,7 @@ checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" dependencies = [ "anyhow", "heck 0.5.0", - "indexmap 2.13.1", + "indexmap 2.14.0", "prettyplease", "syn 2.0.117", "wasm-metadata", @@ -6368,8 +5772,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.0", - "indexmap 2.13.1", + "bitflags 2.13.0", + "indexmap 2.14.0", "log", "serde", "serde_derive", @@ -6388,7 +5792,7 @@ checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" dependencies = [ "anyhow", "id-arena", - "indexmap 2.13.1", + "indexmap 2.14.0", "log", "semver", "serde", @@ -6406,9 +5810,9 @@ checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "wry" -version = "0.54.4" +version = "0.55.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a8135d8676225e5744de000d4dff5a082501bf7db6a1c1495034f8c314edbc" +checksum = "186f9871daa55fd9c016578b810d149de58367113db7fb72b462d2323ce19514" dependencies = [ "base64 0.22.1", "block2", @@ -6434,7 +5838,7 @@ dependencies = [ "once_cell", "percent-encoding", "raw-window-handle", - "sha2", + "sha2 0.10.9", "soup3", "tao-macros", "thiserror 2.0.18", @@ -6442,12 +5846,48 @@ dependencies = [ "webkit2gtk", "webkit2gtk-sys", "webview2-com", - "windows 0.61.3", + "windows", "windows-core 0.61.2", "windows-version", "x11-dl", ] +[[package]] +name = "wtransport" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea4aacf790813ee1956751491800537f4e04af7557b7b370501ccbfbc85963e4" +dependencies = [ + "bytes", + "pem", + "quinn", + "rcgen", + "rustls", + "rustls-native-certs", + "rustls-pki-types", + "sha2 0.11.0", + "socket2", + "thiserror 2.0.18", + "time", + "tokio", + "tracing", + "url", + "wtransport-proto", + "x509-parser", +] + +[[package]] +name = "wtransport-proto" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5867c629e4252f7439d82315923daaf27f4fa442410d51b78ab93ef4c432a11" +dependencies = [ + "httlib-huffman", + "octets", + "thiserror 2.0.18", + "url", +] + [[package]] name = "x11" version = "2.21.0" @@ -6470,59 +5910,38 @@ dependencies = [ ] [[package]] -name = "xattr" -version = "1.6.1" +name = "x509-parser" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" +checksum = "d43b0f71ce057da06bc0851b23ee24f3f86190b07203dd8f567d0b706a185202" dependencies = [ - "libc", - "rustix", -] - -[[package]] -name = "xcap" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabd25cdb442bb7f63f13fdee2f59d991b04668d37c69aee00dc2a1cc9d0e9a1" -dependencies = [ - "dbus", - "dispatch2 0.2.0", - "image 0.25.10", + "asn1-rs", + "aws-lc-rs", + "data-encoding", + "der-parser", "lazy_static", - "libwayshot", - "log", - "objc2", - "objc2-app-kit", - "objc2-av-foundation", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-core-media", - "objc2-core-video", - "objc2-foundation", - "percent-encoding", - "scopeguard", + "nom", + "oid-registry", + "rusticata-macros", "thiserror 2.0.18", - "widestring", - "windows 0.60.0", - "xcb", + "time", ] [[package]] -name = "xcb" -version = "1.7.0" +name = "yasna" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4c580d8205abb0a5cf4eb7e927bd664e425b6c3263f9c5310583da96970cf6" +checksum = "b5f6765e852b9b4dc8e2a76843e4d64d1cea8e79bcde0b6901aea8e7c7f08282" dependencies = [ - "bitflags 1.3.2", - "libc", - "quick-xml 0.30.0", + "bit-vec 0.9.1", + "time", ] [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -6543,9 +5962,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.14.0" +version = "5.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca82f95dbd3943a40a53cfded6c2d0a2ca26192011846a1810c4256ef92c60bc" +checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285" dependencies = [ "async-broadcast", "async-executor", @@ -6570,7 +5989,7 @@ dependencies = [ "uds_windows", "uuid", "windows-sys 0.61.2", - "winnow 0.7.15", + "winnow 1.0.3", "zbus_macros", "zbus_names", "zvariant", @@ -6578,9 +5997,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.14.0" +version = "5.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897e79616e84aac4b2c46e9132a4f63b93105d54fe8c0e8f6bffc21fa8d49222" +checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6" dependencies = [ "proc-macro-crate 3.5.0", "proc-macro2", @@ -6593,29 +6012,29 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.1" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" +checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" dependencies = [ "serde", - "winnow 0.7.15", + "winnow 1.0.3", "zvariant", ] [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" dependencies = [ "proc-macro2", "quote", @@ -6624,9 +6043,9 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" dependencies = [ "zerofrom-derive", ] @@ -6688,40 +6107,25 @@ version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" -[[package]] -name = "zune-core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" - -[[package]] -name = "zune-jpeg" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" -dependencies = [ - "zune-core", -] - [[package]] name = "zvariant" -version = "5.10.0" +version = "5.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5708299b21903bbe348e94729f22c49c55d04720a004aa350f1f9c122fd2540b" +checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0" dependencies = [ "endi", "enumflags2", "serde", - "winnow 0.7.15", + "winnow 1.0.3", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.10.0" +version = "5.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b59b012ebe9c46656f9cc08d8da8b4c726510aef12559da3e5f1bf72780752c" +checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737" dependencies = [ "proc-macro-crate 3.5.0", "proc-macro2", @@ -6732,13 +6136,13 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f75c23a64ef8f40f13a6989991e643554d9bef1d682a281160cf0c1bc389c5e9" +checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6" dependencies = [ "proc-macro2", "quote", "serde", "syn 2.0.117", - "winnow 0.7.15", + "winnow 1.0.3", ] diff --git a/apps/tauri/src-tauri/Cargo.toml b/apps/tauri/src-tauri/Cargo.toml index 46ae16e..ba011c1 100644 --- a/apps/tauri/src-tauri/Cargo.toml +++ b/apps/tauri/src-tauri/Cargo.toml @@ -22,6 +22,9 @@ tauri-plugin-opener = "2" serde = { version = "1", features = ["derive"] } serde_json = "1" tauri-plugin-deep-link = "2" +tauri-plugin-notification = "2" +ttp-core = { git = "https://git.methanium.net/tensamin/ttp.git", package = "ttp-core" } +ttp-native = { git = "https://git.methanium.net/tensamin/ttp.git", package = "ttp-native" } [target.'cfg(target_os = "android")'.dependencies.tauri] version = "2" diff --git a/apps/tauri/src-tauri/capabilities/default.json b/apps/tauri/src-tauri/capabilities/default.json index 1f5ace4..02d2627 100644 --- a/apps/tauri/src-tauri/capabilities/default.json +++ b/apps/tauri/src-tauri/capabilities/default.json @@ -14,6 +14,7 @@ "core:window:allow-toggle-maximize", "core:window:allow-minimize", "core:event:default", - "deep-link:default" + "deep-link:default", + "notification:default" ] } \ No newline at end of file diff --git a/apps/tauri/src-tauri/capabilities/mobile.json b/apps/tauri/src-tauri/capabilities/mobile.json index 83f76e0..ceee8f7 100644 --- a/apps/tauri/src-tauri/capabilities/mobile.json +++ b/apps/tauri/src-tauri/capabilities/mobile.json @@ -12,6 +12,7 @@ "app-events:default", "barcode-scanner:default", "barcode-scanner:allow-scan", - "barcode-scanner:allow-cancel" + "barcode-scanner:allow-cancel", + "notification:default" ] -} +} \ No newline at end of file diff --git a/apps/tauri/src-tauri/src/lib.rs b/apps/tauri/src-tauri/src/lib.rs index 57b97fb..f01b2ad 100644 --- a/apps/tauri/src-tauri/src/lib.rs +++ b/apps/tauri/src-tauri/src/lib.rs @@ -1,6 +1,6 @@ #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { - let builder = tauri::Builder::default(); + let builder = tauri::Builder::default().plugin(tauri_plugin_notification::init()); let builder = builder .plugin(tauri_plugin_deep_link::init()) diff --git a/bun.lock b/bun.lock index 92a897c..dc7cf4b 100644 --- a/bun.lock +++ b/bun.lock @@ -43,6 +43,7 @@ "@tauri-apps/api": "^2", "@tauri-apps/plugin-barcode-scanner": "~2", "@tauri-apps/plugin-deep-link": "~2", + "@tauri-apps/plugin-notification": "~2", "@tensamin/shared": "workspace:*", "@tensamin/ui": "*", "react": "^19.2.0", @@ -718,6 +719,8 @@ "@tauri-apps/plugin-deep-link": ["@tauri-apps/plugin-deep-link@2.4.9", "", { "dependencies": { "@tauri-apps/api": "^2.11.0" } }, "sha512-u0SKOUHnJ1wqeqXsDFq2+kASCBj9xxbG0g9XZWPy9SOmU4wXtp6b/wiYpm6oH6/5fBTQsLqnLhIvqLBRpgHJlA=="], + "@tauri-apps/plugin-notification": ["@tauri-apps/plugin-notification@2.3.3", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-Zw+ZH18RJb41G4NrfHgIuofJiymusqN+q8fGUIIV7vyCH+5sSn5coqRv/MWB9qETsUs97vmU045q7OyseCV3Qg=="], + "@tensamin/call": ["@tensamin/call@workspace:packages/call"], "@tensamin/chat": ["@tensamin/chat@workspace:packages/chat"], diff --git a/package.json b/package.json index b89f348..86c8924 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tensamin", - "version": "0.0.8", + "version": "0.0.9", "private": true, "workspaces": [ "packages/*",