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/assets/app/desktop.png b/assets/app/desktop.png
new file mode 100644
index 0000000..4ad0ad5
Binary files /dev/null and b/assets/app/desktop.png differ
diff --git a/assets/app/overlay.png b/assets/app/overlay.png
new file mode 100644
index 0000000..041a109
Binary files /dev/null and b/assets/app/overlay.png differ
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..6e1dc7d 100644
--- a/assets/lang/en-US.json
+++ b/assets/lang/en-US.json
@@ -78,6 +78,8 @@
"settings-automaticClientUpdates-desc": "Disables automatic Legcord updates",
"settings-hardwareAcceleration": "Hardware acceleration",
"settings-hardwareAcceleration-desc": "Hardware acceleration uses your GPU to make Legcord run faster. If you're experiencing visual glitches, try disabling this.",
+ "settings-sdpH264BaselineRewrite": "H.264 Baseline SDP rewrite",
+ "settings-sdpH264BaselineRewrite-desc": "Rewrites Discord's Constrained Baseline H.264 profile in WebRTC SDP so screenshare can use hardware encode (VideoToolbox / Media Foundation) instead of OpenH264. Disable if Go Live fails to connect or video is broken, then restart Legcord.",
"settings-processScanning": "Process scanning",
"settings-processScanning-desc": "Scan for running games to improve Rich Presence detection. Disable to reduce CPU usage. Requires a restart.",
"settings-windowsLegacyScanning": "Windows legacy scanning",
@@ -244,10 +246,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 +268,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/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..bbf7b24 100644
--- a/package.json
+++ b/package.json
@@ -40,17 +40,19 @@
"@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",
"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",
+ "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..dde3084 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
@@ -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
@@ -79,8 +82,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 +91,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
@@ -99,6 +102,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
@@ -460,12 +466,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'}
@@ -651,12 +666,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==}
@@ -672,8 +695,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==}
@@ -763,6 +786,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'}
@@ -772,8 +809,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]
@@ -783,8 +820,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]
@@ -794,8 +831,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]
@@ -805,8 +842,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]
@@ -816,8 +853,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]
@@ -828,8 +865,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]
@@ -841,22 +878,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]
@@ -868,8 +905,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]
@@ -881,15 +918,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]
@@ -899,8 +936,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]
@@ -909,8 +946,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]
@@ -925,8 +962,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]
@@ -974,6 +1011,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==}
@@ -1036,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'}
@@ -1078,6 +1123,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'}
@@ -1104,6 +1152,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'}
@@ -1131,6 +1186,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'}
@@ -1153,6 +1212,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==}
@@ -1189,6 +1251,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.
@@ -1222,9 +1287,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'}
@@ -1402,6 +1479,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==}
@@ -1423,6 +1503,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'}
@@ -1431,8 +1514,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
@@ -1448,6 +1531,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==}
@@ -1559,6 +1645,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==}
@@ -1606,8 +1695,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:
@@ -1834,6 +1923,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'}
@@ -1883,6 +1975,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==}
@@ -2141,6 +2236,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'}
@@ -2236,6 +2334,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'}
@@ -2253,6 +2355,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'}
@@ -2279,6 +2384,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==}
@@ -2294,6 +2406,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'}
@@ -2310,6 +2425,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'}
@@ -2351,8 +2470,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
@@ -2363,6 +2482,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==}
@@ -2480,6 +2602,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==}
@@ -2501,6 +2627,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==}
@@ -2617,6 +2746,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
@@ -2639,6 +2771,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'}
@@ -3170,7 +3305,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:
@@ -3193,16 +3328,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
@@ -3352,13 +3503,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':
@@ -3373,7 +3528,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
@@ -3436,7 +3591,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
@@ -3448,68 +3625,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':
@@ -3517,17 +3694,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':
@@ -3536,7 +3713,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': {}
@@ -3575,6 +3752,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
@@ -3669,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
@@ -3708,6 +3894,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: {}
@@ -3727,6 +3920,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
@@ -3791,6 +4032,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
@@ -3805,6 +4052,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)
@@ -3842,6 +4091,8 @@ snapshots:
binary-extensions@2.3.0: {}
+ bluebird@3.7.2: {}
+
boolean@3.2.0:
optional: true
@@ -3885,6 +4136,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
@@ -3906,6 +4183,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ bytestreamjs@2.0.1: {}
+
cacheable-lookup@5.0.4: {}
cacheable-request@7.0.4:
@@ -3982,7 +4261,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
@@ -4027,8 +4306,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:
@@ -4094,6 +4372,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)
@@ -4131,6 +4419,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
@@ -4144,14 +4436,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
@@ -4174,6 +4466,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
@@ -4318,6 +4624,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
@@ -4369,7 +4677,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
@@ -4380,7 +4688,6 @@ snapshots:
graceful-fs: 4.2.11
jsonfile: 6.2.1
universalify: 2.0.1
- optional: true
fs-extra@7.0.1:
dependencies:
@@ -4636,6 +4943,8 @@ snapshots:
is-unsafe@2.0.0: {}
+ isarray@1.0.0: {}
+
isbinaryfile@4.0.10: {}
isbinaryfile@5.0.7: {}
@@ -4668,6 +4977,8 @@ snapshots:
json-schema-traverse@0.4.1: {}
+ json-schema-traverse@1.0.0: {}
+
json-stringify-safe@5.0.1:
optional: true
@@ -4890,6 +5201,8 @@ snapshots:
undici: 6.26.0
which: 6.0.1
+ node-int64@0.4.0: {}
+
node-releases@2.0.46: {}
nopt@9.0.0:
@@ -4964,6 +5277,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
@@ -4983,6 +5305,8 @@ snapshots:
proc-log@6.1.0: {}
+ process-nextick-args@2.0.1: {}
+
progress@2.0.3: {}
promise-retry@2.0.1:
@@ -5010,6 +5334,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: {}
@@ -5028,6 +5358,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
@@ -5043,6 +5383,8 @@ snapshots:
require-directory@2.1.1: {}
+ require-from-string@2.0.2: {}
+
resedit@1.7.2:
dependencies:
pe-library: 0.4.1
@@ -5095,26 +5437,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:
@@ -5128,6 +5470,8 @@ snapshots:
dependencies:
queue-microtask: 1.2.3
+ safe-buffer@5.1.2: {}
+
safe-buffer@5.2.1:
optional: true
@@ -5238,6 +5582,8 @@ snapshots:
source-map@0.6.1: {}
+ spdx-license-list@6.11.0: {}
+
spitroast@2.1.4: {}
spitroast@2.1.6: {}
@@ -5259,6 +5605,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
@@ -5374,6 +5724,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
@@ -5389,8 +5747,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:
@@ -5399,6 +5756,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
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/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;
+}
diff --git a/src/@types/settings.d.ts b/src/@types/settings.d.ts
index 762da56..8b4f218 100644
--- a/src/@types/settings.d.ts
+++ b/src/@types/settings.d.ts
@@ -61,6 +61,8 @@ export interface Settings {
startMinimized: boolean;
keybinds: Keybind[];
hardwareAcceleration: boolean;
+ /** Rewrite H.264 Constrained Baseline (42e0) → Baseline (4200) in WebRTC SDP for HW encode. */
+ sdpH264BaselineRewrite: boolean;
useMacSystemPicker: boolean;
inviteWebsocket: boolean;
disableAutogain: boolean;
diff --git a/src/common/config.ts b/src/common/config.ts
index 921cfb2..955330a 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,11 +34,12 @@ const defaults: Settings = {
loopbackType: "loopback",
},
multiInstance: false,
- mods: ["vencord"],
+ mods: [],
transparency: "none",
windowMaterial: "mica",
spellcheck: true,
hardwareAcceleration: true,
+ sdpH264BaselineRewrite: true,
performanceMode: "none",
skipSplash: false,
inviteWebsocket: true,
@@ -81,6 +82,7 @@ const safeMode: Settings = {
windowStyle: "native",
csp: "vanilla",
hardwareAcceleration: false,
+ sdpH264BaselineRewrite: false,
disableHttpCache: true,
vaapi: false,
additionalArguments: "",
@@ -120,6 +122,11 @@ export function getConfig(object: K): Settings[K] {
configCacheTime = now;
return returnData[object];
}
+
+/** True when the settings toggle is on or `--start-minimized` was passed for this session. */
+export function shouldStartMinimized(): boolean {
+ return process.argv.includes("--start-minimized") || getConfig("startMinimized") === true;
+}
export function setConfig(object: K, toSet: Settings[K]): void {
const rawData = readFileSync(getConfigLocation(), "utf-8");
const parsed = JSON.parse(rawData) as Settings;
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;
}
diff --git a/src/discord/ipc.ts b/src/discord/ipc.ts
index 04e3419..cbd4a75 100644
--- a/src/discord/ipc.ts
+++ b/src/discord/ipc.ts
@@ -18,7 +18,7 @@ import {
unblacklistGame as blacklistGameRemove,
getBlacklist,
} from "../common/blacklistGame.js";
-import { getConfig, getConfigLocation, setConfig, setConfigBulk } from "../common/config.js";
+import { getConfig, getConfigLocation, setConfig, setConfigBulk, shouldStartMinimized } from "../common/config.js";
import { addDetectable, getDetectables, removeDetectable } from "../common/detectables.js";
import { getLang, getLangName, getRawLang, setLang } from "../common/lang.js";
import {
@@ -217,8 +217,8 @@ export function registerIpc(passedWindow: BrowserWindow): void {
});
ipcMain.on("splashEnd", () => {
- splashWindow.close();
- if (getConfig("startMinimized")) {
+ splashWindow?.close();
+ if (shouldStartMinimized()) {
passedWindow.hide();
} else {
passedWindow.show();
diff --git a/src/discord/preload/patches.mts b/src/discord/preload/patches.mts
index 6e37695..c984a68 100644
--- a/src/discord/preload/patches.mts
+++ b/src/discord/preload/patches.mts
@@ -36,7 +36,11 @@ const version = ipcRenderer.sendSync("displayVersion") as string;
// Discord's Go Live answer forces profile-level-id=42e01f (OpenH264); local-only munging
// is overwritten by setRemoteDescription, so the answer must be rewritten too.
// Without this, Windows burns CPU on OpenH264 even when Media Foundation HW encode is available.
+// Gated by settings.sdpH264BaselineRewrite (default on) so users can disable if negotiation breaks.
{
+ const rewriteBaselineSetting = ipcRenderer.sendSync("getConfig", "sdpH264BaselineRewrite") as boolean | undefined;
+ const preferHwH264 =
+ (process.platform === "darwin" || process.platform === "win32") && (rewriteBaselineSetting ?? true);
const bitrateScript = document.createElement("script");
bitrateScript.textContent = `(function () {
var CAP = "80000";
@@ -45,7 +49,7 @@ const version = ipcRenderer.sendSync("displayVersion") as string;
var MIN_BR = "3000";
var START_BR = "3000";
// VideoToolbox (macOS) and Media Foundation (Windows) HW encode avoid OpenH264 CBP.
- var preferHwH264 = ${process.platform === "darwin" || process.platform === "win32" ? "true" : "false"};
+ var preferHwH264 = ${preferHwH264 ? "true" : "false"};
function setOrAppendFmtpParam(sdp, key, value) {
var re = new RegExp(key + "=\\\\d+", "g");
if (sdp.indexOf(key + "=") !== -1) {
diff --git a/src/discord/window.ts b/src/discord/window.ts
index 7cb529d..3fb7724 100644
--- a/src/discord/window.ts
+++ b/src/discord/window.ts
@@ -14,7 +14,7 @@ import {
shell,
} from "electron";
import contextMenu from "electron-context-menu";
-import { firstRun, getConfig, setConfig } from "../common/config.js";
+import { firstRun, getConfig, setConfig, shouldStartMinimized } from "../common/config.js";
import { navigateTo } from "../common/dom.js";
import { forceQuit, setForceQuit } from "../common/forceQuit.js";
import { handleCommands, passedValidArgument } from "../common/handleCommands.js";
@@ -474,8 +474,13 @@ function doAfterDefiningTheWindow(passedWindow: BrowserWindow): void {
break;
}
- if (getConfig("skipSplash")) {
- passedWindow.show();
+ // When splash won't run, finalize visibility here (splashEnd never fires).
+ if (getConfig("skipSplash") || shouldStartMinimized()) {
+ if (shouldStartMinimized()) {
+ passedWindow.hide();
+ } else {
+ passedWindow.show();
+ }
}
}
diff --git a/src/main.ts b/src/main.ts
index fb35c9e..ba1b0cd 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -15,6 +15,7 @@ import {
setConfig,
setFirstRun,
setup,
+ shouldStartMinimized,
} from "./common/config.js";
import { getPreset } from "./common/flags.js";
import { setLang } from "./common/lang.js";
@@ -108,7 +109,9 @@ function args(): void {
export async function init(): Promise {
// Skip setup if bypass flag was used
if (bypassSetup || !(firstRun === true || undefined)) {
- if (getConfig("skipSplash") === false) {
+ // Splash owns the final show/hide via splashEnd; skip it when splash is disabled
+ // or when we intentionally start in the background.
+ if (getConfig("skipSplash") === false && !shouldStartMinimized()) {
void createSplashWindow(); // NOTE - Awaiting will hang at start
}
createWindow();
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 @@
-