Compare commits

...

8 Commits

Author SHA1 Message Date
22bbcaa2df Delete .env.example 2026-03-30 02:26:55 +08:00
c7a5b50223 bump version numbers 2026-03-27 14:53:15 +08:00
8a8e77125a system tray icon 2026-03-27 14:51:25 +08:00
a945526808 app icon 2026-03-27 14:42:45 +08:00
743af7adb6 new splash screen 2026-03-26 03:59:37 +08:00
cba5cf1980 brief optimization of markup for new font 2026-03-26 03:30:15 +08:00
5e1009616c departuremono.com 2026-03-26 02:03:25 +08:00
d55d7e90f0 Updated neko reposition UI 2026-03-25 15:54:29 +08:00
77 changed files with 86 additions and 62 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "friendolls-desktop", "name": "friendolls-desktop",
"version": "0.1.3", "version": "0.1.4",
"description": "", "description": "",
"type": "module", "type": "module",
"scripts": { "scripts": {

View File

@@ -1 +0,0 @@
API_BASE_URL=http://127.0.0.1:3000

19
src-tauri/Cargo.lock generated
View File

@@ -1240,7 +1240,7 @@ dependencies = [
[[package]] [[package]]
name = "friendolls-desktop" name = "friendolls-desktop"
version = "0.1.0" version = "0.1.4"
dependencies = [ dependencies = [
"base64 0.22.1", "base64 0.22.1",
"device_query", "device_query",
@@ -1269,6 +1269,7 @@ dependencies = [
"strum", "strum",
"tauri", "tauri",
"tauri-build", "tauri-build",
"tauri-macros",
"tauri-plugin-dialog", "tauri-plugin-dialog",
"tauri-plugin-global-shortcut", "tauri-plugin-global-shortcut",
"tauri-plugin-opener", "tauri-plugin-opener",
@@ -1948,9 +1949,9 @@ dependencies = [
[[package]] [[package]]
name = "ico" name = "ico"
version = "0.4.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98" checksum = "3e795dff5605e0f04bff85ca41b51a96b83e80b281e96231bcaaf1ac35103371"
dependencies = [ dependencies = [
"byteorder", "byteorder",
"png", "png",
@@ -4734,9 +4735,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-codegen" name = "tauri-codegen"
version = "2.5.1" version = "2.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7ef707148f0755110ca54377560ab891d722de4d53297595380a748026f139f" checksum = "d4a24476afd977c5d5d169f72425868613d82747916dd29e0a357c84c4bd6d29"
dependencies = [ dependencies = [
"base64 0.22.1", "base64 0.22.1",
"brotli", "brotli",
@@ -4761,9 +4762,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-macros" name = "tauri-macros"
version = "2.5.1" version = "2.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71664fd715ee6e382c05345ad258d6d1d50f90cf1b58c0aa726638b33c2a075d" checksum = "d39b349a98dadaffebb73f0a40dcd1f23c999211e5a2e744403db384d0c33de7"
dependencies = [ dependencies = [
"heck 0.5.0", "heck 0.5.0",
"proc-macro2", "proc-macro2",
@@ -5006,9 +5007,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-utils" name = "tauri-utils"
version = "2.8.0" version = "2.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6b8bbe426abdbf52d050e52ed693130dbd68375b9ad82a3fb17efb4c8d85673" checksum = "219a1f983a2af3653f75b5747f76733b0da7ff03069c7a41901a5eb3ace4557d"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"brotli", "brotli",

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "friendolls-desktop" name = "friendolls-desktop"
version = "0.1.0" version = "0.1.4"
description = "A Tauri App" description = "A Tauri App"
authors = ["you"] authors = ["you"]
edition = "2021" edition = "2021"
@@ -50,6 +50,7 @@ enigo = { version = "0.6.1", features = ["wayland"] }
lazy_static = "1.5.0" lazy_static = "1.5.0"
mlua = { version = "0.11", default-features = false, features = ["lua54", "vendored", "serde", "async"] } mlua = { version = "0.11", default-features = false, features = ["lua54", "vendored", "serde", "async"] }
petpet = "2.4.3" petpet = "2.4.3"
tauri-macros = "2.5.5"
[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies] [target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
tauri-plugin-global-shortcut = "2" tauri-plugin-global-shortcut = "2"
tauri-plugin-positioner = "2" tauri-plugin-positioner = "2"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 974 B

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
src-tauri/icons/64x64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 903 B

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<background android:drawable="@color/ic_launcher_background"/>
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#fff</color>
</resources>

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -69,8 +69,12 @@ fn harden_scene_window_on_macos(window: &tauri::Window) {
pub fn open_splash_window() { pub fn open_splash_window() {
info!("Starting splash window creation..."); info!("Starting splash window creation...");
let mut config = let url = if cfg!(debug_assertions) {
WindowConfig::accessory(SPLASH_WINDOW_LABEL, "/splash.html", "Friendolls Splash"); "/splash.html?debug=Y"
} else {
"/splash.html"
};
let mut config = WindowConfig::accessory(SPLASH_WINDOW_LABEL, url, "Friendolls Splash");
config.width = 800.0; config.width = 800.0;
config.height = 400.0; config.height = 400.0;
config.visible = false; config.visible = false;

View File

@@ -16,7 +16,7 @@ pub fn init_network_state() -> NetworkState {
let http_client = reqwest::ClientBuilder::new() let http_client = reqwest::ClientBuilder::new()
.timeout(std::time::Duration::from_secs(30)) .timeout(std::time::Duration::from_secs(30))
.connect_timeout(std::time::Duration::from_secs(10)) .connect_timeout(std::time::Duration::from_secs(10))
.user_agent("friendolls-desktop/0.1.0") .user_agent("friendolls-desktop/0.1.4")
.build() .build()
.expect("Client should build"); .expect("Client should build");

View File

@@ -2,11 +2,15 @@ use crate::{
get_app_handle, lock_r, lock_w, services::app_menu::open_app_menu_window, state::FDOLL, get_app_handle, lock_r, lock_w, services::app_menu::open_app_menu_window, state::FDOLL,
}; };
use tauri::{ use tauri::{
image::Image,
include_image,
menu::{Menu, MenuItem}, menu::{Menu, MenuItem},
tray::TrayIconBuilder, tray::TrayIconBuilder,
}; };
use tracing::error; use tracing::error;
const TRAY_ICON: Image<'_> = include_image!("./icons/icon.tray.png");
/// Constructs app system tray. /// Constructs app system tray.
/// Uses Tauri. /// Uses Tauri.
pub fn init_system_tray() { pub fn init_system_tray() {
@@ -34,7 +38,7 @@ pub fn init_system_tray() {
error!("menu item {:?} not handled", event.id); error!("menu item {:?} not handled", event.id);
} }
}) })
.icon(app.default_window_icon().unwrap().clone()) .icon(TRAY_ICON)
.build(app) .build(app)
.unwrap_or_else(|err| panic!("Failed to build tray: {}", err)); .unwrap_or_else(|err| panic!("Failed to build tray: {}", err));
{ {

View File

@@ -1,7 +1,7 @@
{ {
"$schema": "https://schema.tauri.app/config/2", "$schema": "https://schema.tauri.app/config/2",
"productName": "friendolls-desktop", "productName": "friendolls-desktop",
"version": "0.1.3", "version": "0.1.4",
"identifier": "com.adamcv.friendolls-desktop", "identifier": "com.adamcv.friendolls-desktop",
"build": { "build": {
"beforeDevCommand": "pnpm dev", "beforeDevCommand": "pnpm dev",

View File

@@ -27,9 +27,9 @@
--color-warning-content: oklch(100% 0 0); --color-warning-content: oklch(100% 0 0);
--color-error: oklch(70% 0.191 22.216); --color-error: oklch(70% 0.191 22.216);
--color-error-content: oklch(100% 0 0); --color-error-content: oklch(100% 0 0);
--radius-selector: 0.25rem; --radius-selector: 0rem;
--radius-field: 0.25rem; --radius-field: 0rem;
--radius-box: 0.25rem; --radius-box: 0rem;
--size-selector: 0.1875rem; --size-selector: 0.1875rem;
--size-field: 0.1875rem; --size-field: 0.1875rem;
--border: 1px; --border: 1px;
@@ -63,9 +63,9 @@
--color-warning-content: oklch(0% 0 0); --color-warning-content: oklch(0% 0 0);
--color-error: oklch(63% 0.237 25.331); --color-error: oklch(63% 0.237 25.331);
--color-error-content: oklch(100% 0 0); --color-error-content: oklch(100% 0 0);
--radius-selector: 0.25rem; --radius-selector: 0rem;
--radius-field: 0.25rem; --radius-field: 0rem;
--radius-box: 0.25rem; --radius-box: 0rem;
--size-selector: 0.1875rem; --size-selector: 0.1875rem;
--size-field: 0.1875rem; --size-field: 0.1875rem;
--border: 1px; --border: 1px;
@@ -73,6 +73,17 @@
--noise: 1; --noise: 1;
} }
@font-face {
font-family: "DepartureFontMono";
src: url("/DepartureMono-Regular.woff2") format("woff2");
font-weight: 400;
font-style: normal;
}
@theme {
--font-custom: "DepartureFontMono", sans-serif;
}
:root { :root {
background-color: transparent; background-color: transparent;
} }

View File

@@ -55,6 +55,6 @@
} }
</script> </script>
<div class="w-screen h-screen bg-transparent"> <div class="w-screen h-screen bg-transparent font-custom">
{@render children?.()} {@render children?.()}
</div> </div>

View File

@@ -50,7 +50,7 @@
<div class="flex flex-col gap-2 h-full max-h-full"> <div class="flex flex-col gap-2 h-full max-h-full">
<div class="size-full flex flex-col max-h-full gap-2 h-full relative"> <div class="size-full flex flex-col max-h-full gap-2 h-full relative">
<div class="absolute top-2 right-2"> <div class="absolute top-2 right-2">
<p class="text-xs font-mono opacity-50">v{appVersion}</p> <p class="text-xs opacity-50">v{appVersion}</p>
</div> </div>
<div class="tabs tabs-lift h-full flex-1"> <div class="tabs tabs-lift h-full flex-1">
<label class="tab"> <label class="tab">

View File

@@ -38,17 +38,11 @@
</p> </p>
</div> </div>
<div> <div>
<input <p class="text-sm">
type="checkbox" {$appState.sceneSetup.nekosPosition
checked={$appState.sceneSetup.nekosPosition !== null} ? selectedLabel
onclick={() => : "Click a corner to enable"}
selectPosition( </p>
$appState.sceneSetup.nekosPosition ? null : "bottom-left",
)}
class="toggle toggle-xl {$appState.sceneSetup.nekosPosition
? 'bg-primary/10 toggle-primary'
: 'bg-base-200'}"
/>
</div> </div>
</div> </div>
<div class="card bg-base-200/50 p-1 w-max border border-base-300"> <div class="card bg-base-200/50 p-1 w-max border border-base-300">

View File

@@ -24,7 +24,7 @@
<div class="size-full absolute bg-gridded opacity-25"></div> <div class="size-full absolute bg-gridded opacity-25"></div>
<div class="size-full absolute"> <div class="size-full absolute">
<div <div
class="flex flex-row size-full items-end justify-between text-[8px] text-primary p-1 font-mono" class="flex flex-row size-full items-end justify-between text-[8px] text-primary p-1"
> >
<div class="text-start flex flex-col"> <div class="text-start flex flex-col">
<p>Scale</p> <p>Scale</p>

View File

@@ -4,7 +4,7 @@
</script> </script>
<div class="flex flex-col gap-4 w-full h-full"> <div class="flex flex-col gap-4 w-full h-full">
<p class="text-lg font-bold">Scene Configuration</p> <p class="text-lg">Scene Configuration</p>
<NekoView /> <NekoView />
<NekoReposition /> <NekoReposition />
</div> </div>

View File

@@ -48,7 +48,7 @@
<div class="dolls-page flex flex-col gap-4 max-h-full h-full"> <div class="dolls-page flex flex-col gap-4 max-h-full h-full">
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<h2 class="text-lg font-bold">Your Nekos</h2> <h2 class="text-lg">Your Nekos</h2>
<button class="btn btn-primary btn-sm" on:click={openCreateModal}> <button class="btn btn-primary btn-sm" on:click={openCreateModal}>
Add a Neko Add a Neko
</button> </button>

View File

@@ -84,7 +84,7 @@
<div class="p-6 flex flex-col gap-4 w-full h-full justify-between"> <div class="p-6 flex flex-col gap-4 w-full h-full justify-between">
<div class="flex flex-col gap-4 w-full"> <div class="flex flex-col gap-4 w-full">
<div class="flex flex-col gap-1"> <div class="flex flex-col gap-1">
<p class="text-xl font-semibold">Client Configuration</p> <p class="text-xl">Client Configuration</p>
<p class="opacity-70 text-sm">Set a custom API endpoint.</p> <p class="opacity-70 text-sm">Set a custom API endpoint.</p>
</div> </div>

View File

@@ -27,13 +27,13 @@
<div class="flex flex-col gap-4 size-full justify-between"> <div class="flex flex-col gap-4 size-full justify-between">
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<p class="text-md font-light">Something is not right...</p> <p class="text-md">Something is not right...</p>
<p class="opacity-70 text-3xl font-bold"> <p class="opacity-70 text-3xl">
Seems like the server is inaccessible. Check your network? Seems like the server is inaccessible. Check your network?
</p> </p>
</div> </div>
{#if errorMessage} {#if errorMessage}
<p class="text-xs opacity-70 wrap-break-word font-mono"> <p class="text-xs opacity-70 wrap-break-word">
{errorMessage} {errorMessage}
</p> </p>
{/if} {/if}

View File

@@ -52,7 +52,7 @@
</script> </script>
<div <div
class="size-max mx-auto bg-base-100 border-base-200 border p-1 rounded-lg shadow-md" class="size-max mx-auto bg-base-100 border-base-200 border p-1 rounded-box shadow-md"
> >
<div class="flex flex-row gap-1 items-center text-center"> <div class="flex flex-row gap-1 items-center text-center">
<div> <div>
@@ -90,7 +90,7 @@
{@const status = getFriendStatus(userId)} {@const status = getFriendStatus(userId)}
<div class="badge py-3 text-xs text-left flex flex-row gap-2"> <div class="badge py-3 text-xs text-left flex flex-row gap-2">
<span class="font-bold">{getFriendById(userId)?.name}</span> <span class="font-bold">{getFriendById(userId)?.name}</span>
<div class="flex flex-row font-mono gap-2"> <div class="flex flex-row gap-2">
<span> <span>
{position.cursor.mapped.x.toFixed(3)}, {position.cursor.mapped.x.toFixed(3)},
{position.cursor.mapped.y.toFixed(3)} {position.cursor.mapped.y.toFixed(3)}

View File

@@ -119,7 +119,7 @@
handleActionClick(action); handleActionClick(action);
}} }}
> >
<span class="text-[11px] font-semibold leading-none">{action.icon}</span> <span class="text-[11px] leading-none">{action.icon}</span>
</button> </button>
{/each} {/each}
@@ -129,7 +129,7 @@
<button <button
type="button" type="button"
class={`absolute inset-0 z-30 rounded-full transition-all duration-200 ease-out focus:outline-none ${ class={`absolute inset-0 z-30 transition-all duration-200 ease-out focus:outline-none ${
$sceneInteractive $sceneInteractive
? "cursor-pointer" ? "cursor-pointer"
: "pointer-events-none cursor-default" : "pointer-events-none cursor-default"

View File

@@ -9,7 +9,7 @@
{#if name} {#if name}
<div <div
class={`absolute left-1/2 top-full z-10 mt-3 w-max max-w-32 -translate-x-1/2 rounded-md border border-base-300/80 bg-base-100/90 px-2 py-1 text-center text-[10px] font-medium leading-tight text-base-content/80 shadow-sm backdrop-blur-sm transition-all duration-200 ease-out ${ class={`absolute left-1/2 top-full z-10 mt-3 w-max max-w-32 -translate-x-1/2 rounded-field border border-base-300/80 bg-base-100/90 px-2 py-1 text-center text-[10px] font-medium leading-tight text-base-content/80 shadow-sm backdrop-blur-sm transition-all duration-200 ease-out ${
visible visible
? "translate-y-0 opacity-100" ? "translate-y-0 opacity-100"
: "pointer-events-none -translate-y-1 opacity-0" : "pointer-events-none -translate-y-1 opacity-0"

View File

@@ -100,11 +100,9 @@
<div class="flex flex-col gap-6"> <div class="flex flex-col gap-6">
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<div class="flex flex-row gap-2"> <div class="flex flex-row gap-2">
<p class="text-xl font-light">meow? nyaaa!!</p> <p class="text-xl opacity-70">meow? nyaaa!!</p>
</div> </div>
<p class="opacity-70 text-3xl font-bold"> <p class="text-2xl">a cute passive socialization layer!</p>
a cute passive socialization layer!
</p>
</div> </div>
<div class="flex flex-col gap-3"> <div class="flex flex-col gap-3">
<span>Sign in with</span> <span>Sign in with</span>
@@ -118,15 +116,13 @@
class="flex flex-row justify-start items-center z-1 h-full p-1 pr-0" class="flex flex-row justify-start items-center z-1 h-full p-1 pr-0"
> >
<div <div
class="bg-linear-to-t from-base-100/50 to-base-100 rounded-sm" class="bg-linear-to-t from-base-100/50 to-base-100 rounded-selector"
> >
<div class="scale-70"> <div class="scale-70">
<Google /> <Google />
</div> </div>
</div> </div>
<span class="text-xl font-semibold px-3 text-primary-content" <span class="text-xl px-3 text-primary-content">Google</span>
>Google</span
>
</div> </div>
</button> </button>
<button <button
@@ -138,15 +134,13 @@
class="flex flex-row justify-start items-center z-1 h-full p-1 pr-0" class="flex flex-row justify-start items-center z-1 h-full p-1 pr-0"
> >
<div <div
class="bg-linear-to-t from-base-100/50 to-base-100 rounded-sm" class="bg-linear-to-t from-base-100/50 to-base-100 rounded-selector"
> >
<div class="scale-70"> <div class="scale-70">
<Discord /> <Discord />
</div> </div>
</div> </div>
<span class="text-xl font-semibold px-3 text-primary-content" <span class="text-xl px-3 text-primary-content">Discord</span>
>Discord</span
>
</div> </div>
</button> </button>
</div> </div>

Binary file not shown.

View File

@@ -2,22 +2,29 @@
<html> <html>
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<title>Friendolls</title> <title>Friendolls Splash</title>
<script> <script>
document.addEventListener("contextmenu", function (e) { document.addEventListener("contextmenu", function (e) {
e.preventDefault(); e.preventDefault();
}); });
const urlParams = new URLSearchParams(window.location.search);
const debug = urlParams.get("debug") === "Y";
</script> </script>
</head> </head>
<body style="width: 100%; height: 100%"> <body style="width: 100%; height: 100%">
<div id="splash"></div> <div id="splash"></div>
<script>
document.getElementById("splash").style.backgroundImage = debug
? 'url("/splash-dev.jpeg")'
: 'url("/splash.jpg")';
</script>
<style> <style>
* { * {
margin: 0; margin: 0;
} }
#splash { #splash {
background-image: url("/splash-dev.jpeg");
background-size: cover; background-size: cover;
background-position: center; background-position: center;
width: 800px; width: 800px;

BIN
static/splash.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB