From d81cadd034186404d1836b5ad95b821082672792 Mon Sep 17 00:00:00 2001 From: Rose Hall Date: Thu, 14 Nov 2024 17:43:54 -0500 Subject: [PATCH 01/15] Basic application shell & layouting --- package.json | 5 +- src-tauri/Cargo.lock | 78 ++++++ src-tauri/Cargo.toml | 1 + src-tauri/capabilities/default.json | 22 +- src-tauri/src/lib.rs | 13 +- src-tauri/tauri.conf.json | 4 +- src/components/windows_titlebar.svelte | 117 ++++++++ src/icons/arrow_left_into_bar_icon.svelte | 12 + src/icons/arrow_right_into_bar_icon.svelte | 13 + src/lib/platform/index.svelte.ts | 26 ++ src/lib/rem_size.svelte.ts | 17 ++ src/lib/theme.ts | 63 +++++ src/routes/+layout.svelte | 302 ++++++++++++++++++++- svelte.config.js | 5 + 14 files changed, 670 insertions(+), 8 deletions(-) create mode 100644 src/components/windows_titlebar.svelte create mode 100644 src/icons/arrow_left_into_bar_icon.svelte create mode 100644 src/icons/arrow_right_into_bar_icon.svelte create mode 100644 src/lib/platform/index.svelte.ts create mode 100644 src/lib/rem_size.svelte.ts create mode 100644 src/lib/theme.ts diff --git a/package.json b/package.json index 07aa44c..e5d4770 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,9 @@ "license": "MIT", "dependencies": { "@tauri-apps/api": "^2", - "@tauri-apps/plugin-shell": "^2", - "@tauri-apps/plugin-store": "^2.1.0" + "@tauri-apps/plugin-os": "^2.0.0", + "@tauri-apps/plugin-store": "^2.1.0", + "@tauri-apps/plugin-shell": "^2" }, "devDependencies": { "@sveltejs/adapter-static": "^3.0.5", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index b5918a9..a4ad99f 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -719,6 +719,16 @@ dependencies = [ "typeid", ] +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "fdeflate" version = "0.3.6" @@ -990,6 +1000,16 @@ dependencies = [ "version_check", ] +[[package]] +name = "gethostname" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc3655aa6818d65bc620d6911f05aa7b6aeb596291e1e9f79e52df85583d1e30" +dependencies = [ + "rustix", + "windows-targets 0.52.6", +] + [[package]] name = "getrandom" version = "0.1.16" @@ -1705,6 +1725,12 @@ dependencies = [ "libc", ] +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + [[package]] name = "litemap" version = "0.7.3" @@ -2162,6 +2188,17 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "os_info" +version = "3.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae99c7fa6dd38c7cafe1ec085e804f8f555a2f8659b0dbe03f1f9963a9b51092" +dependencies = [ + "log", + "serde", + "windows-sys 0.52.0", +] + [[package]] name = "os_pipe" version = "1.2.1" @@ -2696,6 +2733,19 @@ dependencies = [ "semver", ] +[[package]] +name = "rustix" +version = "0.38.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + [[package]] name = "ryu" version = "1.0.18" @@ -2746,6 +2796,7 @@ dependencies = [ "serde_json", "tauri", "tauri-build", + "tauri-plugin-os", "tauri-plugin-shell", "tauri-plugin-store", ] @@ -3136,6 +3187,15 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "sys-locale" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" +dependencies = [ + "libc", +] + [[package]] name = "system-deps" version = "6.2.2" @@ -3335,6 +3395,24 @@ dependencies = [ "walkdir", ] +[[package]] +name = "tauri-plugin-os" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc5f23a86f37687c7f4fecfdc706b279087bc44f7a46702f7307ff1551ee03a" +dependencies = [ + "gethostname", + "log", + "os_info", + "serde", + "serde_json", + "serialize-to-javascript", + "sys-locale", + "tauri", + "tauri-plugin", + "thiserror 1.0.69", +] + [[package]] name = "tauri-plugin-shell" version = "2.0.2" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 8337b86..cd4159f 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -20,6 +20,7 @@ tauri-build = { version = "2", features = [] } [dependencies] tauri = { version = "2", features = [] } tauri-plugin-shell = "2" +tauri-plugin-os = "2" serde = { version = "1", features = ["derive"] } serde_json = "1" tauri-plugin-store = "2.0.0" diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index fd59d27..406053e 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -3,5 +3,25 @@ "identifier": "default", "description": "Capability for the main window", "windows": ["main"], - "permissions": ["core:default", "shell:allow-open", "store:default"] + "permissions": [ + "core:default", + "shell:allow-open", + "store:default", + "core:window:allow-close", + "core:window:allow-is-closable", + "core:window:allow-is-decorated", + "core:window:allow-is-fullscreen", + "core:window:allow-is-maximizable", + "core:window:allow-is-maximized", + "core:window:allow-is-minimizable", + "core:window:allow-is-minimized", + "core:window:allow-is-focused", + "core:window:allow-maximize", + "core:window:allow-minimize", + "core:window:allow-start-dragging", + "core:window:allow-toggle-maximize", + "core:window:allow-unmaximize", + "core:window:allow-unminimize", + "os:default" + ] } diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index f91b35e..0b730c1 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,3 +1,5 @@ +use tauri::WindowEvent; + // Learn more about Tauri commands at https://tauri.app/develop/calling-rust/ #[tauri::command] fn greet(name: &str) -> String { @@ -7,8 +9,15 @@ fn greet(name: &str) -> String { #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { tauri::Builder::default() + .plugin(tauri_plugin_os::init()) + .on_window_event(|_, event| { + if let WindowEvent::Resized(_) = event { + std::thread::sleep(std::time::Duration::from_nanos(1)); + } + }) .plugin(tauri_plugin_shell::init()) .invoke_handler(tauri::generate_handler![greet]) - .run(tauri::generate_context!()) - .expect("error while running tauri application"); + .build(tauri::generate_context!()) + .expect("error while running tauri application") + .run(|handle, evt| {}) } diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index da2f4ad..a340dcc 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -14,7 +14,9 @@ { "title": "scope", "width": 800, - "height": 600 + "height": 600, + "decorations": false, + "transparent": true } ], "security": { diff --git a/src/components/windows_titlebar.svelte b/src/components/windows_titlebar.svelte new file mode 100644 index 0000000..24fe472 --- /dev/null +++ b/src/components/windows_titlebar.svelte @@ -0,0 +1,117 @@ + + +{#snippet button(kind: "close" | "maximize" | "restore" | "minimize")} + +{/snippet} + +
+
+ {@render contents()} +
+
+ {@render button("minimize")} + {#if maximized.value} + {@render button("restore")} + {:else} + {@render button("maximize")} + {/if} + {@render button("close")} +
+
+ + \ No newline at end of file diff --git a/src/icons/arrow_left_into_bar_icon.svelte b/src/icons/arrow_left_into_bar_icon.svelte new file mode 100644 index 0000000..46cfd8a --- /dev/null +++ b/src/icons/arrow_left_into_bar_icon.svelte @@ -0,0 +1,12 @@ + + + + + diff --git a/src/icons/arrow_right_into_bar_icon.svelte b/src/icons/arrow_right_into_bar_icon.svelte new file mode 100644 index 0000000..9240777 --- /dev/null +++ b/src/icons/arrow_right_into_bar_icon.svelte @@ -0,0 +1,13 @@ + + + + + + diff --git a/src/lib/platform/index.svelte.ts b/src/lib/platform/index.svelte.ts new file mode 100644 index 0000000..e9079be --- /dev/null +++ b/src/lib/platform/index.svelte.ts @@ -0,0 +1,26 @@ +import { getCurrentWindow } from "@tauri-apps/api/window" + +export function dragRegion(element: HTMLElement) { + element.dataset.tauriDragRegion = "" +} + +export const CURRENT_WINDOW = getCurrentWindow(); + +CURRENT_WINDOW.onFocusChanged(focus_change => { + focused.value = focus_change.payload; +}) + +CURRENT_WINDOW.isFocused().then(f => focused.value = f); +export let focused = $state({ value: false }); + +CURRENT_WINDOW.isDecorated().then(d => decorated.value = d); +export let decorated = $state({ value: false }); + +CURRENT_WINDOW.onResized(async _ => { + maximized.value = await CURRENT_WINDOW.isMaximized(); + + console.log("Maximized", maximized.value); +}) + +CURRENT_WINDOW.isMaximized().then(m => maximized.value = m); +export let maximized = $state({ value: false }); \ No newline at end of file diff --git a/src/lib/rem_size.svelte.ts b/src/lib/rem_size.svelte.ts new file mode 100644 index 0000000..26c5c02 --- /dev/null +++ b/src/lib/rem_size.svelte.ts @@ -0,0 +1,17 @@ +function parse_rem_size(size: string | undefined): number { + if (size?.endsWith("px")) { + return parseInt(size) + } + + throw new Error("Failed to parse rem size: " + size); +} + +export const REM_SIZE = $state({ value: parse_rem_size(document.documentElement.computedStyleMap().get("font-size")?.toString()) }); + +let observer = new MutationObserver(_ => { + console.log("MUTATION") + + REM_SIZE.value = parse_rem_size(document.documentElement.computedStyleMap().get("font-size")?.toString()); +}) + +observer.observe(document.documentElement, { attributeFilter: [ "style" ], attributes: true, attributeOldValue: false, characterData: false, characterDataOldValue: false, childList: false, subtree: false }); \ No newline at end of file diff --git a/src/lib/theme.ts b/src/lib/theme.ts new file mode 100644 index 0000000..48a088f --- /dev/null +++ b/src/lib/theme.ts @@ -0,0 +1,63 @@ +export function theme(key: string) { + key = key.replace(/[A-Z]/g, m => "-" + m.toLowerCase()); + + return `var(--theme-${key})` +} + +export interface Theme { + iter_keys(): Generator<[string, string]> +} + +export class ThemeOverride implements Theme { + constructor(private base: Theme, private overrides: Record) {} + + *iter_keys() { + console.log(this.base); + + for (let [key, value] of this.base.iter_keys()) { + if (key in this.overrides) { + yield [key, this.overrides[key]] as [string, string]; + continue; + } + + yield [key, value] as [string, string]; + } + } +} + +export class DefaultTheme implements Theme { + *iter_keys() { + yield* Object.entries({ + "background": "#1a191c", + "foreground": "#25272b", + + "titlebar-windows-minimize-icon": "#cccccc", + "titlebar-windows-minimize-hover-background": "#373737", + "titlebar-windows-minimize-hover-icon": "#cccccc", + "titlebar-windows-minimize-hover-transition-speed": "66ms", + "titlebar-windows-minimize-active-background": "#545454", + "titlebar-windows-minimize-active-icon": "#cccccc", + + "titlebar-windows-maximize-icon": "#cccccc", + "titlebar-windows-maximize-hover-background": "#373737", + "titlebar-windows-maximize-hover-icon": "#cccccc", + "titlebar-windows-maximize-hover-transition-speed": "66ms", + "titlebar-windows-maximize-active-background": "#545454", + "titlebar-windows-maximize-active-icon": "#cccccc", + + "titlebar-windows-restore-icon": "#cccccc", + "titlebar-windows-restore-hover-background": "#373737", + "titlebar-windows-restore-hover-icon": "#cccccc", + "titlebar-windows-restore-hover-transition-speed": "66ms", + "titlebar-windows-restore-active-background": "#545454", + "titlebar-windows-restore-active-icon": "#cccccc", + + "titlebar-windows-close-icon": "#cccccc", + "titlebar-windows-close-hover-background": "#e81123", + "titlebar-windows-close-hover-icon": "#ffffff", + "titlebar-windows-close-hover-transition-speed": "66ms", + "titlebar-windows-close-active-background": "#94141e", + "titlebar-windows-close-active-icon": "#ffffff", + }); + } +} \ No newline at end of file diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 881d2ba..e09a80e 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,5 +1,303 @@ - - + + +{#snippet TitlebarContents()} +
+ +
+{/snippet} + +
+ + +
+
+ {#if !decorationsAbove} + {#if os === "windows"} + + {/if} + {:else} + {@render TitlebarContents()} + {/if} +
+ +
+ + +
+ {@render children()} +
+ + +
+
+
+ + diff --git a/svelte.config.js b/svelte.config.js index 2d45f91..cac96d8 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -9,6 +9,11 @@ const config = { preprocess: vitePreprocess(), kit: { adapter: adapter(), + alias: { + "$lib": "src/lib", + "$component": "src/components", + "$icon": "src/icons", + } }, }; From 9ac5ebc3a1f114acfe4c7405890c1f4317d4b5c6 Mon Sep 17 00:00:00 2001 From: Rose Hall Date: Thu, 14 Nov 2024 21:45:37 -0500 Subject: [PATCH 02/15] Fixed mount error and warnings --- bun.lockb | Bin 83602 -> 84021 bytes package.json | 4 ++-- src-tauri/capabilities/default.json | 6 ++++-- src-tauri/src/lib.rs | 22 ++++++++++------------ src-tauri/src/main.rs | 1 + 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/bun.lockb b/bun.lockb index 3b71ecdbfe3f6d8bba46b013a34f3e961e677a6f..02226529da179923bf777c0690075f4ffcc720de 100755 GIT binary patch delta 13926 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 TsU0$NI;h|6?`8`T*yq0ieDR0s delta 13928 zcmd^FcU)9Q*S@o|=+#gxDC>fVeN|9ESP*4niBZ=Q6Lsy1fU-yvuwYx%7{#t9QHd4b zG&E|Au|*S0Vj`L%DaP_@Vu}hXvBh4#=iCD1ee>l@dB5+UZ+^dL&Ut3$&dfP;=H9z^ zXZvE~(gnuF!InDWP&H}Qiid|oE_5yN?Yr3h?Ovnv6W;yEt?PxWH{M=z%+N(hoK7xr z1h{@VuIR`zU-AYTD|B`Ierq!;9TjgNO`akVrmGhuu}YF1`?T4q*UW~MaBAW0r* zmkwDKGBq|e%^5FA37I3uIg{h1c1B66gYqVjwIRJVdCv{pg@PYhf&3iO2XYT&Ey&k3 zNt$$Na*QS&n(U;>R+{vKtcmMoP2Q@c@*gx=1X%<1`ygGcY|;u=YBE=o8EMJMDNn-6y07MOlLa zKNQT+Kv6V?bZ0lkeEr%kGQTn*d zC`VwpayDab++libR$|bYgzPEkfG=DKTV%)-XR0$jHZwC5<;*+7XpX2nNVqg7Nh=S9 zlX&39klbHAIFs971Lue;1ZVj^I6ROus6I!OOUmgDg$JC01}r-TsvRtab(&NPSwW<;x+tT`?pN ztWO}xndRhuotZ&O*qjK0|GA@Y(IF3TT$^c1LdNKXP)X9uUkg^(c2sO;)>w3qkuWZk z=Qz5RYGJe1>Y8Rja%?Qq+Q%o4=kcUZv-kO=ae(rEQg^BH7)@GX#BPmq4Nd*zIW!ncqikl2nnF_iBf zASTcO_d0=no|GiSVU8~b;X(IzRM(OhE+b*0RG03$2Ux!9q*}NIwR|^N1z8g^K4E-p z^0)*kE)5QczZOx4%B{9dtbEm7>?NnCO;n)*YCwrH7cncV{C&^a?+LB(Zl&a;IX^)@{rWBJ)3{={9U=dYqRGGF9nnS6rjp*yAXk(x~$C}~&TC~9&BaBpR zwuug8@w17k}Qh);XW9F6?LPnW~*3CPJf%>+d8ztKSo%n*xx3GlckKQG+4y`lF1%=eN%9pfO=qAvL*tRsZ$!@M?M`gVml`uN6JF$OWRu5Y+xABbb($Z8v3=+ZlQ!bG8|xRa4hrM7?GmO=3vp<%%B#UR3SbQCIzZ)!#gwrHT~rWZ zlMkRwyGeLijdD1yrYphGayMw`n8UHD)i@a}f;KgdmbXG<@4G20{|gwe3}zBy6(Qt| zw27Hi5NVTl!0qf1gL3nE00y6MZ+=#}rB$83;yN*i3ZiWCT$HiBN~FmL%NQ&aRms`b zCeK4P_b4gRUIeCY@U7l_L$E~KM1OKd+vL-D0qCoY#nBRp;86Vt4~TTKw6htuwWXwX zF-A8$*p*;0rox6HivN#58>DEB+Dp;^MVkU`q@taLrnYN~vDJ1jLhGy4UWC?P(PFUp z&nVhLXi6{gd1$;@vFWf$Rv>hEVc>#bt9%=bosC5cwaON(CWka!fh`yZrq$s#^AZ>$ zp0_6g;Q&|?7`869rvrC}NDA_cHhkBSk~+l5jqv`#(XV=J5E!qOq^#UBFkTULC!PgU zy)?FEq#M>3w;Qi$(VdDrD(@SeY;qAw)tkmxxHSN~pSw0HTe2S*TO%nqja)FeR%M0{ zpQ5DBZC!Z$^6Qu+0B?X3OXhgI@~a)cZ7GRmC7`~-ep}*MDIrLd^arHtk2d^YYNw9> zs~OkAP1$VGj zYsiu>d|Q*-H2DrBr{9v?e!EhuO6EHNBd|v+XUXMz0UqytUVkpw2XJD^6$bz=KL~L8 zJy`|yM*wbr6yU^?`6mGP_Zh&cqU7E3HLt%1l<&C~i6vk70}~{c%zp&9qw@f#-;&(! zf>NtWZeI*=d5KoelKCY~UM9JFH5X6i2EggJBroP|fTQUi!0ESSRg}AN_kT_*G4Q(= zvX7rY$K1DvHb6zmMV?wYOP+8INH54hNOna-t-hjUgPJINKv9tWMXB|z49J5r|HDr+ z)qY8;kBd0fS8`SU$;X*;bo&tC9n+Wnd@&oeb^McV$WZd@PEY){?6m9 z;!}+0#GD@=ja9RhjtJedZDoQSY1>pO{8+;Gu^q+W~aX)|hX{PW0ijOsR^@PjdV*cLaj2?EY^Z)%3W>Z(T2`@9!pO)LAo}D7d zqpuyGA_w+$2zT0wyfVrC98{&B2c`70<74D*uw7vO{q3R}Ir}>(vA+j>3g$s3heLSM zSma(*h}@e32RKA^%0^y;ijdbN%Rq;yMbnY{&`IRADP)jC)S+DDzH|<`iJ}HOL|s~f z+)TyD{iwqb2fp{@A+JZ*kOxq=p$<`>@{tG9UE~d@&oGB*NCn6nkr?g}jcFkACbSiK zQ<6tG@WCb)xrKHkZ%)-?9ijy}k+-A+$b-l<(jkIrEb>-Vh`cog#yRliA{%)q6(J8J zOT0t0q3OuO>14cvPQ-gq`vkkNQf`8S<|KH~6|g9Z8s(tKQ698`vd(2CI>^bpKO-4Y$tHPM4MCED@%_b%8Su%S-7=tKoh2fg9+Ade)wc!~xlIcPwV z2fYXOG|6MIE@QARW9*_E?FQQg=AUdAc5)_TU6QdbU_Hr{;vnA?51N`{7rm(v>@ZkR zs$KM<>{JI$O!c5MV9${y%|Xr5JZM3hUG$@qU?;%Zr`v^ta?@d7I_v`*NKs>9-&oi; z)-DE9G1x`0o*8yAl=3oQUk2<08&2IaVP7Wf%e0GFx(jv(Y-pBU#8E*O?8}0ER8_PJnRj$O>6 zfjO`*2lj!@CV4vSn-2S?+eI$z2HOSZKf^BOk#h#@n*sa47LaKs?3)SuX4=IfDg-+W z7WBMbETQb@Vc+wx4~)n%3---|eY5Q1B{~Uq0<8TDc6^o3eF65p0Q&M2D=E>bB-OK|MTX+zB#ZDY%O)mg?+iOFV`;e=`PqEu%UD9;vZBn7xvACee>+% zRT?-C_RWKRV6T%rANI|Mee><2fOdoJ0`p&B7aPgB0QN0_ePEl&v=H_!gnbL`Vha_5 z9R>?pWEWd0dlBqg1pC0Yk!3OLTMYXa+r@S|33dXk{Sv#_Nx4g4-xAmdwwt1sI>fuQ z1o<8+M!uIikVCvjdC1?VYsmLew-+5^KjkAoKzETJq&_b>#0OM>{6iAU9O4iSTn3w# z!KP()@iEEEVbgNhwA?NVX*bv|F#i>Hag>}ZVABfN1okPJ@?cXQY|68XgXFj&yb zc2PvxFTG#0cJVcx1UmuNewAH(L%FM9(<<1sifDwVo2(xKSxEV- z<4i`pqpvHK0bN~N#rSbG{0c&mOVE`32L_9Y&aUszwN*>% zs((V>th?>(`p*o8O^s>ut7}B$ww|vo5@OW0Gp`>NhKMk<|4iv^%7!Y&NfG!vlg_Q5 z%q1SrU}$`v%ejZ&1K!lioxw?X*X79_irSXCafgtf?5K{{eOu6`7n@g& z{04PMwNB83Z`!*aJysJJ6#@Jp<5v+*I_KVc0$le6z?@%Ic^;g;0=SOf>V^QEz6Q9A zKLbn$I2{N0T7EH~2_VHuCy;YP{w+KU;B*q;0eB+(Ud)~R6X13-FdN|ZX8bR;ys{!y&IsTx)zn~if{L8ulz`w+AqWl-&7H|RJxA{xJLEuB+ zV_*lc6W9&B1H1)n1l|DnZG0V&5AX-9RlsUsB>%@A2PGaz07e0$fheFY`Je7&tPd@a z5>7iB--fmf*a{p0_&d*gz-EBIex(4ZbnbLbS0XegkOc5oru_iE1}Wdfra`)ZDZpfa zf3sx)V}NbI0U!sM4$J^Jgq{aDYNi6?fbqZt;6>miU_P)ESOjFV@A>y0|D;+7a7-Tp zJ_2?DuL2xy^MG971zsgN9?$v_&A4shsY0PGR= z6o=G!P3QY1LP>JR_)6Sytg_p=fEdG#cMwU|CCR#eF23V z9|Mj8yS_t)wD}ROIronS29;siwWFOwVm~`_xkr`hRrDH)`@Ty#+4_A-9bc^5#b-); z4$7#KX%NFg)h=G4-aquD9Y2)#oe}B@sU@ujEoid6eN-)R1SK{3DnWaH^flZRbo|Fq z{P}sM#AMdblD7Ez9~nhs-X4M;LxMwtLl897{wGs}enQi^yWJaY+*8iGiPpiPA;IBT z<4WqG&I`-3uIJls?J2L>SBd8TaUmA+;gLr7kth7Y21xnoI^8gO;?pSXhOp;n9Ta= z-J*PN{|}oL_b#umMsy*}tRG3WRqit?V@_ebn`jdp8WG%Dl0xX*1rvS>-bXL`f!6Jh zFJG@(_ekUNRx_y8MN@=+0M_gKqL7vkjy@=_#~E4Wpxc~`l}*pg>E=;h^UV`9?V_() zKUC|U^+kO0XEzMx4QkNVizfVrK6=q)){o>yUY*?A(|dMNd8-t9j0xyRc>BCuTKeR= zqDSTR`XOIy(@l|~_m6ccuQ}>Ly^4L!`l;YM!}6xJS#{)bc>`~nUTiY#^`TY8Jq(}t zP)Tv9;kXagEAcga>qC(xJ^b|Jl@tA($Ii_ecAa-na0q+vh7YYnyN5n>?3S-tKgKyX zBk8@N-HSg$yRhKa+>ZB67(QYIUNYgcL-Zw+SwB14`|bzZ_qvUI8ExC3Ep}!HN<*vO zH1>LJT6@Xr_hD`Ic}gV{Zgpm$J*57at}ZKpm9l`xXI7V zYc@@37ZQv|a`USGxJ_UobJX_ad8KZ+ ze)xBP-Nx>FhL89T*Mz}z46Yv+4lsN_tWRlaI%=X|KpQ+!Xy_G_SwE+2s!=1kZ$q!I zv@79^<+S9A3Ev_%BJWFwu7nv**QI+`dKfmFscUI-Im=HyExC{;mzvD_apZyfN{y?| zUTKDYLNN|zokv?rO%eKW{>LoICd>CmtN|;;RO61SNIgfot{X@>O4#cYylKDSqGw2iJJ5GaAHwH1I(K z{mgQ|FE2Nml;%B98C401Xk6og79mxyU25K?mYYE|MM*7`%z&&0*{jvT^`;{q)WS8q zs|Sfyr@P!<%ia!Gy`Uez_HS^m;eNTn zZq#67vwwP%`Krl0sJ?2_n`t5MB$vjmLA@4~ov8O!Q-ppByJ*0MW8H49{mCGvgCe}~@cFFa^)R!3s(XFd@m_0Ry=&E4VOG5NdKyZ6 zX#aHtrG-3igyOVehZ`mw4;p-9y5Up{I(x&{te?hie`EjFBi`YO=)j8E!1K$g`c0Fe zxFxl`>1#LRdZ_%3L7{lp@ulKcFc`CY}Z+B%Pp}}E%JexM( z3^gcs86UcR(;wfve17R^{`bDPD?DGNW;FE|lgOgwzf6zN4|lJ5VNa(w9(ulpl?})I zFrt1uyR+9@uV*bdHWxM84Gnj)UbjO19>9p|aCH3q9sQmETvMt|7LJDPt8V%F=_k|s zjkx^y-s0F>S_4FldN0K1&;@tvEWI6pR|f0tr^E|1^>&~E=d#z`_Qi5uyJNy zRD9b%TtB`&>a{65kL~@5?}Z4!;E*s$Kj7W<)zr-=0^BR3CLH%Z%ub@{J3YfaF(BWu z3QKN%dwqVsdXvH35jPOjc%x?cXuqi!Cal?lE48q1PVe0@ne_wadlqJ&yjS{m9c4_# zITdE-hIddU_9}%-Jl!z!e{(a2>)GHi4vm9%L!J89jkFb?drh0uV>x=q12+s4)6bxX zEsdLWVD-AG1~DK~yO!nZ_x@rqh$0GL$UWwIPN$Zt@PvVp;d2u=QCj;-YT>xl8Cn4H$~{@;h#$xn3H*Z z@r&j4`ic2Z-!z(9o~d@Tyrwjo9^Lmf>qqS4dLDc!*3Toayg@4pd0-N~$o{}ov(J<2 z8TxKZwx2#*H1moT String { #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { tauri::Builder::default() - .plugin(tauri_plugin_os::init()) - .on_window_event(|_, event| { - if let WindowEvent::Resized(_) = event { - std::thread::sleep(std::time::Duration::from_nanos(1)); - } - }) - .plugin(tauri_plugin_shell::init()) - .invoke_handler(tauri::generate_handler![greet]) - .build(tauri::generate_context!()) - .expect("error while running tauri application") - .run(|handle, evt| {}) -} + .on_window_event(|_, event| { + if let WindowEvent::Resized(_) = event { + std::thread::sleep(std::time::Duration::from_nanos(1)); + } + }) + .plugin(tauri_plugin_shell::init()) + .invoke_handler(tauri::generate_handler![greet]) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} \ No newline at end of file diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index c354705..9f59907 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -3,6 +3,7 @@ fn main() { tauri::Builder::default() + .plugin(tauri_plugin_os::init()) .plugin(tauri_plugin_store::Builder::default().build()) .run(tauri::generate_context!()) .expect("error while running tauri application"); From 8960bae52e73224853d1dae4811a389613c0854b Mon Sep 17 00:00:00 2001 From: Rose Hall Date: Thu, 14 Nov 2024 21:52:38 -0500 Subject: [PATCH 03/15] fixed issues due to tailwind --- src/routes/+layout.svelte | 6 +++--- src/routes/login/+page.svelte | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index e09a80e..d60ecde 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -116,7 +116,7 @@ {#snippet TitlebarContents()}
-