i'm a selfish little fuck and just used tauri because i dont wanna learn a new thing

This commit is contained in:
starlight 2025-03-16 17:31:18 +13:00
parent f91a19f500
commit b7a9cdbd71
45 changed files with 1570 additions and 573 deletions

11
.gitignore vendored
View File

@ -1,2 +1,13 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
/target
Cargo.lock

7
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,7 @@
{
"recommendations": [
"svelte.svelte-vscode",
"tauri-apps.tauri-vscode",
"rust-lang.rust-analyzer"
]
}

16
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,16 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/src-tauri/target/debug/keydisplay",
"args": [],
"cwd": "${workspaceFolder}"
}
]
}

3
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"svelte.enable-ts-plugin": true
}

View File

@ -1,15 +0,0 @@
[package]
name = "keydisplay"
version = "0.1.0"
edition = "2021"
[dependencies]
serde = { version = "1.0", features = ["derive"] }
toml = "0.8"
dirs = "5.0"
inputbot = "0.6.0"
thiserror = "2.0.11"
slint = "1.9.2"
[build-dependencies]
slint-build = "1.9.2"

View File

@ -1,40 +1,3 @@
# keydisplay
note: you will need to add yourself to the input group or run as root if you intend to use wayland
you can do it like this
`doas usermod -aG input $USER`
## config.rs
- use serde with a config struct
- impl with defaults and read function
### read:
- get the current users config folder
- make a folder if the "keydisplay" folder doesnt exist
- make a keydisplay/config.toml if it doesnt exist
- give it 600 permissions
config:
- theme = {catppuccin_mocha, grey, night, day}
- [listen]
- - keys = "z, x"
- - mouse = "m1, m2"
- [display]
- - mouse = "key"
## listen.rs
- use inputbot to listen for inputs https://github.com/obv-mikhail/InputBot
- keys you can use are here https://docs.rs/inputbot/latest/src/inputbot/public.rs.html#300-352
## main.rs
- read config
- start listener on keys from config
- load gui using theme
ligma balls

View File

@ -1,3 +0,0 @@
fn main() {
slint_build::compile("ui/window.slint").expect("Slint build failed");
}

30
package.json Normal file
View File

@ -0,0 +1,30 @@
{
"name": "keydisplay",
"version": "0.1.0",
"description": "",
"type": "module",
"scripts": {
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"tauri": "tauri"
},
"license": "MIT",
"dependencies": {
"@tauri-apps/api": "^2",
"@tauri-apps/plugin-fs": "~2",
"@tauri-apps/plugin-opener": "^2"
},
"devDependencies": {
"@sveltejs/adapter-static": "^3.0.6",
"@sveltejs/kit": "^2.9.0",
"@sveltejs/vite-plugin-svelte": "^5.0.0",
"@tauri-apps/cli": "^2",
"svelte": "^5.0.0",
"svelte-check": "^4.0.0",
"typescript": "~5.6.2",
"vite": "^6.0.3"
}
}

7
src-tauri/.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
# Generated by Cargo
# will have compiled files and executables
/target/
# Generated by Tauri
# will have schema files for capabilities auto-completion
/gen/schemas

29
src-tauri/Cargo.toml Normal file
View File

@ -0,0 +1,29 @@
[package]
name = "keydisplay"
version = "0.1.0"
description = "A Tauri App"
authors = ["starlight"]
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
# The `_lib` suffix may seem redundant but it is necessary
# to make the lib name unique and wouldn't conflict with the bin name.
# This seems to be only an issue on Windows, see https://github.com/rust-lang/cargo/issues/8519
name = "keydisplay_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
[build-dependencies]
tauri-build = { version = "2", features = [] }
[dependencies]
tauri = { version = "2", features = [] }
tauri-plugin-opener = "2"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
toml = "0.8"
dirs = "5.0"
thiserror = "2.0.11"
tauri-plugin-fs = { version = "2.0.0", features = ["watch"] }
rdev = { version = "0.5.3", features = ["serde", "serialize"] }

3
src-tauri/build.rs Normal file
View File

@ -0,0 +1,3 @@
fn main() {
tauri_build::build()
}

View File

@ -0,0 +1,17 @@
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "default",
"description": "Capability for the main window",
"windows": [
"main"
],
"permissions": [
"core:default",
"opener:default",
"fs:default",
{
"identifier": "fs:allow-app-read-recursive",
"allow": [{"path": "$CONFIG/keydisplay"}]
}
]
}

BIN
src-tauri/icons/128x128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

BIN
src-tauri/icons/32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 974 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 903 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
src-tauri/icons/icon.icns Normal file

Binary file not shown.

BIN
src-tauri/icons/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
src-tauri/icons/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -1,6 +1,7 @@
use serde::{Deserialize, Serialize};
use std::fs;
use std::collections::HashMap;
use std::path::PathBuf;
use std::fs;
use thiserror::Error;
#[derive(Error, Debug)]
@ -16,13 +17,27 @@ pub enum ConfigError {
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(default)]
pub struct Config {
// theme = grey / night / day / catppuccin_mocha
pub default: bool,
pub theme: String,
pub listen: ListenConfig,
pub display: DisplayConfig,
}
// this is hack as fvck
// allows for removing the "default" line entirely
// basically if "default" is missing from the config then infer as false (hide default warning)
impl Default for Config {
fn default() -> Self {
Config {
default: false,
..Self::default()
}
}
}
// [listen]
#[derive(Debug, Serialize, Deserialize)]
pub struct ListenConfig {
@ -35,20 +50,31 @@ pub struct ListenConfig {
// [display]
#[derive(Debug, Serialize, Deserialize)]
pub struct DisplayConfig {
// "instant" or "ease"
pub press: String,
// display mouse buttons as a key or as an svg of a mouse
pub mouse: String,
// multiply default key length for the key by the float value
pub size: Vec<HashMap<String, f64>>,
// which keys to linebreak after
pub r#break: Vec<String>,
}
impl Config {
// Provide default values
pub fn default() -> Self {
Self {
default: true,
theme: "grey".to_string(),
listen: ListenConfig {
keys: vec!["ZKey".to_string(), "XKey".to_string()],
mouse: vec!["LeftButton".to_string(), "RightButton".to_string()],
keys: vec!["KeyZ".to_string(), "KeyX".to_string(), "MetaLeft".to_string()],
mouse: vec!["Left".to_string(), "Right".to_string()],
},
display: DisplayConfig {
press: "ease".to_string(),
mouse: "key".to_string(),
size: vec![HashMap::new()],
r#break: vec![],
},
}
}
@ -57,6 +83,7 @@ impl Config {
pub fn load_or_create(path: PathBuf) -> Result<Self, ConfigError> {
let full_path = path.join("config.toml");
// create a file with using the default config if it does not exist
if !full_path.exists() {
println!("Creating default config");
let config = Self::default();

206
src-tauri/src/lib.rs Normal file
View File

@ -0,0 +1,206 @@
use config::Config;
// Learn more about Tauri commands at https://tauri.app/develop/calling-rust/
use std::{collections::HashMap, sync::Mutex};
use tauri::{ipc::Channel, Manager, State};
use rdev::{Event, EventType, listen};
use std::thread;
mod config;
struct AppState {
config: Config,
}
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_fs::init())
.plugin(tauri_plugin_opener::init())
.invoke_handler(tauri::generate_handler![
get_config_path,
update_config,
get_default,
get_theme,
get_keys,
get_mouse_buttons,
get_mouse_display,
get_press_display,
get_size_display,
get_breaks,
start_listener,
label_from_keycode
])
.setup(|app| {
let config = config::Config::load_or_create(get_config_path()).unwrap();
let theme = &config.theme;
// Validate and set the theme
let themes = vec!["grey", "night", "day", "catppuccin_mocha"];
if themes.contains(&theme.as_str()) {
println!("Setting theme to: {}", theme);
app.manage(Mutex::new(AppState {
config: config,
}));
} else {
println!(
"{}",
format!("Theme {} is invalid! Valid themes are: {:?}", theme, themes)
);
}
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
// Commands
// Config commands
// gross but i tried returning a struct and everything froze up
#[tauri::command]
fn get_config_path() -> std::path::PathBuf {
let config_dir = dirs::config_dir().expect("Config directory not found");
config_dir.join("keydisplay")
}
// update the app state with new config
#[tauri::command]
fn update_config(state: State<'_, Mutex<AppState>>) {
let mut state = state.lock().unwrap();
state.config = config::Config::load_or_create(get_config_path()).unwrap();
}
#[tauri::command]
fn get_default(state: State<'_, Mutex<AppState>>) -> Result<bool, bool> {
let default = state.lock().unwrap().config.default.clone();
Ok(default)
}
#[tauri::command]
fn get_theme(state: State<'_, Mutex<AppState>>) -> Result<String, String> {
let theme = state.lock().unwrap().config.theme.clone();
Ok(theme)
}
#[tauri::command]
fn get_keys(state: State<'_, Mutex<AppState>>) -> Result<Vec<String>, Vec<String>> {
let keys = state.lock().unwrap().config.listen.keys.clone();
Ok(keys)
}
#[tauri::command]
fn get_mouse_buttons(state: State<'_, Mutex<AppState>>) -> Result<Vec<String>, Vec<String>> {
let mouse_buttons = state.lock().unwrap().config.listen.mouse.clone();
Ok(mouse_buttons)
}
#[tauri::command]
fn get_press_display(state: State<'_, Mutex<AppState>>) -> Result<String, String> {
let press_display = state.lock().unwrap().config.display.press.clone();
Ok(press_display)
}
#[tauri::command]
fn get_size_display(state: State<'_, Mutex<AppState>>) -> Result<Vec<HashMap<String, f64>>, Vec<HashMap<String, f64>>> {
let size_display = state.lock().unwrap().config.display.size.clone();
Ok(size_display)
}
#[tauri::command]
fn get_mouse_display(state: State<'_, Mutex<AppState>>) -> Result<String, String> {
let mouse_display = state.lock().unwrap().config.display.mouse.clone();
Ok(mouse_display)
}
#[tauri::command]
fn get_breaks(state: State<'_, Mutex<AppState>>) -> Result<Vec<String>, Vec<String>> {
let breaks = state.lock().unwrap().config.display.r#break.clone();
Ok(breaks)
}
// Input events
#[tauri::command]
fn start_listener(keys: Vec<String>, m_buttons: Vec<String>, channel: Channel<Event>) {
thread::spawn(move || {
println!("Started listening for keys: {:?} and buttons: {:?}", keys, m_buttons);
listen(move |event| {
match event.event_type {
EventType::KeyPress(key) | EventType::KeyRelease(key) => {
if keys.contains(&serde_json::to_string(&key).unwrap().replace("\"", "")) { channel.send(event).unwrap() };
},
EventType::ButtonPress(button) | EventType::ButtonRelease(button) => {
if m_buttons.contains(&serde_json::to_string(&button).unwrap().replace("\"", "")) { channel.send(event).unwrap() };
},
EventType::MouseMove { x, y } => (),
EventType::Wheel { delta_x, delta_y } => (),
}
})
});
}
// Other rust
#[tauri::command]
fn label_from_keycode(code: &str) -> &str {
match code {
// Keyboard
// Fine as-is
"Alt"|"AltGr"|"End"|"Home"|"Pause" => code,
// All alphabetical keys
c if c.starts_with("Key")
&& c.len() == 4
&& c.chars().nth(3).map_or(false, |c| c.is_ascii_alphabetic()) => &c[3..],
// Number row
c if c.starts_with("Num")
&& c.len() == 4
&& c.chars().nth(3).map_or(false, |c| c.is_numeric()) => &c[3..],
// All F keys
c if c.starts_with("F")
&& c.len() == 2
&& c.chars().nth(1).map_or(false, |c| c.is_numeric()) => c,
// Numpad numbers
c if c.starts_with("Kp")
&& c.len() == 3
&& c.chars().nth(2).map_or(false, |c| c.is_numeric()) => &c[2..],
// Individual mappings
"Backspace" => "🡐",
"CapsLock" => "Caps",
"ControlLeft"|"ControlRight" => "Ctrl",
"Delete"|"KpDelete" => "Del",
"DownArrow" => "",
"Escape" => "Esc",
"LeftArrow" => "",
"MetaLeft"|"MetaRight" => "Super",
"PageDown" => "PgDn",
"PageUp" => "PgUp",
"Return" => "",
"RightArrow" => "",
"ShiftLeft"|"ShiftRight" => "Shift",
// needs an obscure blank character (U+E002D) - css acts weird if its a space or anything the program interprets as one
"Space" => "󠀯",
"Tab" => "",
"UpArrow" => "",
"PrintScreen" => "PrtSc",
"ScrollLock" => "ScrLk",
"NumLock" => "Num",
"BackQuote" => "`",
"Minus" => "-",
"Equal" => "=",
"LeftBracket" => "(",
"RightBracket" => ")",
"SemiColon" => ";",
"Quote" => "\"",
"BackSlash"|"IntlBackslash" => "\\",
"Comma" => ",",
"Dot" => ".",
"Slash"|"KpDivide" => "/",
"Insert" => "Ins",
"KpReturn" => "",
"KpPlus" => "+",
"KpMultiply" => "*",
"Function" => "Fn",
// Mouse
"Left" => "M1",
"Right" => "M2",
"Middle" => "M3",
&_ => {
println!("Error creating frontend label for keycode: {}, displaying as Unknown", code);
"Unknown"
},
}
}

8
src-tauri/src/main.rs Normal file
View File

@ -0,0 +1,8 @@
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
mod config;
fn main() {
keydisplay_lib::run()
}

35
src-tauri/tauri.conf.json Normal file
View File

@ -0,0 +1,35 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "keydisplay",
"version": "0.1.0",
"identifier": "whatisthisanandroidapp.keydisplay.starlight",
"build": {
"beforeDevCommand": "yarn dev",
"devUrl": "http://localhost:1420",
"beforeBuildCommand": "yarn build",
"frontendDist": "../build"
},
"app": {
"windows": [
{
"title": "keydisplay",
"width": 800,
"height": 600
}
],
"security": {
"csp": null
}
},
"bundle": {
"active": true,
"targets": "all",
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
]
}
}

13
src/app.html Normal file
View File

@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>keydisplay</title>
%sveltekit.head%
</head>
<body data-sveltekit-preload-data="hover">
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>

View File

@ -1,316 +0,0 @@
use inputbot::{KeybdKey, KeybdKey::*, MouseButton, MouseButton::*};
pub fn listen(keys: Vec<KeybdKey>, m_buttons: Vec<MouseButton>) {
for key in keys {
key.bind(move || {
recieve_key_press(key);
while key.is_pressed() {
// theres probably a better way to do this
}
recieve_key_release(key);
})
}
for button in m_buttons {
button.bind(move || {
recieve_mouse_press(button);
while button.is_pressed() {}
recieve_mouse_release(button);
})
}
MiddleButton.bind(|| {
println!("aaa");
});
inputbot::handle_input_events();
}
// move me into gui.rs later
fn recieve_key_press(key: KeybdKey) {
println!("pressed {}", string_from_keybdkey(key));
}
fn recieve_key_release(key: KeybdKey) {
println!("released {}", string_from_keybdkey(key));
}
fn recieve_mouse_press(button: MouseButton) {
println!("pressed {}", string_from_mousebutton(button));
}
fn recieve_mouse_release(button: MouseButton) {
println!("released {}", string_from_mousebutton(button));
}
pub fn keybdkey_from_config(key: &str) -> KeybdKey {
match key {
"BackspaceKey" => BackspaceKey,
"TabKey" => TabKey,
"EnterKey" => EnterKey,
"EscapeKey" => EscapeKey,
"SpaceKey" => EscapeKey,
"PageUpKey" => PageUpKey,
"PageDownKey" => PageDownKey,
"EndKey" => EndKey,
"HomeKey" => HomeKey,
"LeftKey" => LeftKey,
"UpKey" => UpKey,
"RightKey" => RightKey,
"DownKey" => DownKey,
"InsertKey" => InsertKey,
"DeleteKey" => DeleteKey,
"Numrow0Key" => Numrow0Key,
"Numrow1Key" => Numrow1Key,
"Numrow2Key" => Numrow2Key,
"Numrow3Key" => Numrow3Key,
"Numrow4Key" => Numrow4Key,
"Numrow5Key" => Numrow5Key,
"Numrow6Key" => Numrow6Key,
"Numrow7Key" => Numrow7Key,
"Numrow8Key" => Numrow8Key,
"Numrow9Key" => Numrow9Key,
"AKey" => AKey,
"BKey" => BKey,
"CKey" => CKey,
"DKey" => DKey,
"EKey" => EKey,
"FKey" => FKey,
"GKey" => GKey,
"HKey" => HKey,
"IKey" => IKey,
"JKey" => JKey,
"KKey" => KKey,
"LKey" => LKey,
"MKey" => MKey,
"NKey" => NKey,
"OKey" => OKey,
"PKey" => PKey,
"QKey" => QKey,
"RKey" => RKey,
"SKey" => SKey,
"TKey" => TKey,
"UKey" => UKey,
"VKey" => VKey,
"WKey" => WKey,
"XKey" => XKey,
"YKey" => YKey,
"ZKey" => ZKey,
"LSuper" => LSuper,
"RSuper" => RSuper,
"Numpad0Key" => Numpad0Key,
"Numpad1Key" => Numpad1Key,
"Numpad2Key" => Numpad2Key,
"Numpad3Key" => Numpad3Key,
"Numpad4Key" => Numpad4Key,
"Numpad5Key" => Numpad5Key,
"Numpad6Key" => Numpad6Key,
"Numpad7Key" => Numpad7Key,
"Numpad8Key" => Numpad8Key,
"Numpad9Key" => Numpad9Key,
"F1Key" => F1Key,
"F2Key" => F2Key,
"F3Key" => F3Key,
"F4Key" => F4Key,
"F5Key" => F5Key,
"F6Key" => F6Key,
"F7Key" => F7Key,
"F8Key" => F8Key,
"F9Key" => F9Key,
"F10Key" => F10Key,
"F11Key" => F11Key,
"F12Key" => F12Key,
"F13Key" => F13Key,
"F14Key" => F14Key,
"F15Key" => F15Key,
"F16Key" => F16Key,
"F17Key" => F17Key,
"F18Key" => F18Key,
"F19Key" => F19Key,
"F20Key" => F20Key,
"F21Key" => F21Key,
"F22Key" => F22Key,
"F23Key" => F23Key,
"F24Key" => F24Key,
"NumLockKey" => NumLockKey,
"ScrollLockKey" => ScrollLockKey,
"CapsLockKey" => CapsLockKey,
"LShiftKey" => LShiftKey,
"RShiftKey" => RShiftKey,
"LControlKey" => LControlKey,
"RControlKey" => RControlKey,
"LAltKey" => LAltKey,
"RAltKey" => RAltKey,
"BrowserBackKey" => BrowserBackKey,
"BrowserForwardKey" => BrowserForwardKey,
"BrowserRefreshKey" => BrowserRefreshKey,
"VolumeMuteKey" => VolumeMuteKey,
"VolumeDownKey" => VolumeDownKey,
"VolumeUpKey" => VolumeUpKey,
"MediaNextTrackKey" => MediaNextTrackKey,
"MediaPrevTrackKey" => MediaPrevTrackKey,
"MediaStopKey" => MediaStopKey,
"MediaPlayPauseKey" => MediaPlayPauseKey,
"BackquoteKey" => BackquoteKey,
"SlashKey" => SlashKey,
"BackslashKey" => BackslashKey,
"CommaKey" => CommaKey,
"PeriodKey" => PeriodKey,
"MinusKey" => MinusKey,
"QuoteKey" => QuoteKey,
"SemicolonKey" => SemicolonKey,
"LBracketKey" => LBracketKey,
"RBracketKey" => RBracketKey,
"EqualKey" => EqualKey,
_ => panic!("invalid keycode!"),
}
}
pub fn string_from_keybdkey(key: KeybdKey) -> String {
match key {
BackspaceKey => String::from("🡐"),
TabKey => String::from(""),
EnterKey => String::from(""),
EscapeKey => String::from("ESC"),
SpaceKey => String::from(""),
PageUpKey => String::from("PGUP"),
PageDownKey => String::from("PGDN"),
EndKey => String::from("END"),
HomeKey => String::from("HOME"),
LeftKey => String::from(""),
UpKey => String::from(""),
RightKey => String::from(""),
DownKey => String::from(""),
InsertKey => String::from("INS"),
DeleteKey => String::from("DEL"),
Numrow0Key => String::from("0"),
Numrow1Key => String::from("1"),
Numrow2Key => String::from("2"),
Numrow3Key => String::from("3"),
Numrow4Key => String::from("4"),
Numrow5Key => String::from("5"),
Numrow6Key => String::from("6"),
Numrow7Key => String::from("7"),
Numrow8Key => String::from("8"),
Numrow9Key => String::from("9"),
AKey => String::from("A"),
BKey => String::from("B"),
CKey => String::from("C"),
DKey => String::from("D"),
EKey => String::from("E"),
FKey => String::from("F"),
GKey => String::from("G"),
HKey => String::from("H"),
IKey => String::from("I"),
JKey => String::from("J"),
KKey => String::from("K"),
LKey => String::from("L"),
MKey => String::from("M"),
NKey => String::from("N"),
OKey => String::from("O"),
PKey => String::from("P"),
QKey => String::from("Q"),
RKey => String::from("R"),
SKey => String::from("S"),
TKey => String::from("T"),
UKey => String::from("U"),
VKey => String::from("V"),
WKey => String::from("W"),
XKey => String::from("X"),
YKey => String::from("Y"),
ZKey => String::from("Z"),
LSuper => String::from("SUPER"),
RSuper => String::from("SUPER"),
Numpad0Key => String::from("0"),
Numpad1Key => String::from("1"),
Numpad2Key => String::from("2"),
Numpad3Key => String::from("3"),
Numpad4Key => String::from("4"),
Numpad5Key => String::from("5"),
Numpad6Key => String::from("6"),
Numpad7Key => String::from("7"),
Numpad8Key => String::from("8"),
Numpad9Key => String::from("9"),
F1Key => String::from("F1"),
F2Key => String::from("F2"),
F3Key => String::from("F3"),
F4Key => String::from("F4"),
F5Key => String::from("F5"),
F6Key => String::from("F6"),
F7Key => String::from("F7"),
F8Key => String::from("F8"),
F9Key => String::from("F9"),
F10Key => String::from("F10"),
F11Key => String::from("F11"),
F12Key => String::from("F12"),
F13Key => String::from("F13"),
F14Key => String::from("F14"),
F15Key => String::from("F15"),
F16Key => String::from("F16"),
F17Key => String::from("F17"),
F18Key => String::from("F18"),
F19Key => String::from("F19"),
F20Key => String::from("F20"),
F21Key => String::from("F21"),
F22Key => String::from("F22"),
F23Key => String::from("F23"),
F24Key => String::from("F24"),
NumLockKey => String::from("Num\nLock"),
ScrollLockKey => String::from("Scroll\nLock"),
CapsLockKey => String::from("CAPS"),
LShiftKey => String::from("SHIFT"),
RShiftKey => String::from("SHIFT"),
LControlKey => String::from("CTRL"),
RControlKey => String::from("CTRL"),
LAltKey => String::from("ALT"),
RAltKey => String::from("ALT"),
BrowserBackKey => String::from("🡨"),
BrowserForwardKey => String::from("🡪"),
BrowserRefreshKey => String::from(""),
VolumeMuteKey => String::from("🔊"),
VolumeDownKey => String::from("🔉"),
VolumeUpKey => String::from("🔈+"),
MediaNextTrackKey => String::from(""),
MediaPrevTrackKey => String::from(""),
MediaStopKey => String::from(""),
MediaPlayPauseKey => String::from(""),
BackquoteKey => String::from("`"),
SlashKey => String::from("/"),
BackslashKey => String::from("\\"),
CommaKey => String::from(","),
PeriodKey => String::from("."),
MinusKey => String::from("-"),
QuoteKey => String::from("\""),
SemicolonKey => String::from(";"),
LBracketKey => String::from("("),
RBracketKey => String::from("),"),
EqualKey => String::from("="),
_ => panic!("invalid keycode!"),
}
}
pub fn mousebutton_from_config(button: &str) -> MouseButton {
match button {
"LeftButton" => LeftButton,
"MiddleButton" => MiddleButton,
"RightButton" => RightButton,
_ => {
panic!("invalid mouse button! (InputBot hasn't implemented it or your config is wrong)")
}
}
}
pub fn string_from_mousebutton(button: MouseButton) -> String {
match button {
LeftButton => String::from("M1"),
MiddleButton => String::from("M3"),
RightButton => String::from("M2"),
_ => {
panic!("invalid mouse button! (InputBot hasn't implemented it or your config is wrong)")
}
}
}

View File

@ -1,124 +0,0 @@
slint::include_modules!();
use inputbot::{KeybdKey, MouseButton};
use listen::*;
use slint::Color;
//use theme::*;
mod config;
mod listen;
//mod theme;
use std::thread;
fn parse_config() -> Result<config::Config, config::ConfigError> {
let config_dir = dirs::config_dir().expect("Config directory not found");
let keydisplay_dir = config_dir.join("keydisplay");
config::Config::load_or_create(keydisplay_dir)
}
// obs
const GREY: slint_generatedMainWindow::Theme = Theme {
app_background: Color::from_argb_encoded(0xFF2F2F2F),
key_background: Color::from_argb_encoded(0xFF363636),
key_background_pressed: Color::from_argb_encoded(0xFF212121),
key_border: Color::from_argb_encoded(0xFF737373),
key_text: Color::from_argb_encoded(0xFFFFFFFF),
key_text_pressed: Color::from_argb_encoded(0xFFFFFFFF),
};
// florisboard themes
const NIGHT: slint_generatedMainWindow::Theme = Theme {
app_background: Color::from_argb_encoded(0xFF000000),
key_background: Color::from_argb_encoded(0xFF111111),
key_background_pressed: Color::from_argb_encoded(0xFF212121),
key_border: Color::from_argb_encoded(0xFF707070),
key_text: Color::from_argb_encoded(0xFFEEEEEE),
key_text_pressed: Color::from_argb_encoded(0xFFEEEEEE),
};
const DAY: slint_generatedMainWindow::Theme = Theme {
app_background: Color::from_argb_encoded(0xFFE0E0E0),
key_background: Color::from_argb_encoded(0xFFFFFFFF),
key_background_pressed: Color::from_argb_encoded(0xFFEEEEEE),
key_border: Color::from_argb_encoded(0xFFFFFFFF),
key_text: Color::from_argb_encoded(0xFF000000),
key_text_pressed: Color::from_argb_encoded(0xFF000000),
};
// guess
const CATPPUCCIN_MOCHA: slint_generatedMainWindow::Theme = Theme {
app_background: Color::from_argb_encoded(0xFF181825),
key_background: Color::from_argb_encoded(0xFF1E1E2E),
key_background_pressed: Color::from_argb_encoded(0xFF313244),
key_border: Color::from_argb_encoded(0xFFF5E0DC),
key_text: Color::from_argb_encoded(0xFFCDD6F4),
key_text_pressed: Color::from_argb_encoded(0xFFCDD6F4),
};
pub fn theme_from_config(theme: &str) -> slint_generatedMainWindow::Theme {
match theme {
"grey" => GREY,
"night" => NIGHT,
"day" => DAY,
"catppuccin_mocha" => CATPPUCCIN_MOCHA,
_ => {
println!("invalid theme provided by config, defaulting to grey");
GREY
}
}
}
fn run_gui(
keys: Vec<KeybdKey>,
m_buttons: Vec<MouseButton>,
theme: String,
) -> Result<(), slint::PlatformError> {
let ui = MainWindow::new()?;
let mut keyitems: Vec<KeyData> = Vec::new();
for key in keys {
keyitems.push(KeyData {
key: string_from_keybdkey(key).into(),
})
}
let mut mouseitems: Vec<KeyData> = Vec::new();
for button in m_buttons {
mouseitems.push(KeyData {
key: string_from_mousebutton(button).into(),
})
}
ui.set_theme(theme_from_config(&theme));
ui.set_keys(std::rc::Rc::new(slint::VecModel::from(keyitems)).into());
ui.set_m_buttons(std::rc::Rc::new(slint::VecModel::from(mouseitems)).into());
ui.run()
}
fn main() {
println!("Hello, world!");
let config = parse_config().unwrap();
let mut config_to_keys: Vec<KeybdKey> = Vec::new();
for key in config.listen.keys {
// rust is magic 😍 🦀
config_to_keys.push(keybdkey_from_config(&key));
}
let mut config_to_mouse: Vec<MouseButton> = Vec::new();
for button in config.listen.mouse {
config_to_mouse.push(mousebutton_from_config(&button));
}
let hack = config_to_keys.clone();
let hack2 = config_to_mouse.clone();
thread::spawn(move || {
listen(config_to_keys, config_to_mouse);
});
let _ = run_gui(hack, hack2, config.theme);
}

5
src/routes/+layout.ts Normal file
View File

@ -0,0 +1,5 @@
// Tauri doesn't have a Node.js server to do proper SSR
// so we will use adapter-static to prerender the app (SSG)
// See: https://v2.tauri.app/start/frontend/sveltekit/ for more info
export const prerender = true;
export const ssr = false;

216
src/routes/+page.svelte Normal file
View File

@ -0,0 +1,216 @@
<script lang="ts">
import { invoke, Channel } from "@tauri-apps/api/core";
import Key from "./Key.svelte";
import { onMount } from "svelte";
import { listen } from "@tauri-apps/api/event";
import { watchImmediate } from "@tauri-apps/plugin-fs";
// rdev::Event
type KeyEvent = {
time: {
secs_since_epoch: number,
nanos_since_epoch: number,
},
name: string | null,
event_type: | { KeyPress: string }
| { KeyRelease: string }
| { ButtonPress: string }
| { ButtonRelease: string }
| { MouseMove : { x: number, y: number }}
| { Wheel: { delta_x: number, delta_y: number } }
}
// type with props for the Key component
type KeyElement = {
label: string,
code: string,
pressed: boolean
}
// scoping
let keys: Array<string>, mouse_buttons: Array<string>;
let key_elements: Array<KeyElement>, mouse_button_elements: Array<KeyElement>;
let default_config: boolean;
let config_path: string;
let breaks: Set<string>;
onMount(async () => {
// on launch
await handle_config();
// watch for changes in the config
try {
config_path = await invoke<string>('get_config_path');
watchImmediate(config_path, async (event) => {
if(event.type.valueOf().hasOwnProperty("modify")) {
console.log(event)
if(event.paths[0].split("/").at(-1) == "config.toml") {
await invoke('update_config');
await handle_config();
}
}
});
} catch (error) {
console.error("Couldn't watch config file: ", error)
}
// create listener for events
const KeyListener = new Channel<KeyEvent>();
// handle key event by modifying the key_elements and mouse_button_elements arrays
KeyListener.onmessage = (message) => {
switch (Object.keys(message.event_type)[0]) {
case 'KeyPress':
handleKeyEvent(Object.values(message.event_type)[0], true);
break;
case 'KeyRelease':
handleKeyEvent(Object.values(message.event_type)[0], false);
break;
case 'ButtonPress':
handleMouseEvent(Object.values(message.event_type)[0], true);
break;
case 'ButtonRelease':
handleMouseEvent(Object.values(message.event_type)[0], false);
break;
default:
console.warn("Unhandled event: ", message);
}
console.log("Recieved event: ", message.event_type);
};
async function handleKeyEvent(code: string, isPressed: boolean) {
key_elements = key_elements.map(key => {
if (key.code === code) {
return { ...key, pressed: isPressed}
}
return key;
});
}
async function handleMouseEvent(code: string, isPressed: boolean) {
mouse_button_elements = mouse_button_elements.map(button => {
if (button.code === code) {
return { ...button, pressed: isPressed}
}
return button;
});
}
// invoke backend key listener that will send the events
await invoke('start_listener', {
keys: keys,
// named mButtons and not m_buttons because weird naming """conventions""" (WHO CARES)
mButtons: mouse_buttons,
channel: KeyListener
});
});
// configure the program based on the config file
async function handle_config() {
console.log("Handling config");
// set the theme
let root: HTMLHtmlElement | null;
root = document.querySelector("html");
try {
const theme = await invoke<string>('get_theme');
console.log("Got theme from backend: ", theme);
root?.setAttribute("data-selected-theme", theme);
} catch (error) {
console.error(`Failed to get theme from rust backend: ${error}. Falling back to theme "grey".`);
root?.setAttribute("data-selected-theme", "grey");
}
// update if config is the default
try {
default_config = await invoke<boolean>('get_default');
} catch (error) {
console.error(`Failed to run get_default from the rust backend: ${error}`);
}
// set display for keypresses
try {
let press_display = await invoke('get_press_display');
switch (press_display) {
case "instant":
case "ease":
root?.setAttribute("data-press-display", press_display);
break;
default:
console.warn('"press" field in [display] of the config is an invalid value, falling back to "ease"');
root?.setAttribute("data-press-display", "ease");
}
} catch (error) {
console.error(`Failed to run get_press_display from the rust backend: ${error}`);
}
// get linebreaks
try {
breaks = new Set(await invoke<Array<string>>("get_breaks"));
} catch (error) {
console.error(`Failed to get "break" config field from rust backend: ${error}`);
}
// load the keys/mousebuttons
try {
keys = await invoke<Array<string>>('get_keys');
mouse_buttons = await invoke<Array<string>>('get_mouse_buttons');
key_elements = await Promise.all(keys.map(async key => {
return {
label: await invoke<string>("label_from_keycode", { code: key }),
code: key,
pressed: false
}
}));
mouse_button_elements = await Promise.all(mouse_buttons.map(async button => {
return {
label: await invoke<string>("label_from_keycode", { code: button }),
code: button,
pressed: false
};
}));
} catch (error) {
console.error("Failed to process keys: ", error)
}
}
</script>
<link rel="stylesheet" href="/global.css">
<main class="container">
{#if default_config}
<div id="default_config">Docs for configuring this program are at <a href="https://git.stardust.wtf/starlight/keydisplay/src/branch/main/README.md">https://git.stardust.wtf/starlight/keydisplay/src/branch/main/README.md</a><br>You can disable this annoying notice by removing the <code>default = true</code> line from <code>{config_path}</code> :)</div>
{/if}
<div id="keys">
{#each key_elements as key (key.code)}
<Key
label={key.label}
code={key.code}
pressed={key.pressed}
>
</Key>
{#if breaks.has(key.code)}
<br>
{/if}
{/each}
</div>
<div id="mouse_buttons">
{#each mouse_button_elements as button (button.code)}
<Key
label={button.label}
code={button.code}
pressed={button.pressed}
>
</Key>
{#if breaks.has(button.code)}
<br>
{/if}
{/each}
</div>
</main>

14
src/routes/Key.svelte Normal file
View File

@ -0,0 +1,14 @@
<!-- generic "key" -->
<script>
export let label = "";
export let code = "";
export let pressed = false;
// Optional: Add press animation
import { quintOut } from "svelte/easing";
import { crossfade } from "svelte/transition";
</script>
<link rel="stylesheet" href="/global.css">
<div class="key" class:pressed={pressed} data-keycode={code}>
{label}
</div>

BIN
static/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

158
static/global.css Normal file
View File

@ -0,0 +1,158 @@
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
html,
body,
div,
span,
h1,
h2,
h3,
h4,
h5,
h6,
p,
a,
code,
img {
margin: 0;
padding: 0;
border: 0;
outline: none;
text-decoration: none;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* https://fossheim.io/writing/posts/accessible-theme-picker-html-css-js/ */
:root,
[data-selected-theme="grey"] {
--color-app-background: #2F2F2F;
--color-key-background: #363636;
--color-key-background-pressed: #212121;
--color-text: #fff;
--color-accent: #737373;
}
[data-selected-theme="night"] {
--color-app-background: #000;
--color-key-background: #0f0f0f;
--color-key-background-pressed: #212121;
--color-text: #eee;
--color-accent: #525151;
}
[data-selected-theme="day"] {
--color-app-background: #e0e0e0;
--color-key-background: #fff;
--color-key-background-pressed: #eee;
--color-text: #000;
--color-accent: #fff;
}
[data-selected-theme="catppuccin_mocha"] {
--color-app-background: #181825;
--color-key-background: #1e1e2e;
--color-key-background-pressed: #313244;
--color-text: #cdd6f4;
--color-accent: #f5e0dc;
}
:root {
background-color: var(--color-app-background);
color: var(--color-text);
font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
font-size: 16px;
line-height: 24px;
font-weight: 400;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-text-size-adjust: 100%;
}
.container {
margin: 0;
display: flex;
flex-direction: column;
justify-content: center;
text-align: center;
}
button {
border-radius: 8px;
border: 1px solid transparent;
padding: 0.6em 1.2em;
font-size: 1em;
font-weight: 500;
font-family: inherit;
color: #0f0f0f;
background-color: #ffffff;
transition: border-color 0.25s;
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2);
cursor: pointer;
outline: none;
}
button:hover {
border-color: #396cd8;
}
button:active {
border-color: #396cd8;
background-color: #e8e8e8;
}
a {
color:#ABFFAC;
text-decoration: underline;
}
code {
font-family: monospace;
}
div#default_config {
color: #FFF;
background-color: #F37945;
border: 2px solid #EB5B28;
border-radius: 10px;
width: 95vw;
margin-inline: auto;
margin-top: 5px;
overflow-wrap: break-word;
}
div#keys,
div#mouse_buttons {
/* horizontal spacing between keys is dependent on font-size of the parent div? */
font-size: 0;
}
.key {
width: 100px;
height: 100px;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 20px;
margin: 5px;
border: 5px solid var(--color-accent);
border-radius: 5px;
transition: var(--pressed-transition);
background-color: var(--color-key-background);
cursor: pointer;
user-select: none;
}
[data-press-display="ease"] {
--pressed-transition: background-color 0.1s ease, transform 0.1s ease;
}
.pressed {
background-color: var(--color-key-background-pressed) !important;
transform: scale(0.95);
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}

15
svelte.config.js Normal file
View File

@ -0,0 +1,15 @@
// Tauri doesn't have a Node.js server to do proper SSR
// so we will use adapter-static to prerender the app (SSG)
// See: https://v2.tauri.app/start/frontend/sveltekit/ for more info
import adapter from "@sveltejs/adapter-static";
import { vitePreprocess } from "@sveltejs/vite-plugin-svelte";
/** @type {import('@sveltejs/kit').Config} */
const config = {
preprocess: vitePreprocess(),
kit: {
adapter: adapter(),
},
};
export default config;

19
tsconfig.json Normal file
View File

@ -0,0 +1,19 @@
{
"extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": {
"allowJs": true,
"checkJs": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"moduleResolution": "bundler"
}
// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
// except $lib which is handled by https://kit.svelte.dev/docs/configuration#files
//
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
// from the referenced tsconfig.json - TypeScript does not merge them in
}

View File

@ -1,74 +0,0 @@
export struct Theme {
app_background: color,
key_background: color,
key_background_pressed: color,
key_border: color,
key_text: color,
key_text_pressed: color,
}
struct KeyData {
key: string,
}
component Key inherits Rectangle {
in-out property <string> key_text_content;
in-out property <color> key_background;
in-out property <color> key_border;
in-out property <color> key_text_color;
width: 100px;
height: 100px;
border-width: 5px;
border-radius: 5px;
background: key_background;
border-color: key_border;
Text {
text: "\{key_text_content}";
font-weight: 800;
color: key_text_color;
horizontal-alignment: center;
vertical-alignment: center;
}
}
export component MainWindow inherits Window {
in-out property <Theme> theme;
in-out property <[KeyData]> keys;
in-out property <[KeyData]> m_buttons;
keys: [];
m_buttons: [];
title: "keydisplay";
// 14 px padding + 100px for every key + 5px for every space + 14 px padding
width: 14px+(100px*(keys.length + m_buttons.length))+(5px*(keys.length + m_buttons.length - 1))+14px;
height: 128px;
default-font-size: 25px;
background: theme.app_background;
HorizontalLayout {
padding: 14px;
spacing: 5px;
for key[i] in keys : Key{
key_text_content: key.key;
key_background: theme.key_background;
key_border: theme.key_border;
key_text_color: theme.key_text;
}
for button[i] in m_buttons : Key{
key_text_content: button.key;
key_background: theme.key_background;
key_border: theme.key_border;
key_text_color: theme.key_text;
}
}
}

32
vite.config.js Normal file
View File

@ -0,0 +1,32 @@
import { defineConfig } from "vite";
import { sveltekit } from "@sveltejs/kit/vite";
// @ts-expect-error process is a nodejs global
const host = process.env.TAURI_DEV_HOST;
// https://vitejs.dev/config/
export default defineConfig(async () => ({
plugins: [sveltekit()],
// Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
//
// 1. prevent vite from obscuring rust errors
clearScreen: false,
// 2. tauri expects a fixed port, fail if that port is not available
server: {
port: 1420,
strictPort: true,
host: host || false,
hmr: host
? {
protocol: "ws",
host,
port: 1421,
}
: undefined,
watch: {
// 3. tell vite to ignore watching `src-tauri`
ignored: ["**/src-tauri/**"],
},
},
}));

695
yarn.lock Normal file
View File

@ -0,0 +1,695 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@ampproject/remapping@^2.3.0":
version "2.3.0"
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
dependencies:
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.24"
"@esbuild/aix-ppc64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461"
integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==
"@esbuild/android-arm64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894"
integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==
"@esbuild/android-arm@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3"
integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==
"@esbuild/android-x64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb"
integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==
"@esbuild/darwin-arm64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936"
integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==
"@esbuild/darwin-x64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9"
integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==
"@esbuild/freebsd-arm64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00"
integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==
"@esbuild/freebsd-x64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f"
integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==
"@esbuild/linux-arm64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43"
integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==
"@esbuild/linux-arm@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736"
integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==
"@esbuild/linux-ia32@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5"
integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==
"@esbuild/linux-loong64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc"
integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==
"@esbuild/linux-mips64el@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb"
integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==
"@esbuild/linux-ppc64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412"
integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==
"@esbuild/linux-riscv64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694"
integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==
"@esbuild/linux-s390x@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577"
integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==
"@esbuild/linux-x64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f"
integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==
"@esbuild/netbsd-arm64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6"
integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==
"@esbuild/netbsd-x64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40"
integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==
"@esbuild/openbsd-arm64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f"
integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==
"@esbuild/openbsd-x64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205"
integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==
"@esbuild/sunos-x64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6"
integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==
"@esbuild/win32-arm64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85"
integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==
"@esbuild/win32-ia32@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2"
integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==
"@esbuild/win32-x64@0.24.2":
version "0.24.2"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b"
integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==
"@jridgewell/gen-mapping@^0.3.5":
version "0.3.8"
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142"
integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
dependencies:
"@jridgewell/set-array" "^1.2.1"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping" "^0.3.24"
"@jridgewell/resolve-uri@^3.1.0":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
"@jridgewell/set-array@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15", "@jridgewell/sourcemap-codec@^1.5.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
version "0.3.25"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
dependencies:
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
"@polka/url@^1.0.0-next.24":
version "1.0.0-next.28"
resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.28.tgz#d45e01c4a56f143ee69c54dd6b12eade9e270a73"
integrity sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==
"@rollup/rollup-android-arm-eabi@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz#9b726b4dcafb9332991e9ca49d54bafc71d9d87f"
integrity sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==
"@rollup/rollup-android-arm64@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz#88326ff46168a47851077ca0bf0c442689ec088f"
integrity sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==
"@rollup/rollup-darwin-arm64@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz#b8fbcc9389bc6fad3334a1d16dbeaaa5637c5772"
integrity sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==
"@rollup/rollup-darwin-x64@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz#1aa2bcad84c0fb5902e945d88822e17a4f661d51"
integrity sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==
"@rollup/rollup-freebsd-arm64@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz#29c54617e0929264dcb6416597d6d7481696e49f"
integrity sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==
"@rollup/rollup-freebsd-x64@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz#a8b58ab7d31882559d93f2d1b5863d9e4b4b2678"
integrity sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==
"@rollup/rollup-linux-arm-gnueabihf@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz#a844e1978c8b9766b169ecb1cb5cc0d8a3f05930"
integrity sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==
"@rollup/rollup-linux-arm-musleabihf@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz#6b44c3b7257985d71b087fcb4ef01325e2fff201"
integrity sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==
"@rollup/rollup-linux-arm64-gnu@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz#ebb499cf1720115256d0c9ae7598c90cc2251bc5"
integrity sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==
"@rollup/rollup-linux-arm64-musl@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz#9658221b59d9e5643348f9a52fa5ef35b4dc07b1"
integrity sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==
"@rollup/rollup-linux-loongarch64-gnu@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz#19418cc57579a5655af2d850a89d74b3f7e9aa92"
integrity sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==
"@rollup/rollup-linux-powerpc64le-gnu@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz#fe0bce7778cb6ce86898c781f3f11369d1a4952c"
integrity sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==
"@rollup/rollup-linux-riscv64-gnu@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz#9c158360abf6e6f7794285642ba0898c580291f6"
integrity sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==
"@rollup/rollup-linux-s390x-gnu@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz#f9113498d22962baacdda008b5587d568b05aa34"
integrity sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==
"@rollup/rollup-linux-x64-gnu@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz#aec8d4cdf911cd869a72b8bd00833cb426664e0c"
integrity sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==
"@rollup/rollup-linux-x64-musl@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz#61c0a146bdd1b5e0dcda33690dd909b321d8f20f"
integrity sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==
"@rollup/rollup-win32-arm64-msvc@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz#c6c5bf290a3a459c18871110bc2e7009ce35b15a"
integrity sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==
"@rollup/rollup-win32-ia32-msvc@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz#16ca6bdadc9e054818b9c51f8dac82f6b8afab81"
integrity sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==
"@rollup/rollup-win32-x64-msvc@4.34.6":
version "4.34.6"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz#f3d03ce2d82723eb089188ea1494a719b09e1561"
integrity sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==
"@sveltejs/adapter-static@^3.0.6":
version "3.0.8"
resolved "https://registry.yarnpkg.com/@sveltejs/adapter-static/-/adapter-static-3.0.8.tgz#f23ee99a9678dbaec58b79d183bc3defbfe99f1a"
integrity sha512-YaDrquRpZwfcXbnlDsSrBQNCChVOT9MGuSg+dMAyfsAa1SmiAhrA5jUYUiIMC59G92kIbY/AaQOWcBdq+lh+zg==
"@sveltejs/kit@^2.9.0":
version "2.17.1"
resolved "https://registry.yarnpkg.com/@sveltejs/kit/-/kit-2.17.1.tgz#24a55dc164f2c88511daac6fcc8bb7db6802d1ba"
integrity sha512-CpoGSLqE2MCmcQwA2CWJvOsZ9vW+p/1H3itrFykdgajUNAEyQPbsaSn7fZb6PLHQwe+07njxje9ss0fjZoCAyw==
dependencies:
"@types/cookie" "^0.6.0"
cookie "^0.6.0"
devalue "^5.1.0"
esm-env "^1.2.2"
import-meta-resolve "^4.1.0"
kleur "^4.1.5"
magic-string "^0.30.5"
mrmime "^2.0.0"
sade "^1.8.1"
set-cookie-parser "^2.6.0"
sirv "^3.0.0"
"@sveltejs/vite-plugin-svelte-inspector@^4.0.1":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-4.0.1.tgz#2f99a4a593bb910d1492f6c00a042b521c07147e"
integrity sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==
dependencies:
debug "^4.3.7"
"@sveltejs/vite-plugin-svelte@^5.0.0":
version "5.0.3"
resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-5.0.3.tgz#50f425c677243e00fda0402c049f28b489c7ab81"
integrity sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==
dependencies:
"@sveltejs/vite-plugin-svelte-inspector" "^4.0.1"
debug "^4.4.0"
deepmerge "^4.3.1"
kleur "^4.1.5"
magic-string "^0.30.15"
vitefu "^1.0.4"
"@tauri-apps/api@^2", "@tauri-apps/api@^2.0.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.2.0.tgz#daaff2515b1a4ff1e763cf84a414548b02b566c5"
integrity sha512-R8epOeZl1eJEl603aUMIGb4RXlhPjpgxbGVEaqY+0G5JG9vzV/clNlzTeqc+NLYXVqXcn8mb4c5b9pJIUDEyAg==
"@tauri-apps/cli-darwin-arm64@2.2.7":
version "2.2.7"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.2.7.tgz#42ec056eb19309aa50b11c9568b6c0e6637f41ca"
integrity sha512-54kcpxZ3X1Rq+pPTzk3iIcjEVY4yv493uRx/80rLoAA95vAC0c//31Whz75UVddDjJfZvXlXZ3uSZ+bnCOnt0A==
"@tauri-apps/cli-darwin-x64@2.2.7":
version "2.2.7"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.2.7.tgz#60cb5806e7bec9af2e22ae38a6bd2a769b0a61b0"
integrity sha512-Vgu2XtBWemLnarB+6LqQeLanDlRj7CeFN//H8bVVdjbNzxcSxsvbLYMBP8+3boa7eBnjDrqMImRySSgL6IrwTw==
"@tauri-apps/cli-linux-arm-gnueabihf@2.2.7":
version "2.2.7"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.2.7.tgz#451029b68b50486e0553adf1a45cbd27c00eb3f9"
integrity sha512-+Clha2iQAiK9zoY/KKW0KLHkR0k36O78YLx5Sl98tWkwI3OBZFg5H5WT1plH/4sbZIS2aLFN6dw58/JlY9Bu/g==
"@tauri-apps/cli-linux-arm64-gnu@2.2.7":
version "2.2.7"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.2.7.tgz#74f28cc303b0f476209c6117325fc235a3d5ad0f"
integrity sha512-Z/Lp4SQe6BUEOays9BQAEum2pvZF4w9igyXijP+WbkOejZx4cDvarFJ5qXrqSLmBh7vxrdZcLwoLk9U//+yQrg==
"@tauri-apps/cli-linux-arm64-musl@2.2.7":
version "2.2.7"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.7.tgz#c51890295186395effd2a751739b88c9689eea6c"
integrity sha512-+8HZ+txff/Y3YjAh80XcLXcX8kpGXVdr1P8AfjLHxHdS6QD4Md+acSxGTTNbplmHuBaSHJvuTvZf9tU1eDCTDg==
"@tauri-apps/cli-linux-x64-gnu@2.2.7":
version "2.2.7"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.2.7.tgz#14959a065858dcc6bff87ca8eb4525b071ab4ffe"
integrity sha512-ahlSnuCnUntblp9dG7/w5ZWZOdzRFi3zl0oScgt7GF4KNAOEa7duADsxPA4/FT2hLRa0SvpqtD4IYFvCxoVv3Q==
"@tauri-apps/cli-linux-x64-musl@2.2.7":
version "2.2.7"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.7.tgz#6199c671d760b39c75ad13228cc422fadbbd0b15"
integrity sha512-+qKAWnJRSX+pjjRbKAQgTdFY8ecdcu8UdJ69i7wn3ZcRn2nMMzOO2LOMOTQV42B7/Q64D1pIpmZj9yblTMvadA==
"@tauri-apps/cli-win32-arm64-msvc@2.2.7":
version "2.2.7"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.2.7.tgz#e83f3efda339f8315a54c6b3a105bb16c1d78d66"
integrity sha512-aa86nRnrwT04u9D9fhf5JVssuAZlUCCc8AjqQjqODQjMd4BMA2+d4K9qBMpEG/1kVh95vZaNsLogjEaqSTTw4A==
"@tauri-apps/cli-win32-ia32-msvc@2.2.7":
version "2.2.7"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.2.7.tgz#6e9cdc615cf1f86469e067e65493a85470c4d6c7"
integrity sha512-EiJ5/25tLSQOSGvv+t6o3ZBfOTKB5S3vb+hHQuKbfmKdRF0XQu2YPdIi1CQw1DU97ZAE0Dq4frvnyYEKWgMzVQ==
"@tauri-apps/cli-win32-x64-msvc@2.2.7":
version "2.2.7"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.2.7.tgz#c561efac129b386be35a936b0080a4cd2cd01b6d"
integrity sha512-ZB8Kw90j8Ld+9tCWyD2fWCYfIrzbQohJ4DJSidNwbnehlZzP7wAz6Z3xjsvUdKtQ3ibtfoeTqVInzCCEpI+pWg==
"@tauri-apps/cli@^2":
version "2.2.7"
resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-2.2.7.tgz#4aedaf941f58bf2839fec38aa8191c5aefc7bb45"
integrity sha512-ZnsS2B4BplwXP37celanNANiIy8TCYhvg5RT09n72uR/o+navFZtGpFSqljV8fy1Y4ixIPds8FrGSXJCN2BerA==
optionalDependencies:
"@tauri-apps/cli-darwin-arm64" "2.2.7"
"@tauri-apps/cli-darwin-x64" "2.2.7"
"@tauri-apps/cli-linux-arm-gnueabihf" "2.2.7"
"@tauri-apps/cli-linux-arm64-gnu" "2.2.7"
"@tauri-apps/cli-linux-arm64-musl" "2.2.7"
"@tauri-apps/cli-linux-x64-gnu" "2.2.7"
"@tauri-apps/cli-linux-x64-musl" "2.2.7"
"@tauri-apps/cli-win32-arm64-msvc" "2.2.7"
"@tauri-apps/cli-win32-ia32-msvc" "2.2.7"
"@tauri-apps/cli-win32-x64-msvc" "2.2.7"
"@tauri-apps/plugin-fs@~2":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-fs/-/plugin-fs-2.2.0.tgz#3cf2968139a9cd9e4d12a7a7176c0b59e446b0a3"
integrity sha512-+08mApuONKI8/sCNEZ6AR8vf5vI9DXD4YfrQ9NQmhRxYKMLVhRW164vdW5BSLmMpuevftpQ2FVoL9EFkfG9Z+g==
dependencies:
"@tauri-apps/api" "^2.0.0"
"@tauri-apps/plugin-opener@^2":
version "2.2.5"
resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-opener/-/plugin-opener-2.2.5.tgz#928b917d28d3e8b5bafb90f5f91fb0ed20c27fd4"
integrity sha512-hHsJ9RPWpZvZEPVFaL+d25gABMUMOf/A6ESXnvf/ii9guTukj58WXsAE/SOysXRIhej7kseRCxnOnIMpSCdUsQ==
dependencies:
"@tauri-apps/api" "^2.0.0"
"@types/cookie@^0.6.0":
version "0.6.0"
resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5"
integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==
"@types/estree@1.0.6", "@types/estree@^1.0.5", "@types/estree@^1.0.6":
version "1.0.6"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50"
integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
acorn-typescript@^1.4.13:
version "1.4.13"
resolved "https://registry.yarnpkg.com/acorn-typescript/-/acorn-typescript-1.4.13.tgz#5f851c8bdda0aa716ffdd5f6ac084df8acc6f5ea"
integrity sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==
acorn@^8.12.1:
version "8.14.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0"
integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==
aria-query@^5.3.1:
version "5.3.2"
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59"
integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==
axobject-query@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee"
integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==
chokidar@^4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30"
integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==
dependencies:
readdirp "^4.0.1"
clsx@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999"
integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==
cookie@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051"
integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
debug@^4.3.7, debug@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
dependencies:
ms "^2.1.3"
deepmerge@^4.3.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
devalue@^5.1.0:
version "5.1.1"
resolved "https://registry.yarnpkg.com/devalue/-/devalue-5.1.1.tgz#a71887ac0f354652851752654e4bd435a53891ae"
integrity sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==
esbuild@^0.24.2:
version "0.24.2"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d"
integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==
optionalDependencies:
"@esbuild/aix-ppc64" "0.24.2"
"@esbuild/android-arm" "0.24.2"
"@esbuild/android-arm64" "0.24.2"
"@esbuild/android-x64" "0.24.2"
"@esbuild/darwin-arm64" "0.24.2"
"@esbuild/darwin-x64" "0.24.2"
"@esbuild/freebsd-arm64" "0.24.2"
"@esbuild/freebsd-x64" "0.24.2"
"@esbuild/linux-arm" "0.24.2"
"@esbuild/linux-arm64" "0.24.2"
"@esbuild/linux-ia32" "0.24.2"
"@esbuild/linux-loong64" "0.24.2"
"@esbuild/linux-mips64el" "0.24.2"
"@esbuild/linux-ppc64" "0.24.2"
"@esbuild/linux-riscv64" "0.24.2"
"@esbuild/linux-s390x" "0.24.2"
"@esbuild/linux-x64" "0.24.2"
"@esbuild/netbsd-arm64" "0.24.2"
"@esbuild/netbsd-x64" "0.24.2"
"@esbuild/openbsd-arm64" "0.24.2"
"@esbuild/openbsd-x64" "0.24.2"
"@esbuild/sunos-x64" "0.24.2"
"@esbuild/win32-arm64" "0.24.2"
"@esbuild/win32-ia32" "0.24.2"
"@esbuild/win32-x64" "0.24.2"
esm-env@^1.2.1, esm-env@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/esm-env/-/esm-env-1.2.2.tgz#263c9455c55861f41618df31b20cb571fc20b75e"
integrity sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==
esrap@^1.4.3:
version "1.4.3"
resolved "https://registry.yarnpkg.com/esrap/-/esrap-1.4.3.tgz#456ed3c97cf0e6b58b952d351c7c78fe27116576"
integrity sha512-Xddc1RsoFJ4z9nR7W7BFaEPIp4UXoeQ0+077UdWLxbafMQFyU79sQJMk7kxNgRwQ9/aVgaKacCHC2pUACGwmYw==
dependencies:
"@jridgewell/sourcemap-codec" "^1.4.15"
fdir@^6.2.0:
version "6.4.3"
resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72"
integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==
fsevents@~2.3.2, fsevents@~2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
import-meta-resolve@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706"
integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==
is-reference@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.3.tgz#9ef7bf9029c70a67b2152da4adf57c23d718910f"
integrity sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==
dependencies:
"@types/estree" "^1.0.6"
kleur@^4.1.5:
version "4.1.5"
resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780"
integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==
locate-character@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/locate-character/-/locate-character-3.0.0.tgz#0305c5b8744f61028ef5d01f444009e00779f974"
integrity sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==
magic-string@^0.30.11, magic-string@^0.30.15, magic-string@^0.30.5:
version "0.30.17"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453"
integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==
dependencies:
"@jridgewell/sourcemap-codec" "^1.5.0"
mri@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b"
integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==
mrmime@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4"
integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==
ms@^2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
nanoid@^3.3.8:
version "3.3.8"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf"
integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==
picocolors@^1.0.0, picocolors@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
postcss@^8.5.1:
version "8.5.1"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.1.tgz#e2272a1f8a807fafa413218245630b5db10a3214"
integrity sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==
dependencies:
nanoid "^3.3.8"
picocolors "^1.1.1"
source-map-js "^1.2.1"
readdirp@^4.0.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.1.tgz#bd115327129672dc47f87408f05df9bd9ca3ef55"
integrity sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==
rollup@^4.30.1:
version "4.34.6"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.34.6.tgz#a07e4d2621759e29034d909655e7a32eee9195c9"
integrity sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==
dependencies:
"@types/estree" "1.0.6"
optionalDependencies:
"@rollup/rollup-android-arm-eabi" "4.34.6"
"@rollup/rollup-android-arm64" "4.34.6"
"@rollup/rollup-darwin-arm64" "4.34.6"
"@rollup/rollup-darwin-x64" "4.34.6"
"@rollup/rollup-freebsd-arm64" "4.34.6"
"@rollup/rollup-freebsd-x64" "4.34.6"
"@rollup/rollup-linux-arm-gnueabihf" "4.34.6"
"@rollup/rollup-linux-arm-musleabihf" "4.34.6"
"@rollup/rollup-linux-arm64-gnu" "4.34.6"
"@rollup/rollup-linux-arm64-musl" "4.34.6"
"@rollup/rollup-linux-loongarch64-gnu" "4.34.6"
"@rollup/rollup-linux-powerpc64le-gnu" "4.34.6"
"@rollup/rollup-linux-riscv64-gnu" "4.34.6"
"@rollup/rollup-linux-s390x-gnu" "4.34.6"
"@rollup/rollup-linux-x64-gnu" "4.34.6"
"@rollup/rollup-linux-x64-musl" "4.34.6"
"@rollup/rollup-win32-arm64-msvc" "4.34.6"
"@rollup/rollup-win32-ia32-msvc" "4.34.6"
"@rollup/rollup-win32-x64-msvc" "4.34.6"
fsevents "~2.3.2"
sade@^1.7.4, sade@^1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701"
integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==
dependencies:
mri "^1.1.0"
set-cookie-parser@^2.6.0:
version "2.7.1"
resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz#3016f150072202dfbe90fadee053573cc89d2943"
integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==
sirv@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/sirv/-/sirv-3.0.0.tgz#f8d90fc528f65dff04cb597a88609d4e8a4361ce"
integrity sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==
dependencies:
"@polka/url" "^1.0.0-next.24"
mrmime "^2.0.0"
totalist "^3.0.0"
source-map-js@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
svelte-check@^4.0.0:
version "4.1.4"
resolved "https://registry.yarnpkg.com/svelte-check/-/svelte-check-4.1.4.tgz#59ec6f08d23647ec508ff01584ef6d191c77c9e1"
integrity sha512-v0j7yLbT29MezzaQJPEDwksybTE2Ups9rUxEXy92T06TiA0cbqcO8wAOwNUVkFW6B0hsYHA+oAX3BS8b/2oHtw==
dependencies:
"@jridgewell/trace-mapping" "^0.3.25"
chokidar "^4.0.1"
fdir "^6.2.0"
picocolors "^1.0.0"
sade "^1.7.4"
svelte@^5.0.0:
version "5.19.9"
resolved "https://registry.yarnpkg.com/svelte/-/svelte-5.19.9.tgz#ab29aafe43a512a4ceb517c4f7e2ed4f972c87cc"
integrity sha512-860s752/ZZxHIsii31ELkdKBOCeAuDsfb/AGUXJyQyzUVLRSt4oqEw/BV5+2+mNg8mbqmD3OK+vMvwWMPM6f8A==
dependencies:
"@ampproject/remapping" "^2.3.0"
"@jridgewell/sourcemap-codec" "^1.5.0"
"@types/estree" "^1.0.5"
acorn "^8.12.1"
acorn-typescript "^1.4.13"
aria-query "^5.3.1"
axobject-query "^4.1.0"
clsx "^2.1.1"
esm-env "^1.2.1"
esrap "^1.4.3"
is-reference "^3.0.3"
locate-character "^3.0.0"
magic-string "^0.30.11"
zimmerframe "^1.1.2"
totalist@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8"
integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==
typescript@~5.6.2:
version "5.6.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b"
integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==
vite@^6.0.3:
version "6.1.0"
resolved "https://registry.yarnpkg.com/vite/-/vite-6.1.0.tgz#00a4e99a23751af98a2e4701c65ba89ce23858a6"
integrity sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==
dependencies:
esbuild "^0.24.2"
postcss "^8.5.1"
rollup "^4.30.1"
optionalDependencies:
fsevents "~2.3.3"
vitefu@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/vitefu/-/vitefu-1.0.5.tgz#eab501e07da167bbb68e957685823e6b425e7ce2"
integrity sha512-h4Vflt9gxODPFNGPwp4zAMZRpZR7eslzwH2c5hn5kNZ5rhnKyRJ50U+yGCdc2IRaBs8O4haIgLNGrV5CrpMsCA==
zimmerframe@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/zimmerframe/-/zimmerframe-1.1.2.tgz#5b75f1fa83b07ae2a428d51e50f58e2ae6855e5e"
integrity sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==