From 71c6484a744e7feb23173bc4c65b6a6c27f738eb Mon Sep 17 00:00:00 2001 From: Renan Giuliasse <48266134+renangiuliasse@users.noreply.github.com> Date: Fri, 24 Jul 2026 08:15:58 -0300 Subject: [PATCH 1/6] feat. debian target license & dependencies (#1130) --- .gitignore | 3 +- docker/Dockerfile.deb | 21 ++++++++++ docker/Dockerfile.pacman | 21 ++++++++++ docker/start.sh | 13 ++++++ electron-builder.ts | 6 ++- package.json | 1 + pnpm-lock.yaml | 9 ++++ scripts/spdxLicenceDebianFormat.ts | 66 ++++++++++++++++++++++++++++++ 8 files changed, 137 insertions(+), 3 deletions(-) create mode 100644 docker/Dockerfile.deb create mode 100644 docker/Dockerfile.pacman create mode 100644 docker/start.sh create mode 100644 scripts/spdxLicenceDebianFormat.ts diff --git a/.gitignore b/.gitignore index 938d34c..2acedeb 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ ts-out/ package-lock.json .pnpm-store .cache -.DS_Store \ No newline at end of file +.DS_Store +scripts/spdx-license.txt \ No newline at end of file diff --git a/docker/Dockerfile.deb b/docker/Dockerfile.deb new file mode 100644 index 0000000..116b63f --- /dev/null +++ b/docker/Dockerfile.deb @@ -0,0 +1,21 @@ +FROM ubuntu + +WORKDIR /app + +COPY ./dist/*.deb . + +RUN apt-get update -y && apt-get upgrade -y + +RUN apt-get install ./*.deb -y + +RUN apt-get install -qqy x11-apps x11vnc xvfb + +RUN mkdir ~/.vnc +RUN x11vnc -storepasswd 1234 ~/.vnc/passwd + +COPY docker/start.sh /start.sh +RUN chmod +x /start.sh + +EXPOSE 5900 + +CMD ["/start.sh"] \ No newline at end of file diff --git a/docker/Dockerfile.pacman b/docker/Dockerfile.pacman new file mode 100644 index 0000000..425744c --- /dev/null +++ b/docker/Dockerfile.pacman @@ -0,0 +1,21 @@ +FROM archlinux + +WORKDIR /app + +COPY ./dist/*.pacman . + +RUN pacman -Syu --noconfirm + +RUN pacman -U --noconfirm ./*.pacman + +RUN pacman -Syu --noconfirm x11vnc xorg-server-xvfb + +RUN mkdir ~/.vnc +RUN x11vnc -storepasswd 1234 ~/.vnc/passwd + +COPY docker/start.sh /start.sh +RUN chmod +x /start.sh + +EXPOSE 5900 + +CMD ["/start.sh"] \ No newline at end of file diff --git a/docker/start.sh b/docker/start.sh new file mode 100644 index 0000000..6d21100 --- /dev/null +++ b/docker/start.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +export DISPLAY=:99 + +Xvfb :99 -screen 0 1280x800x24 & +sleep 1 + +x11vnc -display :99 -forever -usepw -rfbport 5900 & + +legcord --no-sandbox & + +tail -f /dev/null \ No newline at end of file diff --git a/electron-builder.ts b/electron-builder.ts index f961b5c..ee1988c 100644 --- a/electron-builder.ts +++ b/electron-builder.ts @@ -1,6 +1,7 @@ import type { Configuration } from "electron-builder"; import { applyAppImageSandboxFix } from "./scripts/build/sandboxFix.mjs"; +import debianLicence from "./scripts/spdxLicenceDebianFormat"; import { ACTION_FRIENDLY_NAMES, EXCLUDED_FROM_SHORTCUTS, ValidActions } from "./src/common/commandDefinitions"; const desktopActions = (exec: "AppRun" | "/opt/Legcord/legcord") => @@ -71,7 +72,7 @@ export const config: Configuration = { }, pacman: { - depends: ["gtk3", "libnotify", "nss", "libxss", "libxtst", "xdg-utils", "at-spi2-core", "libsecret"], + depends: ["gtk3", "libnotify", "xdg-utils", "at-spi2-core", "alsa-lib", "nspr", "nss"], }, nsis: { @@ -101,13 +102,14 @@ export const config: Configuration = { deb: { category: "Network", icon: "build/icon.icns", - depends: ["libgbm-dev", "libasound2", "libnspr4", "libnss3"], + depends: ["libasound2", "libnspr4", "libnss3", "libasound2t64", "libasound2-plugins"], desktop: { entry: { Actions: availableActions, }, desktopActions: desktopActions("/opt/Legcord/legcord"), }, + fpm: [`${debianLicence()}=/usr/share/doc/legcord/copyright`], }, files: [ diff --git a/package.json b/package.json index b723725..504e4ef 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "rollup-plugin-copy": "^3.5.0", "solid-js": "^1.9.14", "solid-motionone": "^1.0.4", + "spdx-license-list": "^6.11.0", "typescript": "^6.0.3", "xml-formatter": "^3.7.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 87b4c22..bbe8473 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,6 +99,9 @@ importers: solid-motionone: specifier: ^1.0.4 version: 1.0.4(solid-js@1.9.14) + spdx-license-list: + specifier: ^6.11.0 + version: 6.11.0 typescript: specifier: ^6.0.3 version: 6.0.3 @@ -2480,6 +2483,10 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + spdx-license-list@6.11.0: + resolution: {integrity: sha512-p5ICd51dSnh7zIMtPgbB9ShBg3HMT77OeI6WVhrFFvxa5KIFYNcqxD4joAE+n1zZ7wlJdEkrOMwC75JUMMmsJA==} + engines: {node: '>=8'} + spitroast@2.1.4: resolution: {integrity: sha512-IA987I3wS8RbrKrgag+NsxLUAttrqONF7UGOL+uQFmLLXlMhZl42LomTAltBQaev0jUXIaRiqShZ3hnJYT7OCQ==} @@ -5238,6 +5245,8 @@ snapshots: source-map@0.6.1: {} + spdx-license-list@6.11.0: {} + spitroast@2.1.4: {} spitroast@2.1.6: {} diff --git a/scripts/spdxLicenceDebianFormat.ts b/scripts/spdxLicenceDebianFormat.ts new file mode 100644 index 0000000..d78e89d --- /dev/null +++ b/scripts/spdxLicenceDebianFormat.ts @@ -0,0 +1,66 @@ +// https://www.debian.org/doc/debian-policy/ch-docs.html#copyright-information +// https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ + +import { readFileSync, writeFileSync } from "node:fs"; +import path from "node:path"; +import spdxLicenseList from "spdx-license-list"; + +interface CopyrightConfig { + upstreamName: string; + source: string; + copyrightHolder: string; + licenseId: string; + comment: string; // optional but nice to have +} + +function indentText(text: string): string { + // formatted text fields follow the same rules as Debian control file + // long descriptions: each line indented with a single space, blank + // lines represented as " ." + return text + .split("\n") + .map((line) => (line.trim() === "" ? " ." : ` ${line}`)) + .join("\n"); +} + +function generateCopyrightFile(config: CopyrightConfig): string { + const license = spdxLicenseList[config.licenseId]; + if (!license) { + throw new Error(`Unknown SPDX license id: ${config.licenseId}`); + } + + const header = [ + "Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/", + `Upstream-Name: ${config.upstreamName}`, + `Source: ${config.source}`, + `Comment: ${indentText(config.comment)}`, // optional field + ].join("\n"); + + const licenseText = readFileSync("license.txt").toString(); + + const licenseStanza = [`License: ${config.licenseId}`, indentText(licenseText)].join("\n"); + + const filesStanza = ["Files: *", `Copyright: ${config.copyrightHolder}`, `License: ${config.licenseId}`].join("\n"); + + return `${[header, filesStanza, licenseStanza].join("\n\n")}\n`; +} + +/** + * Returns the Debian SPDX-formatted license for given license ID + * + * @export + * @return {*} {string} + */ +export default function (): string { + const copyrightContent: string = generateCopyrightFile({ + upstreamName: "Legcord", + source: "https://github.com/Legcord/Legcord", + copyrightHolder: `2020 - ${new Date().getFullYear()} Legcord Contributors`, // git log --reverse + licenseId: "OSL-3.0", + comment: "Open-Source Discord client alternative.", + }); + + const licensePath = path.join(__dirname, "spdx-license.txt"); + writeFileSync(licensePath, copyrightContent); + return licensePath; +} From e60e46c88ef1bfe5c98cbcc98f964c06c0ee3817 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Fri, 24 Jul 2026 13:35:44 +0200 Subject: [PATCH 2/6] fix: don't the dbus interface on mac/win --- src/dbus.ts | 68 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/src/dbus.ts b/src/dbus.ts index 9446f5a..ea25a0e 100644 --- a/src/dbus.ts +++ b/src/dbus.ts @@ -1,7 +1,13 @@ import { existsSync, mkdirSync, writeFileSync } from "node:fs"; import { homedir } from "node:os"; import { join } from "node:path"; -import { interface as dbusInterface, type ProxyInterface, sessionBus, Variant } from "@jellybrick/dbus-next"; +import { + interface as dbusInterface, + type MessageBus, + type ProxyInterface, + sessionBus, + Variant, +} from "@jellybrick/dbus-next"; import { ACTION_FRIENDLY_NAMES, EXCLUDED_FROM_SHORTCUTS, ValidActions } from "./common/commandDefinitions"; import { handleAction, isValidAction } from "./common/handleCommands"; @@ -13,6 +19,8 @@ export const DBUS_ADDRESS = "/app/legcord/Legcord"; const FREEDESKTOP_PORTAL_NAME = "org.freedesktop.portal.Desktop"; const FREEDESKTOP_PORTAL_ADDRESS = "/org/freedesktop/portal/desktop"; +const isLinux = process.platform === "linux"; + // https://flatpak.github.io/xdg-desktop-portal/docs/doc-org.freedesktop.portal.GlobalShortcuts.html type Shortcuts = [string, { description: Variant }]; interface GlobalShortcuts extends ProxyInterface { @@ -74,8 +82,16 @@ class LegcordInterface extends Interface { } } -const bus = sessionBus(); -var legcordInterface = new LegcordInterface(); +let bus: MessageBus | undefined; +let legcordInterface: LegcordInterface | undefined; + +function getBus(): MessageBus { + if (!bus) { + bus = sessionBus(); + legcordInterface = new LegcordInterface(); + } + return bus; +} function ensureDesktopFile(): void { const dir = join(homedir(), ".local/share/applications"); @@ -88,14 +104,18 @@ function ensureDesktopFile(): void { function registerAppId(): Promise { ensureDesktopFile(); // we need a desktop file at XDG_PATH so we can associate with legcord's app_id - return bus.getProxyObject("org.freedesktop.portal.Desktop", "/org/freedesktop/portal/desktop").then((portalObj) => { - const registry: RegistryInterface = portalObj.getInterface("org.freedesktop.host.portal.Registry"); - return registry.Register(DBUS_INTERFACE_NAME, {}); - }); + return getBus() + .getProxyObject("org.freedesktop.portal.Desktop", "/org/freedesktop/portal/desktop") + .then((portalObj) => { + const registry: RegistryInterface = portalObj.getInterface("org.freedesktop.host.portal.Registry"); + return registry.Register(DBUS_INTERFACE_NAME, {}); + }); } export async function setupGlobalShortcuts() { - const portalObj = await bus.getProxyObject(FREEDESKTOP_PORTAL_NAME, FREEDESKTOP_PORTAL_ADDRESS); + if (!isLinux) return; + + const portalObj = await getBus().getProxyObject(FREEDESKTOP_PORTAL_NAME, FREEDESKTOP_PORTAL_ADDRESS); const properties: PropertiesInterface = portalObj.getInterface("org.freedesktop.DBus.Properties"); const globalShortcuts: GlobalShortcuts = portalObj.getInterface("org.freedesktop.portal.GlobalShortcuts"); @@ -108,17 +128,19 @@ export async function setupGlobalShortcuts() { console.debug(`Registered ${DBUS_INTERFACE_NAME} in freedesktop Registry.`); function awaitResponse(requestPath: string): Promise> { - return bus.getProxyObject(FREEDESKTOP_PORTAL_NAME, requestPath).then( - (requestObj) => - new Promise>((resolve, reject) => { - const requestIface = requestObj.getInterface("org.freedesktop.portal.Request"); + return getBus() + .getProxyObject(FREEDESKTOP_PORTAL_NAME, requestPath) + .then( + (requestObj) => + new Promise>((resolve, reject) => { + const requestIface = requestObj.getInterface("org.freedesktop.portal.Request"); - requestIface.once("Response", (responseCode: number, results: Record) => { - if (responseCode === 0) resolve(results); - else reject(new Error(`Request failed with code ${responseCode}`)); - }); - }), - ); + requestIface.once("Response", (responseCode: number, results: Record) => { + if (responseCode === 0) resolve(results); + else reject(new Error(`Request failed with code ${responseCode}`)); + }); + }), + ); } const sessionRequestPath = await globalShortcuts.CreateSession({ @@ -146,13 +168,19 @@ export async function setupGlobalShortcuts() { } export async function startDbusService(): Promise { - await bus.requestName(DBUS_INTERFACE_NAME); - bus.export(DBUS_ADDRESS, legcordInterface); + if (!isLinux) return; + + const dbus = getBus(); + await dbus.requestName(DBUS_INTERFACE_NAME); + dbus.export(DBUS_ADDRESS, legcordInterface!); console.info(`Registered DBus service at ${DBUS_INTERFACE_NAME} ${DBUS_ADDRESS}`); // console.debug(legcordInterface) } export function disconnectDbusService(): void { + if (!bus) return; bus.disconnect(); + bus = undefined; + legcordInterface = undefined; } From acdec4a5e34a4e4795ad0dd975703ea4d1bdb240 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Fri, 24 Jul 2026 13:52:01 +0200 Subject: [PATCH 3/6] chore: bump deps --- package.json | 4 +- pnpm-lock.yaml | 544 ++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 446 insertions(+), 102 deletions(-) diff --git a/package.json b/package.json index 504e4ef..2ea2c69 100644 --- a/package.json +++ b/package.json @@ -44,10 +44,10 @@ "app-builder-lib": "^26.8.1", "babel-preset-solid": "^1.9.12", "electron": "43.2.0", - "electron-builder": "26.8.1", + "electron-builder": "26.15.7", "lucide-solid": "^1.16.0", "monaco-editor": "0.52.2", - "rolldown": "1.0.3", + "rolldown": "1.2.0", "rollup-plugin-copy": "^3.5.0", "solid-js": "^1.9.14", "solid-motionone": "^1.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bbe8473..6f751dc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,7 +47,7 @@ importers: version: 2.4.16 '@rolldown-plugin/solid': specifier: ^0.0.4 - version: 0.0.4(csstype@3.2.3)(rolldown@1.0.3)(seroval@1.5.5)(solid-js@1.9.14) + version: 0.0.4(csstype@3.2.3)(rolldown@1.2.0)(seroval@1.5.5)(solid-js@1.9.14) '@rollup/plugin-esm-shim': specifier: ^0.1.8 version: 0.1.8 @@ -79,8 +79,8 @@ importers: specifier: 43.2.0 version: 43.2.0 electron-builder: - specifier: 26.8.1 - version: 26.8.1(electron-builder-squirrel-windows@26.8.1) + specifier: 26.15.7 + version: 26.15.7(electron-builder-squirrel-windows@26.8.1) lucide-solid: specifier: ^1.16.0 version: 1.16.0(solid-js@1.9.14) @@ -88,8 +88,8 @@ importers: specifier: 0.52.2 version: 0.52.2 rolldown: - specifier: 1.0.3 - version: 1.0.3 + specifier: 1.2.0 + version: 1.2.0 rollup-plugin-copy: specifier: ^3.5.0 version: 3.5.0 @@ -463,12 +463,21 @@ packages: '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + '@emnapi/core@1.11.2': + resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} + '@emnapi/runtime@1.10.0': resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} + '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + '@esbuild/android-arm64@0.17.19': resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} @@ -654,12 +663,20 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@napi-rs/wasm-runtime@1.1.4': - resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@noble/hashes@2.2.0': + resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==} + engines: {node: '>= 20.19.0'} + '@nodable/entities@3.0.0': resolution: {integrity: sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==} @@ -675,8 +692,8 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxc-project/types@0.133.0': - resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + '@oxc-project/types@0.140.0': + resolution: {integrity: sha512-h5LUOzGArYemnW1NMz/DuuQhBi96J6JL2Bk8zE4kvqxB5Sg3jxmCiH4uyOWHDkiKSt5vWlG4FIwCR/DbstcNRQ==} '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} @@ -766,6 +783,20 @@ packages: resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} engines: {node: '>= 10.0.0'} + '@peculiar/asn1-schema@2.8.0': + resolution: {integrity: sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==} + + '@peculiar/json-schema@1.1.12': + resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} + engines: {node: '>=8.0.0'} + + '@peculiar/utils@2.0.3': + resolution: {integrity: sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==} + + '@peculiar/webcrypto@1.7.1': + resolution: {integrity: sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==} + engines: {node: '>=14.18.0'} + '@rolldown-plugin/solid@0.0.4': resolution: {integrity: sha512-1SfABNnkkVYu+0sSuraZDjaonmylalAvopLN2o2vNTSaJh2q1KioCN+1BCzNgrDgiCa36dbzRz0IOoplyKa9uw==} engines: {node: '>=22.12.0'} @@ -775,8 +806,8 @@ packages: seroval: ~1.5.0 solid-js: '>=1.9.12' - '@rolldown/binding-android-arm64@1.0.3': - resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} + '@rolldown/binding-android-arm64@1.2.0': + resolution: {integrity: sha512-9yB1l95IrJuNGDFdOYe79vdApdz6WWBCObE+rQ2LUliYUlcyFwSYIb2xb5/Ifw7dAtMy2ZqNyd8QTSOc7duAKw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] @@ -786,8 +817,8 @@ packages: cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-arm64@1.0.3': - resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} + '@rolldown/binding-darwin-arm64@1.2.0': + resolution: {integrity: sha512-pexNaW9ACLUOaBITOpU6qVu4VrsOFIjTv6bzgu0YUATo4eUJx0V605PxwZfndpPOn0ilqGqvGQ0M8UW0IE24jg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] @@ -797,8 +828,8 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.3': - resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} + '@rolldown/binding-darwin-x64@1.2.0': + resolution: {integrity: sha512-NqKYaq0355ZmNMG4QGpxtEDxsc7tGDhjhCm4PpE0cwnBW+5Il95LJyq414niEiaKLVjnVHBEjSo1wngKxJNiFw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] @@ -808,8 +839,8 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.3': - resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} + '@rolldown/binding-freebsd-x64@1.2.0': + resolution: {integrity: sha512-3vPoHzh6eBTz9IbB0/qZdSr0Qeks2echn+I4cHu2joV74VriPDdldswksEDzrl1mBB+oPRi+67+3Ib59paxIPQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] @@ -819,8 +850,8 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.3': - resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.0': + resolution: {integrity: sha512-E6NNefZ1bUVmKJq2tJkf45J4Zyczj7qm9rUT7NY+Xo2474Y13qWAwc2tvBt0BAVbmtXR1llkxXg0Ou1jbDf2SQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -831,8 +862,8 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-gnu@1.0.3': - resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} + '@rolldown/binding-linux-arm64-gnu@1.2.0': + resolution: {integrity: sha512-D+TgkdgM1vu+7/Fpf8+v0ARW+RXEP9Ccazgm8zQ4JFFd9Q7SrYQ2TakU5S5ihazQDgpKyAgZDOcIFsvoHmTZ8w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -844,22 +875,22 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-linux-arm64-musl@1.0.3': - resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} + '@rolldown/binding-linux-arm64-musl@1.2.0': + resolution: {integrity: sha512-wUqdwJBbAv0APN87GecstdMUtLjjNTs0hBALpxETD73mccFxdmt/XeizXDtN5RAlBwNKmI+Tg+blect2G+8IeQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.3': - resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} + '@rolldown/binding-linux-ppc64-gnu@1.2.0': + resolution: {integrity: sha512-9DtF35qR9/NrfhM4oxLplCzVVjE+KKm8Pjemi0i/sdhAWkUasjmSo8WTTubNJClhSHCfyk2yeyoXDQEDPtDAAw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.3': - resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} + '@rolldown/binding-linux-s390x-gnu@1.2.0': + resolution: {integrity: sha512-RzuHrBh8X8Hntd2N4VR02QGEciq/9JhcZoTpR/Cee6otRrlILGCf3cg2ygHuih+ZebUnWmMrDX6ITI85btO6rQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] @@ -871,8 +902,8 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.3': - resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} + '@rolldown/binding-linux-x64-gnu@1.2.0': + resolution: {integrity: sha512-MK7L0018jjh1jR3mh21G2j1zAVcpscJBlPo2z19pRjv2XOYGRhaV4LyiD8HO6nCDdZln9IFgCMIV5yt4E3klGQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -884,15 +915,15 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-linux-x64-musl@1.0.3': - resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} + '@rolldown/binding-linux-x64-musl@1.2.0': + resolution: {integrity: sha512-gyrxLQ9NfGb/9LoVnC4kb9miUghw1mghnkfYvNHSnVIXriabnfgGPUP4RLcJm87q3KgYz4FYUG8IDiWUT+CpSw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.3': - resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} + '@rolldown/binding-openharmony-arm64@1.2.0': + resolution: {integrity: sha512-/6VFMQGRmrhP77KXDC+StIxGzcNp5JOIyYtw0CQ8gPlzhpiIRucYfoM5FaFamHd5BJYIdH86yfP46l1p3WdrFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] @@ -902,8 +933,8 @@ packages: engines: {node: '>=14.21.3'} cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.0.3': - resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} + '@rolldown/binding-wasm32-wasi@1.2.0': + resolution: {integrity: sha512-rwdbUL465kisF24WEJLvP3JrEG6E5GRuIHt5wpMwHGERtHe4Wm2CIvtf5gTBgr2tGOHKh5NdKEAFS2VkOPE91g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] @@ -912,8 +943,8 @@ packages: cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.3': - resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} + '@rolldown/binding-win32-arm64-msvc@1.2.0': + resolution: {integrity: sha512-+5suHwRiKGmhwyUaNT8a5QbrBvLFh2DbO910TEmGRH1aSxwrCezodvGQnulv4uiWEIv1Kq4ypRsJ5+O+ry1DiA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] @@ -928,8 +959,8 @@ packages: cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.3': - resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} + '@rolldown/binding-win32-x64-msvc@1.2.0': + resolution: {integrity: sha512-WfFv6/qGufotqBSBzBYwgpCkJBk8Nj7697LL9vTz/XWc67e0r3oewu8iMRwQj3AUL45GVD7wVsPjCsAAtW66Wg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -977,6 +1008,9 @@ packages: '@tybys/wasm-util@0.10.2': resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@types/adm-zip@0.5.8': resolution: {integrity: sha512-RVVH7QvZYbN+ihqZ4kX/dMiowf6o+Jk1fNwiSdx0NahBJLU787zkULhGhJM8mf/obmLGmgdMM0bXsQTmyfbR7Q==} @@ -1081,6 +1115,9 @@ packages: ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1107,6 +1144,13 @@ packages: app-builder-bin@5.0.0-alpha.12: resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==} + app-builder-lib@26.15.7: + resolution: {integrity: sha512-C7APoYISPExUmrEntNhDpz9Tccb4uWuEDfLaC0WPPc7/pwzz0WZGznCz/ycPfkkzw6tKOalceD8g6TgHmVz1QA==} + engines: {node: '>=14.0.0'} + peerDependencies: + dmg-builder: 26.15.7 + electron-builder-squirrel-windows: 26.15.7 + app-builder-lib@26.8.1: resolution: {integrity: sha512-p0Im/Dx5C4tmz8QEE1Yn4MkuPC8PrnlRneMhWJj7BBXQfNTJUshM/bp3lusdEsDbvvfJZpXWnYesgSLvwtM2Zw==} engines: {node: '>=14.0.0'} @@ -1134,6 +1178,10 @@ packages: version: 3.5.0 hasBin: true + asn1js@3.0.10: + resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==} + engines: {node: '>=12.0.0'} + assert-plus@1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} @@ -1156,6 +1204,9 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} + aws4@1.13.2: + resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + axios@1.16.1: resolution: {integrity: sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==} @@ -1192,6 +1243,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + boolean@3.2.0: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -1225,9 +1279,21 @@ packages: resolution: {integrity: sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==} engines: {node: '>=12.0.0'} + builder-util-runtime@9.7.0: + resolution: {integrity: sha512-g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw==} + engines: {node: '>=12.0.0'} + + builder-util@26.15.3: + resolution: {integrity: sha512-q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw==} + engines: {node: '>=14.0.0'} + builder-util@26.8.1: resolution: {integrity: sha512-pm1lTYbGyc90DHgCDO7eo8Rl4EqKLciayNbZqGziqnH9jrlKe8ZANGdityLZU+pJh16dfzjAx2xQq9McuIPEtw==} + bytestreamjs@2.0.1: + resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} + engines: {node: '>=6.0.0'} + cacheable-lookup@5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} @@ -1405,6 +1471,9 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + dmg-builder@26.15.7: + resolution: {integrity: sha512-rfo1YyAWO0L3cZLKCqKQiLYbW6ZXebRUfK0kWp4oXxO7dDFLrf7alRkWImNuXvZVQhs6Idzy++cwOk8I+xPDhw==} + dmg-builder@26.8.1: resolution: {integrity: sha512-glMJgnTreo8CFINujtAhCgN96QAqApDMZ8Vl1r8f0QT8QprvC1UCltV4CcWj20YoIyLZx6IUskaJZ0NV8fokcg==} @@ -1426,6 +1495,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + duplexer2@0.1.4: + resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} @@ -1434,8 +1506,8 @@ packages: electron-builder-squirrel-windows@26.8.1: resolution: {integrity: sha512-o288fIdgPLHA76eDrFADHPoo7VyGkDCYbLV1GzndaMSAVBoZrGvM9m2IehdcVMzdAZJ2eV9bgyissQXHv5tGzA==} - electron-builder@26.8.1: - resolution: {integrity: sha512-uWhx1r74NGpCagG0ULs/P9Nqv2nsoo+7eo4fLUOB8L8MdWltq9odW/uuLXMFCDGnPafknYLZgjNX0ZIFRzOQAw==} + electron-builder@26.15.7: + resolution: {integrity: sha512-DBpaNzxsPs1BvEblzFoNriSbzsBqDCy/gseIngeEhYzQG1IxfB7Hvc2tBBVmpWE2BTQGP9J1RrAvDT+Vc/uAxg==} engines: {node: '>=14.0.0'} hasBin: true @@ -1451,6 +1523,9 @@ packages: resolution: {integrity: sha512-8TjjAh8Ec51hUi3o4TaU0mD3GMTOESi866oRNavj9A3IQJ7pmv+MJVmdZBFGw4GFT36X7bkqnuDNYvkQgvyI8Q==} engines: {node: '>=18'} + electron-publish@26.15.3: + resolution: {integrity: sha512-g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q==} + electron-publish@26.8.1: resolution: {integrity: sha512-q+jrSTIh/Cv4eGZa7oVR+grEJo/FoLMYBAnSL5GCtqwUpr1T+VgKB/dn1pnzxIxqD8S/jP1yilT9VrwCqINR4w==} @@ -1562,6 +1637,9 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-uri@3.1.4: + resolution: {integrity: sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==} + fast-xml-builder@1.3.0: resolution: {integrity: sha512-F74cZEdCvuw9P41GAC3rod4X04jjWGM1JPEv/GWSqFTWLsdyMSBMBMlm9Hk3GLBgLBbdBNY8yee0pQh2RBVESQ==} @@ -1609,8 +1687,8 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} - fs-extra@11.3.5: - resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==} + fs-extra@11.3.1: + resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} engines: {node: '>=14.14'} fs-extra@11.3.6: @@ -1837,6 +1915,9 @@ packages: is-unsafe@2.0.0: resolution: {integrity: sha512-2LdV822R+wmI86unXA93WCFpL6g+av8ynWk0nrHyJqGop5VoocYsSLFgN8jrfalT6iGeLNM4KXuVSsULP53kEA==} + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isbinaryfile@4.0.10: resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} engines: {node: '>= 8.0.0'} @@ -1886,6 +1967,9 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} @@ -2144,6 +2228,9 @@ packages: engines: {node: ^20.17.0 || >=22.9.0} hasBin: true + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + node-releases@2.0.46: resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==} engines: {node: '>=18'} @@ -2239,6 +2326,10 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + pkijs@3.4.0: + resolution: {integrity: sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==} + engines: {node: '>=16.0.0'} + plist@3.1.0: resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} engines: {node: '>=10.4.0'} @@ -2256,6 +2347,9 @@ packages: resolution: {integrity: sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==} engines: {node: ^20.17.0 || >=22.9.0} + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -2282,6 +2376,13 @@ packages: resolution: {integrity: sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==} engines: {node: '>=12.20'} + pvtsutils@1.3.6: + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} + + pvutils@1.1.5: + resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + engines: {node: '>=16.0.0'} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -2297,6 +2398,9 @@ packages: resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} hasBin: true + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -2313,6 +2417,10 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + resedit@1.7.2: resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} engines: {node: '>=12', npm: '>=6'} @@ -2354,8 +2462,8 @@ packages: '@babel/runtime': optional: true - rolldown@1.0.3: - resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} + rolldown@1.2.0: + resolution: {integrity: sha512-u7tgm5l4Yw1iTqUL4EcYOAt7fFvCgQMLeidrnD4GALlC6aOznCjezYajgxeyKw27u0Q5N7fwgCzjVyPIWzwuBA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -2366,6 +2474,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -2508,6 +2619,9 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -2624,6 +2738,9 @@ packages: resolution: {integrity: sha512-ZX6U1J04K1FoSUeoX1OicAhw4d0aro2qo+L8RhJkiGTNtBNkd/Fi1Wxoc9HzcVu6HfOzm0si/N15JjxFmD1z6A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + unzipper@0.12.5: + resolution: {integrity: sha512-tXYOi9R57Uj/2Z25SOs5RRSzq886MBQj2gY8dPL+xl/kv6s6SvByoKfAtvfVeEuhntWDgjd2o9p2lb4TVPAz0A==} + update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true @@ -2646,6 +2763,9 @@ packages: resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} engines: {node: '>=0.6.0'} + webcrypto-core@1.9.2: + resolution: {integrity: sha512-gsXecm82UQNlTBURJGuqOWy1Ww08S3kZUcr3aOJS02Pk0xLtkfeUAVC0u0xhgdonFme80edSJUIJyuvL/7250Q==} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -3177,7 +3297,7 @@ snapshots: '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3 dir-compare: 4.2.0 - fs-extra: 11.3.5 + fs-extra: 11.3.6 minimatch: 9.0.9 plist: 3.1.1 transitivePeerDependencies: @@ -3200,16 +3320,32 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/core@1.11.2': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.11.2': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild/android-arm64@0.17.19': optional: true @@ -3359,13 +3495,17 @@ snapshots: '@tybys/wasm-util': 0.10.2 optional: true - '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.2 + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@tybys/wasm-util': 0.10.3 optional: true + '@noble/hashes@1.4.0': {} + + '@noble/hashes@2.2.0': {} + '@nodable/entities@3.0.0': {} '@nodelib/fs.scandir@2.1.5': @@ -3380,7 +3520,7 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@oxc-project/types@0.133.0': {} + '@oxc-project/types@0.140.0': {} '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -3443,7 +3583,29 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.6 optional: true - '@rolldown-plugin/solid@0.0.4(csstype@3.2.3)(rolldown@1.0.3)(seroval@1.5.5)(solid-js@1.9.14)': + '@peculiar/asn1-schema@2.8.0': + dependencies: + '@peculiar/utils': 2.0.3 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/json-schema@1.1.12': + dependencies: + tslib: 2.8.1 + + '@peculiar/utils@2.0.3': + dependencies: + tslib: 2.8.1 + + '@peculiar/webcrypto@1.7.1': + dependencies: + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/json-schema': 1.1.12 + '@peculiar/utils': 2.0.3 + tslib: 2.8.1 + webcrypto-core: 1.9.2 + + '@rolldown-plugin/solid@0.0.4(csstype@3.2.3)(rolldown@1.2.0)(seroval@1.5.5)(solid-js@1.9.14)': dependencies: '@babel/core': 8.0.0-rc.6 '@babel/helper-module-imports': 8.0.0-rc.6 @@ -3455,68 +3617,68 @@ snapshots: csstype: 3.2.3 html-entities: 2.6.0 parse5: 8.0.1 - rolldown: 1.0.3 + rolldown: 1.2.0 seroval: 1.5.5 solid-js: 1.9.14 - '@rolldown/binding-android-arm64@1.0.3': + '@rolldown/binding-android-arm64@1.2.0': optional: true '@rolldown/binding-darwin-arm64@1.0.0-beta.1': optional: true - '@rolldown/binding-darwin-arm64@1.0.3': + '@rolldown/binding-darwin-arm64@1.2.0': optional: true '@rolldown/binding-darwin-x64@1.0.0-beta.1': optional: true - '@rolldown/binding-darwin-x64@1.0.3': + '@rolldown/binding-darwin-x64@1.2.0': optional: true '@rolldown/binding-freebsd-x64@1.0.0-beta.1': optional: true - '@rolldown/binding-freebsd-x64@1.0.3': + '@rolldown/binding-freebsd-x64@1.2.0': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.1': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + '@rolldown/binding-linux-arm-gnueabihf@1.2.0': optional: true '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.1': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.3': + '@rolldown/binding-linux-arm64-gnu@1.2.0': optional: true '@rolldown/binding-linux-arm64-musl@1.0.0-beta.1': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.3': + '@rolldown/binding-linux-arm64-musl@1.2.0': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.3': + '@rolldown/binding-linux-ppc64-gnu@1.2.0': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.3': + '@rolldown/binding-linux-s390x-gnu@1.2.0': optional: true '@rolldown/binding-linux-x64-gnu@1.0.0-beta.1': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.3': + '@rolldown/binding-linux-x64-gnu@1.2.0': optional: true '@rolldown/binding-linux-x64-musl@1.0.0-beta.1': optional: true - '@rolldown/binding-linux-x64-musl@1.0.3': + '@rolldown/binding-linux-x64-musl@1.2.0': optional: true - '@rolldown/binding-openharmony-arm64@1.0.3': + '@rolldown/binding-openharmony-arm64@1.2.0': optional: true '@rolldown/binding-wasm32-wasi@1.0.0-beta.1': @@ -3524,17 +3686,17 @@ snapshots: '@napi-rs/wasm-runtime': 0.2.12 optional: true - '@rolldown/binding-wasm32-wasi@1.0.3': + '@rolldown/binding-wasm32-wasi@1.2.0': dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.1': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.3': + '@rolldown/binding-win32-arm64-msvc@1.2.0': optional: true '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.1': @@ -3543,7 +3705,7 @@ snapshots: '@rolldown/binding-win32-x64-msvc@1.0.0-beta.1': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.3': + '@rolldown/binding-win32-x64-msvc@1.2.0': optional: true '@rolldown/pluginutils@1.0.1': {} @@ -3582,6 +3744,11 @@ snapshots: tslib: 2.8.1 optional: true + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + '@types/adm-zip@0.5.8': dependencies: '@types/node': 25.9.1 @@ -3715,6 +3882,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.4 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ansi-regex@5.0.1: {} ansi-regex@6.2.2: {} @@ -3734,6 +3908,54 @@ snapshots: app-builder-bin@5.0.0-alpha.12: {} + app-builder-lib@26.15.7(dmg-builder@26.15.7(electron-builder-squirrel-windows@26.8.1))(electron-builder-squirrel-windows@26.8.1): + dependencies: + '@electron/asar': 3.4.1 + '@electron/fuses': 1.8.0 + '@electron/get': 3.1.0 + '@electron/notarize': 2.5.0 + '@electron/osx-sign': 1.3.3 + '@electron/rebuild': 4.0.4 + '@electron/universal': 2.0.3 + '@malept/flatpak-bundler': 0.4.0 + '@noble/hashes': 2.2.0 + '@peculiar/webcrypto': 1.7.1 + '@types/fs-extra': 9.0.13 + ajv: 8.20.0 + asn1js: 3.0.10 + async-exit-hook: 2.0.1 + builder-util: 26.15.3 + builder-util-runtime: 9.7.0 + chromium-pickle-js: 0.2.0 + ci-info: 4.3.1 + debug: 4.4.3 + dmg-builder: 26.15.7(electron-builder-squirrel-windows@26.8.1) + dotenv: 16.6.1 + dotenv-expand: 11.0.7 + ejs: 3.1.10 + electron-builder-squirrel-windows: 26.8.1(dmg-builder@26.8.1) + electron-publish: 26.15.3 + fs-extra: 10.1.0 + hosted-git-info: 4.1.0 + isbinaryfile: 5.0.7 + jiti: 2.7.0 + js-yaml: 4.1.1 + json5: 2.2.3 + lazy-val: 1.0.5 + minimatch: 10.2.5 + pkijs: 3.4.0 + plist: 3.1.0 + proper-lockfile: 4.1.2 + resedit: 1.7.2 + semver: 7.7.4 + tar: 7.5.15 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + unzipper: 0.12.5 + which: 5.0.0 + transitivePeerDependencies: + - supports-color + app-builder-lib@26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@26.8.1): dependencies: '@develar/schema-utils': 2.6.5 @@ -3798,6 +4020,12 @@ snapshots: - bufferutil - utf-8-validate + asn1js@3.0.10: + dependencies: + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + assert-plus@1.0.0: optional: true @@ -3812,6 +4040,8 @@ snapshots: at-least-node@1.0.0: {} + aws4@1.13.2: {} + axios@1.16.1(debug@4.4.3): dependencies: follow-redirects: 1.16.0(debug@4.4.3) @@ -3849,6 +4079,8 @@ snapshots: binary-extensions@2.3.0: {} + bluebird@3.7.2: {} + boolean@3.2.0: optional: true @@ -3892,6 +4124,32 @@ snapshots: transitivePeerDependencies: - supports-color + builder-util-runtime@9.7.0: + dependencies: + debug: 4.4.3 + sax: 1.6.0 + transitivePeerDependencies: + - supports-color + + builder-util@26.15.3: + dependencies: + '@types/debug': 4.1.13 + builder-util-runtime: 9.7.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + fs-extra: 10.1.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + js-yaml: 4.1.1 + sanitize-filename: 1.6.4 + source-map-support: 0.5.21 + stat-mode: 1.0.0 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + transitivePeerDependencies: + - supports-color + builder-util@26.8.1: dependencies: 7zip-bin: 5.2.0 @@ -3913,6 +4171,8 @@ snapshots: transitivePeerDependencies: - supports-color + bytestreamjs@2.0.1: {} + cacheable-lookup@5.0.4: {} cacheable-request@7.0.4: @@ -3989,7 +4249,7 @@ snapshots: dependencies: axios: 1.16.1(debug@4.4.3) debug: 4.4.3 - fs-extra: 11.3.5 + fs-extra: 11.3.6 memory-stream: 1.0.0 node-api-headers: 1.9.0 npmlog: 6.0.2 @@ -4034,8 +4294,7 @@ snapshots: convert-source-map@2.0.0: {} - core-util-is@1.0.2: - optional: true + core-util-is@1.0.2: {} crc@3.8.0: dependencies: @@ -4101,6 +4360,16 @@ snapshots: dependencies: path-type: 4.0.0 + dmg-builder@26.15.7(electron-builder-squirrel-windows@26.8.1): + dependencies: + app-builder-lib: 26.15.7(dmg-builder@26.15.7(electron-builder-squirrel-windows@26.8.1))(electron-builder-squirrel-windows@26.8.1) + builder-util: 26.15.3 + fs-extra: 10.1.0 + js-yaml: 4.1.1 + transitivePeerDependencies: + - electron-builder-squirrel-windows + - supports-color + dmg-builder@26.8.1(electron-builder-squirrel-windows@26.8.1): dependencies: app-builder-lib: 26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@26.8.1) @@ -4138,6 +4407,10 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + duplexer2@0.1.4: + dependencies: + readable-stream: 2.3.8 + ejs@3.1.10: dependencies: jake: 10.9.4 @@ -4151,14 +4424,14 @@ snapshots: - dmg-builder - supports-color - electron-builder@26.8.1(electron-builder-squirrel-windows@26.8.1): + electron-builder@26.15.7(electron-builder-squirrel-windows@26.8.1): dependencies: - app-builder-lib: 26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@26.8.1) - builder-util: 26.8.1 - builder-util-runtime: 9.5.1 + app-builder-lib: 26.15.7(dmg-builder@26.15.7(electron-builder-squirrel-windows@26.8.1))(electron-builder-squirrel-windows@26.8.1) + builder-util: 26.15.3 + builder-util-runtime: 9.7.0 chalk: 4.1.2 ci-info: 4.4.0 - dmg-builder: 26.8.1(electron-builder-squirrel-windows@26.8.1) + dmg-builder: 26.15.7(electron-builder-squirrel-windows@26.8.1) fs-extra: 10.1.0 lazy-val: 1.0.5 simple-update-notifier: 2.0.0 @@ -4181,6 +4454,20 @@ snapshots: electron-is-dev@3.0.1: {} + electron-publish@26.15.3: + dependencies: + '@types/fs-extra': 9.0.13 + aws4: 1.13.2 + builder-util: 26.15.3 + builder-util-runtime: 9.7.0 + chalk: 4.1.2 + form-data: 4.0.5 + fs-extra: 10.1.0 + lazy-val: 1.0.5 + mime: 2.6.0 + transitivePeerDependencies: + - supports-color + electron-publish@26.8.1: dependencies: '@types/fs-extra': 9.0.13 @@ -4325,6 +4612,8 @@ snapshots: fast-json-stable-stringify@2.1.0: {} + fast-uri@3.1.4: {} + fast-xml-builder@1.3.0: dependencies: path-expression-matcher: 1.6.2 @@ -4376,7 +4665,7 @@ snapshots: jsonfile: 6.2.1 universalify: 2.0.1 - fs-extra@11.3.5: + fs-extra@11.3.1: dependencies: graceful-fs: 4.2.11 jsonfile: 6.2.1 @@ -4387,7 +4676,6 @@ snapshots: graceful-fs: 4.2.11 jsonfile: 6.2.1 universalify: 2.0.1 - optional: true fs-extra@7.0.1: dependencies: @@ -4643,6 +4931,8 @@ snapshots: is-unsafe@2.0.0: {} + isarray@1.0.0: {} + isbinaryfile@4.0.10: {} isbinaryfile@5.0.7: {} @@ -4675,6 +4965,8 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stringify-safe@5.0.1: optional: true @@ -4897,6 +5189,8 @@ snapshots: undici: 6.26.0 which: 6.0.1 + node-int64@0.4.0: {} + node-releases@2.0.46: {} nopt@9.0.0: @@ -4971,6 +5265,15 @@ snapshots: mlly: 1.8.2 pathe: 2.0.3 + pkijs@3.4.0: + dependencies: + '@noble/hashes': 1.4.0 + asn1js: 3.0.10 + bytestreamjs: 2.0.1 + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + plist@3.1.0: dependencies: '@xmldom/xmldom': 0.8.13 @@ -4990,6 +5293,8 @@ snapshots: proc-log@6.1.0: {} + process-nextick-args@2.0.1: {} + progress@2.0.3: {} promise-retry@2.0.1: @@ -5017,6 +5322,12 @@ snapshots: dependencies: escape-goat: 4.0.0 + pvtsutils@1.3.6: + dependencies: + tslib: 2.8.1 + + pvutils@1.1.5: {} + queue-microtask@1.2.3: {} quick-lru@5.1.1: {} @@ -5035,6 +5346,16 @@ snapshots: transitivePeerDependencies: - supports-color + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + readable-stream@3.6.2: dependencies: inherits: 2.0.4 @@ -5050,6 +5371,8 @@ snapshots: require-directory@2.1.1: {} + require-from-string@2.0.2: {} + resedit@1.7.2: dependencies: pe-library: 0.4.1 @@ -5102,26 +5425,26 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.1 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.1 - rolldown@1.0.3: + rolldown@1.2.0: dependencies: - '@oxc-project/types': 0.133.0 + '@oxc-project/types': 0.140.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.3 - '@rolldown/binding-darwin-arm64': 1.0.3 - '@rolldown/binding-darwin-x64': 1.0.3 - '@rolldown/binding-freebsd-x64': 1.0.3 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.3 - '@rolldown/binding-linux-arm64-gnu': 1.0.3 - '@rolldown/binding-linux-arm64-musl': 1.0.3 - '@rolldown/binding-linux-ppc64-gnu': 1.0.3 - '@rolldown/binding-linux-s390x-gnu': 1.0.3 - '@rolldown/binding-linux-x64-gnu': 1.0.3 - '@rolldown/binding-linux-x64-musl': 1.0.3 - '@rolldown/binding-openharmony-arm64': 1.0.3 - '@rolldown/binding-wasm32-wasi': 1.0.3 - '@rolldown/binding-win32-arm64-msvc': 1.0.3 - '@rolldown/binding-win32-x64-msvc': 1.0.3 + '@rolldown/binding-android-arm64': 1.2.0 + '@rolldown/binding-darwin-arm64': 1.2.0 + '@rolldown/binding-darwin-x64': 1.2.0 + '@rolldown/binding-freebsd-x64': 1.2.0 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.0 + '@rolldown/binding-linux-arm64-gnu': 1.2.0 + '@rolldown/binding-linux-arm64-musl': 1.2.0 + '@rolldown/binding-linux-ppc64-gnu': 1.2.0 + '@rolldown/binding-linux-s390x-gnu': 1.2.0 + '@rolldown/binding-linux-x64-gnu': 1.2.0 + '@rolldown/binding-linux-x64-musl': 1.2.0 + '@rolldown/binding-openharmony-arm64': 1.2.0 + '@rolldown/binding-wasm32-wasi': 1.2.0 + '@rolldown/binding-win32-arm64-msvc': 1.2.0 + '@rolldown/binding-win32-x64-msvc': 1.2.0 rollup-plugin-copy@3.5.0: dependencies: @@ -5135,6 +5458,8 @@ snapshots: dependencies: queue-microtask: 1.2.3 + safe-buffer@5.1.2: {} + safe-buffer@5.2.1: optional: true @@ -5268,6 +5593,10 @@ snapshots: get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 @@ -5383,6 +5712,14 @@ snapshots: escape-string-regexp: 5.0.0 path-exists: 5.0.0 + unzipper@0.12.5: + dependencies: + bluebird: 3.7.2 + duplexer2: 0.1.4 + fs-extra: 11.3.1 + graceful-fs: 4.2.11 + node-int64: 0.4.0 + update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: browserslist: 4.28.2 @@ -5398,8 +5735,7 @@ snapshots: utf8-byte-length@1.0.5: {} - util-deprecate@1.0.2: - optional: true + util-deprecate@1.0.2: {} verror@1.10.1: dependencies: @@ -5408,6 +5744,14 @@ snapshots: extsprintf: 1.4.1 optional: true + webcrypto-core@1.9.2: + dependencies: + '@peculiar/asn1-schema': 2.8.0 + '@peculiar/json-schema': 1.1.12 + '@peculiar/utils': 2.0.3 + asn1js: 3.0.10 + tslib: 2.8.1 + which@2.0.2: dependencies: isexe: 2.0.0 From 9558af52dc2600bc48722b3a5437d09414e3cde6 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Fri, 24 Jul 2026 15:00:06 +0200 Subject: [PATCH 4/6] feat: redesign the ootb setup to be more in-line with discord --- assets/app/desktop.png | Bin 0 -> 29697 bytes assets/app/overlay.png | Bin 0 -> 68314 bytes assets/app/shelter.svg | 1 + assets/lang/en-US.json | 5 + package.json | 1 + pnpm-lock.yaml | 12 + rolldown.config.ts | 2 + src/common/config.ts | 4 +- src/setup/main.ts | 4 +- src/setup/preload.mts | 12 +- src/setup/setup.css | 488 +++++++++++++++++++++++++++++++++ src/setup/setup.html | 16 +- src/setup/setup.tsx | 596 +++++++++++++++++++++-------------------- 13 files changed, 825 insertions(+), 316 deletions(-) create mode 100644 assets/app/desktop.png create mode 100644 assets/app/overlay.png create mode 100644 assets/app/shelter.svg create mode 100644 src/setup/setup.css diff --git a/assets/app/desktop.png b/assets/app/desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..4ad0ad5e6d9b80107b010068a32abf04543ac662 GIT binary patch literal 29697 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 b;oyHpgB#h$+je>8FaUw4tDnm{r-UW|n|8H9 literal 0 HcmV?d00001 diff --git a/assets/app/shelter.svg b/assets/app/shelter.svg new file mode 100644 index 0000000..997578f --- /dev/null +++ b/assets/app/shelter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/lang/en-US.json b/assets/lang/en-US.json index 1d64b83..799484c 100644 --- a/assets/lang/en-US.json +++ b/assets/lang/en-US.json @@ -244,10 +244,13 @@ "setup-welcomeTitle": "Welcome to Legcord", "setup-welcomeSubtitle": "Let's get you set up with your perfect configuration.", "setup-getStarted": "Get Started", + "setup-windowStyle-overlayTitle": "Overlay Titlebar", + "setup-windowStyle-overlayDesc": "A modern titlebar that blends into Discord. Recommended for most users.", "setup-windowStyle-nativeTitle": "Native Window", "setup-windowStyle-nativeDesc": "Use your system's default window decorations", "setup-windowStyle-customTitle": "Custom Titlebar", "setup-windowStyle-customDesc": "Use Legcord's custom titlebar design", + "setup-recommended": "Recommended", "setup-chooseWindowStyle": "Choose Window Style", "setup-selectAppearance": "Select how Legcord appears on your machine", "setup-systemTray": "System Tray", @@ -263,6 +266,8 @@ "setup-launchLegcord": "Launch Legcord", "setup-modSelectorTitle": "Choose Your Client Mod", "setup-modSelectorSubtitle": "Legcord includes Shelter out of the box, but you can also choose another client mod if wanted.", + "setup-shelterOnlyTitle": "Shelter Only", + "setup-shelterOnlyDesc": "Legcord was built around Shelter. Most typical users won't need another client mod.", "setup-vencordTitle": "Vencord", "setup-vencordDesc": "Client mod with plugins and themes.", "setup-equicordTitle": "Equicord", diff --git a/package.json b/package.json index 2ea2c69..bbf7b24 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "@types/ws": "^8.18.1", "@uwu/lune": "^1.6.2", "@uwu/shelter-defs": "^1.5.1", + "@uwu/shelter-ui": "^0.0.6", "@xmldom/xmldom": "^0.9.10", "app-builder-lib": "^26.8.1", "babel-preset-solid": "^1.9.12", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6f751dc..dde3084 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -66,6 +66,9 @@ importers: '@uwu/shelter-defs': specifier: ^1.5.1 version: 1.5.1 + '@uwu/shelter-ui': + specifier: ^0.0.6 + version: 0.0.6(solid-js@1.9.14) '@xmldom/xmldom': specifier: ^0.9.10 version: 0.9.10 @@ -1073,6 +1076,11 @@ packages: '@uwu/shelter-defs@1.5.1': resolution: {integrity: sha512-bO3M5SgqEpuNZkjd/LZFtTNNATpmVle5uznVp0QNgi3o1w2ej/ieYmwFK6nBZqnZHd8/4aJN1Njl/JbTnZcY5A==} + '@uwu/shelter-ui@0.0.6': + resolution: {integrity: sha512-b9NsUC7A+n4jZJl8TmXv+UKPAtfS9JygtRNASnophDkSF7evligMc21HGm8A7fh3PdBzr9VrepvehgmyUgRnLg==} + peerDependencies: + solid-js: ^1.6.16 + '@vencord/venmic@6.1.0': resolution: {integrity: sha512-YiCtzml/W8tYbGhu3jm5jfbbEnl2slKKARNK0jO+8qV979k9eFnfIRTxvhMN/SWq1h8ZNJdXVwvXpffQwq0RuA==} engines: {node: '>=14.15'} @@ -3843,6 +3851,10 @@ snapshots: solid-js: 1.6.16 spitroast: 2.1.4 + '@uwu/shelter-ui@0.0.6(solid-js@1.9.14)': + dependencies: + solid-js: 1.9.14 + '@vencord/venmic@6.1.0': dependencies: cmake-js: 7.4.0 diff --git a/rolldown.config.ts b/rolldown.config.ts index 72f49b2..c198230 100644 --- a/rolldown.config.ts +++ b/rolldown.config.ts @@ -31,6 +31,8 @@ export default defineConfig([ targets: [ { src: "src/**/**/*.html", dest: "ts-out/html/" }, { src: "src/**/**/*.css", dest: "ts-out/css/" }, + { src: "src/setup/setup.css", dest: "ts-out/html/" }, + { src: "node_modules/@uwu/shelter-ui/compat.css", dest: "ts-out/html/" }, { src: "src/**/**/*.js", dest: "ts-out/js/" }, { src: "package.json", dest: "ts-out/" }, { src: "assets/**/**", dest: "ts-out/assets/" }, diff --git a/src/common/config.ts b/src/common/config.ts index 921cfb2..9a6f85c 100644 --- a/src/common/config.ts +++ b/src/common/config.ts @@ -12,7 +12,7 @@ let configCache: Settings | null = null; let configCacheTime = 0; const CONFIG_CACHE_TTL = 5000; // Cache for 5 seconds const defaults: Settings = { - windowStyle: "default", + windowStyle: "overlay", channel: "stable", bounceOnPing: false, csp: "none", @@ -34,7 +34,7 @@ const defaults: Settings = { loopbackType: "loopback", }, multiInstance: false, - mods: ["vencord"], + mods: [], transparency: "none", windowMaterial: "mica", spellcheck: true, diff --git a/src/setup/main.ts b/src/setup/main.ts index 697c8c1..948dc6c 100644 --- a/src/setup/main.ts +++ b/src/setup/main.ts @@ -12,8 +12,8 @@ export async function createSetupWindow(): Promise { if (platform() !== "darwin") import("./tray.js"); return new Promise(() => { const windowOptions: BrowserWindowConstructorOptions = { - width: 800, - height: 600, + width: 840, + height: 720, title: getLang("setup-windowTitle"), darkTheme: true, icon: getConfig("customIcon") ?? path.join(import.meta.dirname, "../", "/assets/desktop.png"), diff --git a/src/setup/preload.mts b/src/setup/preload.mts index b4d89d4..b734e48 100644 --- a/src/setup/preload.mts +++ b/src/setup/preload.mts @@ -15,17 +15,7 @@ contextBridge.exposeInMainWorld("setup", { if (ipcRenderer.sendSync("setup-getOS") !== "darwin") { document.addEventListener("DOMContentLoaded", () => { - const css = document.createElement("style"); - css.innerHTML = `.bg { - background-image: url("legcord://assets/mockup.jpg"); - background-repeat: round; - height: 100%; - width: 100%; - position: absolute; - outline: 80px solid black; - -webkit-filter: blur(10px); - }`; - document.head.appendChild(css); + document.body.classList.add("has-setup-bg"); }); } diff --git a/src/setup/setup.css b/src/setup/setup.css new file mode 100644 index 0000000..4231b3a --- /dev/null +++ b/src/setup/setup.css @@ -0,0 +1,488 @@ +:root { + --font-primary: "gg sans", "Noto Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + --font-display: "gg sans", "Noto Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + --font-headline: "ABC Ginto Nord", "Noto Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --font-weight-extrabold: 800; + --saturation-factor: 1; + + /* Soft Legcord purple accents (kept quiet) */ + --setup-purple: var(--blurple-50); + --setup-purple-soft: rgba(88, 101, 242, 0.14); + --setup-purple-glow: rgba(114, 137, 218, 0.18); + + /* Discord Mana tokens (from stable web stylesheets / theme-dark) */ + --blurple-50-hsl: 234.935 calc(var(--saturation-factor, 1) * 85.556%) 64.706%; + --blurple-60-hsl: 232.941 calc(var(--saturation-factor, 1) * 46.667%) 50%; + --blurple-65-hsl: 232 calc(var(--saturation-factor, 1) * 47.511%) 43.333%; + --blurple-50: hsl(var(--blurple-50-hsl) / 1); + --blurple-60: hsl(var(--blurple-60-hsl) / 1); + --blurple-65: hsl(var(--blurple-65-hsl) / 1); + --neutral-1: #fff; + --opacity-white-8: hsl(0 0% 100% / 0.0784313725490196); + --opacity-4: hsl(0 0% 100% / 0.0392156862745098); + --opacity-12: hsl(0 0% 100% / 0.12156862745098039); + --opacity-16: hsl(0 0% 100% / 0.1607843137254902); + --opacity-20: hsl(0 0% 100% / 0.2); + + /* shelter-ui → Discord Mana control colors */ + --control-primary-background-default: var(--blurple-50); + --control-primary-background-hover: var(--blurple-60); + --control-primary-background-active: var(--blurple-65); + --control-primary-text-default: var(--neutral-1); + --control-primary-text-hover: var(--neutral-1); + --control-primary-text-active: var(--neutral-1); + --control-primary-border-default: var(--opacity-white-8); + --control-primary-border-hover: var(--opacity-white-8); + --control-primary-border-active: var(--opacity-white-8); + + --control-secondary-background-default: var(--opacity-12); + --control-secondary-background-hover: var(--opacity-16); + --control-secondary-background-active: var(--opacity-20); + --control-secondary-text-default: var(--neutral-1); + --control-secondary-text-hover: var(--neutral-1); + --control-secondary-text-active: var(--neutral-1); + --control-secondary-border-default: var(--opacity-4); + --control-secondary-border-hover: var(--opacity-4); + --control-secondary-border-active: var(--opacity-4); + + --custom-button-transition-duration: 170ms; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html, +body { + margin: 0; + height: 100%; + overflow: hidden; + font-family: var(--font-primary); + background: #1e1f22; + color: var(--text-default); + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; +} + +.draggable { + position: absolute; + top: 0; + width: 100%; + height: 40px; + -webkit-user-select: none; + user-select: none; + -webkit-app-region: drag; + z-index: 10; +} + +.bg { + position: absolute; + inset: 0; + background: + radial-gradient(ellipse 70% 50% at 50% -8%, var(--setup-purple-glow), transparent 58%), + radial-gradient(ellipse 40% 35% at 0% 100%, rgba(88, 101, 242, 0.08), transparent 55%), #1e1f22; +} + +body.has-setup-bg .bg { + background-image: + linear-gradient(180deg, rgba(30, 31, 34, 0.75), rgba(30, 31, 34, 0.9)), + radial-gradient(ellipse 60% 40% at 50% 0%, var(--setup-purple-glow), transparent 60%), + url("legcord://assets/mockup.jpg"); + background-size: cover; + background-position: center; + filter: none; +} + +body.has-setup-bg .bg::after { + content: ""; + position: absolute; + inset: 0; + backdrop-filter: blur(18px); + background: rgba(30, 31, 34, 0.32); +} + +#root { + position: relative; + z-index: 1; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + padding: 28px; +} + +.setup-shell { + position: relative; + width: 100%; + max-width: 560px; + max-height: calc(100vh - 56px); + display: flex; + flex-direction: column; + background: var(--modal-background, #313338); + border-radius: 12px; + box-shadow: + 0 0 0 1px rgba(0, 0, 0, 0.3), + 0 0 0 1px var(--setup-purple-soft), + 0 12px 28px rgba(0, 0, 0, 0.4); + overflow: hidden; +} + +.setup-shell::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 2px; + background: linear-gradient(90deg, transparent, var(--setup-purple) 35%, var(--setup-purple) 65%, transparent); + opacity: 0.55; + pointer-events: none; + z-index: 2; +} + +.setup-progress { + display: flex; + gap: 4px; + padding: 16px 20px 0; +} + +.setup-progress-segment { + flex: 1; + height: 4px; + border-radius: 2px; + background: rgba(88, 101, 242, 0.16); + transition: background 0.15s ease; +} + +.setup-progress-segment--done, +.setup-progress-segment--active { + background: var(--setup-purple); +} + +.setup-body { + padding: 22px 24px 14px; + overflow-y: auto; + flex: 1; + min-height: 0; +} + +.setup-footer { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + padding: 16px 24px; + background: var(--modal-footer-background, #2b2d31); + border-top: 1px solid rgba(0, 0, 0, 0.25); +} + +.setup-step-indicator { + color: var(--header-secondary); + font-family: var(--font-primary); + font-size: 12px; + font-weight: var(--font-weight-medium); + letter-spacing: 0.02em; + line-height: 16px; + white-space: nowrap; +} + +.setup-header { + margin-bottom: 20px; +} + +.setup-title { + margin: 0; + color: var(--header-primary, #f2f3f5); + font-family: var(--font-display); + font-size: 20px; + font-weight: var(--font-weight-semibold); + letter-spacing: 0.01em; + line-height: 1.2; +} + +.setup-title--hero { + font-size: 32px; + font-weight: var(--font-weight-bold); + line-height: 1.15; +} + +.setup-subtitle { + display: block; + margin: 8px 0 0; + color: var(--header-secondary, #b5bac1); + font-family: var(--font-primary); + font-size: 14px; + font-weight: var(--font-weight-normal); + line-height: 20px; + letter-spacing: 0; +} + +.setup-subtitle--hero { + margin-top: 10px; + margin-bottom: 24px; + max-width: 360px; + font-size: 16px; + line-height: 22px; +} + +.setup-welcome, +.setup-finish { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + padding: 24px 8px 28px; +} + +.setup-logo { + width: 88px; + height: 88px; + margin-bottom: 20px; + border-radius: 22px; + object-fit: cover; + box-shadow: + 0 0 0 1px rgba(88, 101, 242, 0.22), + 0 10px 28px rgba(0, 0, 0, 0.4), + 0 0 32px rgba(88, 101, 242, 0.18); +} + +.setup-finish-icon { + width: 64px; + height: 64px; + margin-bottom: 18px; +} + +.setup-finish-icon svg { + width: 100%; + height: 100%; + display: block; + filter: drop-shadow(0 6px 16px rgba(88, 101, 242, 0.35)); +} + +.setup-cta { + margin-top: 4px; + max-width: 100%; + font-family: var(--font-primary); + font-weight: var(--font-weight-medium); + letter-spacing: 0; + transition: + background-color var(--custom-button-transition-duration) ease, + color var(--custom-button-transition-duration) ease, + border-color var(--custom-button-transition-duration) ease; +} + +.setup-footer-btn { + font-family: var(--font-primary); + font-weight: var(--font-weight-medium); + transition: + background-color var(--custom-button-transition-duration) ease, + color var(--custom-button-transition-duration) ease, + border-color var(--custom-button-transition-duration) ease; +} + +.setup-note { + width: 100%; + margin: 0 0 22px; + padding: 12px 14px; + border-radius: 8px; + background: color-mix(in srgb, var(--setup-purple) 6%, var(--background-secondary, #2b2d31)); + border: 1px solid rgba(88, 101, 242, 0.12); + color: var(--header-secondary); + text-align: left; +} + +.setup-note p { + margin: 0; + font-family: var(--font-primary); + font-size: 14px; + line-height: 20px; + color: var(--header-secondary); +} + +.setup-options { + display: flex; + flex-direction: column; + gap: 8px; + padding-bottom: 8px; +} + +.setup-option { + display: flex; + align-items: center; + gap: 14px; + width: 100%; + padding: 12px; + border-radius: 8px; + border: 1px solid transparent; + background: var(--background-secondary, #2b2d31); + color: inherit; + text-align: left; + cursor: pointer; + font-family: var(--font-primary); + outline: none; + transition: + background 0.1s ease-out, + border-color 0.1s ease-out, + box-shadow 0.1s ease-out; + -webkit-app-region: no-drag; +} + +.setup-option:hover { + background: var(--background-surface-high, #393a41); +} + +.setup-option:focus-visible { + box-shadow: 0 0 0 2px var(--setup-purple); +} + +.setup-option--selected { + background: color-mix(in srgb, var(--setup-purple) 14%, var(--background-secondary, #2b2d31)); + border-color: color-mix(in srgb, var(--setup-purple) 55%, transparent); + box-shadow: inset 0 0 0 1px rgba(88, 101, 242, 0.2); +} + +.setup-option--selected:hover { + background: color-mix(in srgb, var(--setup-purple) 20%, var(--background-secondary, #2b2d31)); +} + +.setup-option-preview { + width: 128px; + height: 80px; + border-radius: 6px; + overflow: hidden; + flex-shrink: 0; + background: var(--input-background, #1e1f22); + box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.3); +} + +.setup-option-preview img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} + +.setup-option-icon { + width: 44px; + height: 44px; + border-radius: 10px; + overflow: hidden; + flex-shrink: 0; + background: var(--input-background, #1e1f22); + display: flex; + align-items: center; + justify-content: center; + box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.04); +} + +.setup-option-icon--selected { + background: color-mix(in srgb, var(--setup-purple) 18%, var(--input-background, #1e1f22)); +} + +.setup-option-icon img { + width: 100%; + height: 100%; + object-fit: contain; + display: block; +} + +.setup-option-content { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; + gap: 2px; +} + +.setup-option-title-row { + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; +} + +.setup-option-title { + color: var(--header-primary, #f2f3f5); + font-family: var(--font-primary); + font-size: 16px; + font-weight: var(--font-weight-semibold); + line-height: 20px; + letter-spacing: 0.01em; +} + +.setup-option-desc { + color: var(--header-secondary, #b5bac1); + font-family: var(--font-primary); + font-size: 14px; + font-weight: var(--font-weight-normal); + line-height: 18px; +} + +.setup-badge { + display: inline-flex; + align-items: center; + padding: 2px 6px; + border-radius: 3px; + background: var(--setup-purple); + color: #fff; + font-family: var(--font-primary); + font-size: 10px; + font-weight: var(--font-weight-bold); + letter-spacing: 0.04em; + text-transform: uppercase; + line-height: 14px; +} + +.setup-radio { + width: 20px; + height: 20px; + border-radius: 50%; + border: 2px solid var(--interactive-normal); + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + transition: + border-color 0.1s ease-out, + background 0.1s ease-out; +} + +.setup-radio--selected { + border-color: var(--setup-purple); + background: var(--setup-purple); +} + +.setup-radio-dot { + width: 8px; + height: 8px; + border-radius: 50%; + background: #fff; +} + +.setup-warning { + display: flex; + align-items: flex-start; + gap: 10px; + margin-bottom: 12px; + padding: 12px 14px; + border-radius: 8px; + background: rgba(240, 178, 50, 0.1); + border: 1px solid rgba(240, 178, 50, 0.28); + color: #f0b232; + font-family: var(--font-primary); + font-size: 14px; + line-height: 18px; +} + +.setup-warning-icon { + flex-shrink: 0; + width: 18px; + height: 18px; + margin-top: 1px; +} diff --git a/src/setup/setup.html b/src/setup/setup.html index 5347bc2..166abff 100644 --- a/src/setup/setup.html +++ b/src/setup/setup.html @@ -4,18 +4,8 @@ Legcord Setup - - + +

@@ -23,4 +13,4 @@
- \ No newline at end of file + diff --git a/src/setup/setup.tsx b/src/setup/setup.tsx index 29c8d14..d1fb686 100644 --- a/src/setup/setup.tsx +++ b/src/setup/setup.tsx @@ -1,122 +1,167 @@ -import { - Box, - ChevronLeft, - ChevronRight, - CircleAlert, - LaptopMinimal, - LaptopMinimalCheck, - MinimizeIcon, - Monitor, - PuzzleIcon, - Settings, - Sparkles, -} from "lucide-solid"; -import { createResource, createSignal, For, Show } from "solid-js"; +import { Button, ButtonColors, ButtonSizes, injectInternalStyles, niceScrollbarsClass } from "@uwu/shelter-ui"; +import { type Accessor, createMemo, createResource, createSignal, For, onMount, Show } from "solid-js"; import { render } from "solid-js/web"; import { Motion } from "solid-motionone"; -const Welcome = ({ onNext, t }: { onNext: () => void; t: () => Record | undefined }) => ( - - -

- {t()?.["setup-welcomeTitle"] ?? "Welcome to Legcord"} -

-

+injectInternalStyles(); + +type Lang = Record | undefined; + +const ctaStyle = { + "--shltr-btn-w": "280px", + "--shltr-btn-h": "44px", + "font-size": "16px", + "line-height": "20px", + padding: "2px 24px", +} as const; + +const footerBtnStyle = { + "--shltr-btn-w": "96px", + "--shltr-btn-h": "38px", +} as const; + +const WarningIcon = () => ( + +); + +const OptionCard = (props: { + selected: boolean; + onSelect: () => void; + title: string; + description: string; + badge?: string; + preview?: string; + icon?: string; +}) => ( + +); + +const Progress = (props: { current: number; total: number }) => ( +