From 39d56abc48b6f649328ab5ea7c0adeace42c3b35 Mon Sep 17 00:00:00 2001 From: core Date: Sun, 26 Apr 2026 21:45:41 -0400 Subject: [PATCH] feat: pain, suffering, and despair --- .gitignore | 4 +- Cargo.lock | 105 +++----------------- crates/unified/Cargo.toml | 4 +- crates/unified/src/client/ship/thrusters.rs | 2 +- crates/unified/src/client_plugins.rs | 1 - crates/unified/src/server_plugins.rs | 5 +- crates/unified/src/shared_plugins.rs | 4 +- crates/unified/src/wasm_entrypoint.rs | 18 +++- crates/xtask/src/unified_web.rs | 2 +- web/.vscode/extensions.json | 5 +- web/.vscode/settings.json | 5 + web/bun.lock | 54 ++++++++++ web/package.json | 2 + web/src/routes/+layout.svelte | 7 +- web/src/routes/+page.svelte | 36 ++++++- web/src/routes/layout.css | 1 + web/static/assets | 1 + web/vite.config.ts | 5 +- 18 files changed, 151 insertions(+), 110 deletions(-) create mode 100644 web/.vscode/settings.json create mode 100644 web/src/routes/layout.css create mode 120000 web/static/assets diff --git a/.gitignore b/.gitignore index cb2df7b3bd73771fd92161a3067f361b7fdef254..bc7f3e35bbef19f874fe1360f6f8f631cd3ed52c 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,6 @@ crates/kabel/tmp.kab crates/unified/web crates/unified/web/ -crates/unified/web/* \ No newline at end of file +crates/unified/web/* + +web/src/lib/bundle \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index b19772119bcc9b97c4ed483085a40fe5b31a2ff1..f38473c0c82e3e4bdbb9806eeff6116fa9a1b7b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1967,16 +1967,6 @@ dependencies = [ "piper", ] -[[package]] -name = "built" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" -dependencies = [ - "chrono", - "git2", -] - [[package]] name = "bumpalo" version = "3.20.2" @@ -2100,17 +2090,6 @@ dependencies = [ "rayon", ] -[[package]] -name = "chrono" -version = "0.4.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" -dependencies = [ - "iana-time-zone", - "num-traits", - "windows-link 0.2.1", -] - [[package]] name = "ciborium" version = "0.2.2" @@ -3479,19 +3458,6 @@ dependencies = [ "windows 0.62.2", ] -[[package]] -name = "git2" -version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b" -dependencies = [ - "bitflags 2.11.1", - "libc", - "libgit2-sys", - "log", - "url", -] - [[package]] name = "gl_generator" version = "0.14.0" @@ -3793,30 +3759,6 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" -[[package]] -name = "iana-time-zone" -version = "0.1.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core 0.62.2", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - [[package]] name = "icu_collections" version = "2.2.0" @@ -4235,18 +4177,6 @@ version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" -[[package]] -name = "libgit2-sys" -version = "0.18.3+1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9b3acc4b91781bb0b3386669d325163746af5f6e4f73e6d2d630e09a35f3487" -dependencies = [ - "cc", - "libc", - "libz-sys", - "pkg-config", -] - [[package]] name = "libloading" version = "0.8.9" @@ -4285,18 +4215,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "libz-sys" -version = "1.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc3a226e576f50782b3305c5ccf458698f92798987f551c6a02efe8276721e22" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "linebender_resource_handle" version = "0.1.1" @@ -6320,7 +6238,6 @@ dependencies = [ "bevy_common_assets", "bevy_egui", "bevy_replicon", - "built", "console_error_panic_hook", "ctrlc", "getrandom 0.4.2", @@ -6332,9 +6249,10 @@ dependencies = [ "ron", "serde", "tracing-subscriber", - "tracing-wasm", + "tracing-web", "url", "wasm-bindgen", + "web-time 1.1.0", "wgpu 29.0.1", ] @@ -6840,6 +6758,19 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "tracing-web" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e6a141feebd51f8d91ebfd785af50fca223c570b86852166caa3b141defe7c" +dependencies = [ + "js-sys", + "tracing-core", + "tracing-subscriber", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "ttf-parser" version = "0.25.1" @@ -7030,12 +6961,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "vec_map" version = "0.8.2" diff --git a/crates/unified/Cargo.toml b/crates/unified/Cargo.toml index 1c886840575a41c8b8d686b05e9aed78ad66d639..2de6755b0f8ccb8f88b3d90f42350b7509b7c9ed 100644 --- a/crates/unified/Cargo.toml +++ b/crates/unified/Cargo.toml @@ -78,12 +78,14 @@ bevy_egui = { version = "0.39", optional = true } leafwing-input-manager = { version = "0.20", optional = true } good_lp = { version = "1.15", default-features = false, features = ["clarabel"], optional = true } +web-time = "1" + [target.'cfg(not(target_arch = "wasm32"))'.dependencies] ctrlc = { version = "3.5", optional = true } [target.'cfg(target_arch = "wasm32")'.dependencies] wasm-bindgen = { version = "0.2.118" } -tracing-wasm = "0.2" +tracing-web = "0.1" console_error_panic_hook = "0.1" [features] diff --git a/crates/unified/src/client/ship/thrusters.rs b/crates/unified/src/client/ship/thrusters.rs index 08a1b44f43ecfebf3a249550ba543f5c10d38f46..dcfcedb2f8fff6b97fab49b2d90d1b2a5f8914c2 100644 --- a/crates/unified/src/client/ship/thrusters.rs +++ b/crates/unified/src/client/ship/thrusters.rs @@ -1,5 +1,5 @@ use std::collections::BTreeSet; -use std::time::Instant; +use web_time::Instant; use bevy::app::App; use bevy::color::palettes::basic::{RED, WHITE}; use bevy::color::palettes::css::LIMEGREEN; diff --git a/crates/unified/src/client_plugins.rs b/crates/unified/src/client_plugins.rs index 235e3d72d31817e441ba3be2a88f78a020680601..74e7cadbb9b07e70e54cf02392603ce83a2e6783 100644 --- a/crates/unified/src/client_plugins.rs +++ b/crates/unified/src/client_plugins.rs @@ -25,7 +25,6 @@ impl PluginGroup for ClientPluginGroup { .add(UiPlugin) .add(InputDispatchPlugin) .add(InputManagerPlugin::::default()) - .add(PhysicsDebugPlugin) } } diff --git a/crates/unified/src/server_plugins.rs b/crates/unified/src/server_plugins.rs index d6ee24dbde906bc4cec0bb32057a1fd2431f34ab..9f08132cad5ded6d3d67c1f718ceb546715e884e 100644 --- a/crates/unified/src/server_plugins.rs +++ b/crates/unified/src/server_plugins.rs @@ -3,6 +3,7 @@ use aeronet_websocket::server::WebSocketServerPlugin; use bevy::app::{PluginGroup, PluginGroupBuilder}; use std::net::SocketAddr; use avian2d::PhysicsPlugins; +use avian2d::prelude::IslandPlugin; pub struct ServerPluginGroup { pub bind: SocketAddr, @@ -15,7 +16,9 @@ impl PluginGroup for ServerPluginGroup { .add_group( PhysicsPlugins::default() .with_length_unit(100.0) - //.set(PhysicsInterpolationPlugin::interpolate_all()) + .build() + .disable::() + //.set(PhysicsInterpolationPlugin::interpolate_all()) ) .add(WebSocketServerPlugin) .add(AeronetRepliconServerPlugin) diff --git a/crates/unified/src/shared_plugins.rs b/crates/unified/src/shared_plugins.rs index 2caa9c77d1716ab9f15d4f5afa2b0058d480df06..a32d702732a1d2f71fcbd4cf7e57c90397688506 100644 --- a/crates/unified/src/shared_plugins.rs +++ b/crates/unified/src/shared_plugins.rs @@ -18,7 +18,9 @@ pub struct SharedPluginGroup; impl PluginGroup for SharedPluginGroup { fn build(self) -> PluginGroupBuilder { PluginGroupBuilder::start::() - .add_group(RepliconPlugins) + .add_group(RepliconPlugins.build().set(RepliconSharedPlugin { + auth_method: AuthMethod::None + })) //.add(RapierPhysicsPlugin::::pixels_per_meter(100.0)) .add(physics_setup_plugin) .add(register_everything) diff --git a/crates/unified/src/wasm_entrypoint.rs b/crates/unified/src/wasm_entrypoint.rs index 6580a583648a752bea013148bccfe32ffe3c4234..d9d05fc01751d1fe9e3df1d5e87c6f816ce39d01 100644 --- a/crates/unified/src/wasm_entrypoint.rs +++ b/crates/unified/src/wasm_entrypoint.rs @@ -3,16 +3,30 @@ use crate::shared_plugins::SharedPluginGroup; use aeronet_websocket::client::WebSocketClient; use bevy::app::{App, Startup}; use url::Url; -use bevy::log::LogPlugin; +use bevy::log::{Level, LogPlugin}; use bevy::ui::UiPlugin; use bevy::DefaultPlugins; use wasm_bindgen::prelude::*; use bevy::prelude::PluginGroup; + +use tracing_web::{MakeWebConsoleWriter, performance_layer}; +use tracing_subscriber::fmt::format::Pretty; +use tracing_subscriber::prelude::*; +use tracing_subscriber::filter::LevelFilter; + #[wasm_bindgen] pub fn play(server: &str) -> Result<(), JsValue> { console_error_panic_hook::set_once(); - tracing_wasm::set_as_global_default(); + let fmt_layer = tracing_subscriber::fmt::layer() + .with_ansi(false) // Only partially supported across browsers + .without_time() // std::time is not available in browsers, see note below + .with_writer(MakeWebConsoleWriter::new()) + .with_filter(LevelFilter::INFO); + + tracing_subscriber::registry() + .with(fmt_layer) + .init(); // Install these as subscribers to tracing events for instance in wgpu::Instance::enabled_backend_features().iter_names() { bevy::log::debug!(?instance, "available backend"); diff --git a/crates/xtask/src/unified_web.rs b/crates/xtask/src/unified_web.rs index a97e313602bb930179536cc4ca02264e6d411d3f..e07eafbd4aa679175bb2382722006487ba12f091 100644 --- a/crates/xtask/src/unified_web.rs +++ b/crates/xtask/src/unified_web.rs @@ -21,7 +21,7 @@ impl Task for RunClientWeb { let unopt = target_dir.join("starkingdoms.wasm"); let opt = target_dir.join("starkingdoms-opt.wasm"); - let bundle = target_dir.join("bundle/"); + let bundle = wks.join("web/src/lib/bundle"); wasmopt(format!("{} -O -o {}", unopt.display(), opt.display())); wbg(format!("--out-dir {} {} --target web", bundle.display(), opt.display())) diff --git a/web/.vscode/extensions.json b/web/.vscode/extensions.json index 28d1e67ad37e75a3fa99c0cd6c841d8ff1dafba9..54490174495e3085214433b1480a43277cee725e 100644 --- a/web/.vscode/extensions.json +++ b/web/.vscode/extensions.json @@ -1,3 +1,6 @@ { - "recommendations": ["svelte.svelte-vscode"] + "recommendations": [ + "svelte.svelte-vscode", + "bradlc.vscode-tailwindcss" + ] } diff --git a/web/.vscode/settings.json b/web/.vscode/settings.json new file mode 100644 index 0000000000000000000000000000000000000000..bc31e1553d61aaa17e46cb2eb661d5ca01373690 --- /dev/null +++ b/web/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "*.css": "tailwindcss" + } +} diff --git a/web/bun.lock b/web/bun.lock index 791229ec064e90d5874ecfd1adb43cd7218ad6d4..76063bbcc6b483ab078cee15cf593c73bd68304d 100644 --- a/web/bun.lock +++ b/web/bun.lock @@ -8,8 +8,10 @@ "@sveltejs/adapter-auto": "^7.0.1", "@sveltejs/kit": "^2.57.0", "@sveltejs/vite-plugin-svelte": "^7.0.0", + "@tailwindcss/vite": "^4.2.2", "svelte": "^5.55.2", "svelte-check": "^4.4.6", + "tailwindcss": "^4.2.2", "typescript": "^6.0.2", "vite": "^8.0.7", }, @@ -80,6 +82,36 @@ "@sveltejs/vite-plugin-svelte": ["@sveltejs/vite-plugin-svelte@7.0.0", "", { "dependencies": { "deepmerge": "^4.3.1", "magic-string": "^0.30.21", "obug": "^2.1.0", "vitefu": "^1.1.2" }, "peerDependencies": { "svelte": "^5.46.4", "vite": "^8.0.0-beta.7 || ^8.0.0" } }, "sha512-ILXmxC7HAsnkK2eslgPetrqqW1BKSL7LktsFgqzNj83MaivMGZzluWq32m25j2mDOjmSKX7GGWahePhuEs7P/g=="], + "@tailwindcss/node": ["@tailwindcss/node@4.2.4", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.4" } }, "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA=="], + + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.2.4", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.2.4", "@tailwindcss/oxide-darwin-arm64": "4.2.4", "@tailwindcss/oxide-darwin-x64": "4.2.4", "@tailwindcss/oxide-freebsd-x64": "4.2.4", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.4", "@tailwindcss/oxide-linux-arm64-gnu": "4.2.4", "@tailwindcss/oxide-linux-arm64-musl": "4.2.4", "@tailwindcss/oxide-linux-x64-gnu": "4.2.4", "@tailwindcss/oxide-linux-x64-musl": "4.2.4", "@tailwindcss/oxide-wasm32-wasi": "4.2.4", "@tailwindcss/oxide-win32-arm64-msvc": "4.2.4", "@tailwindcss/oxide-win32-x64-msvc": "4.2.4" } }, "sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q=="], + + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.2.4", "", { "os": "android", "cpu": "arm64" }, "sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g=="], + + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg=="], + + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg=="], + + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.2.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw=="], + + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4", "", { "os": "linux", "cpu": "arm" }, "sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA=="], + + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw=="], + + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g=="], + + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA=="], + + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA=="], + + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.2.4", "", { "dependencies": { "@emnapi/core": "^1.8.1", "@emnapi/runtime": "^1.8.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.1", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw=="], + + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.2.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ=="], + + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.2.4", "", { "os": "win32", "cpu": "x64" }, "sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw=="], + + "@tailwindcss/vite": ["@tailwindcss/vite@4.2.4", "", { "dependencies": { "@tailwindcss/node": "4.2.4", "@tailwindcss/oxide": "4.2.4", "tailwindcss": "4.2.4" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, "sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw=="], + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], "@types/cookie": ["@types/cookie@0.6.0", "", {}, "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="], @@ -106,6 +138,8 @@ "devalue": ["devalue@5.7.1", "", {}, "sha512-MUbZ586EgQqdRnC4yDrlod3BEdyvE4TapGYHMW2CiaW+KkkFmWEFqBUaLltEZCGi0iFXCEjRF0OjF0DV2QHjOA=="], + "enhanced-resolve": ["enhanced-resolve@5.21.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA=="], + "esm-env": ["esm-env@1.2.2", "", {}, "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="], "esrap": ["esrap@2.2.5", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" }, "peerDependencies": { "@typescript-eslint/types": "^8.2.0" }, "optionalPeers": ["@typescript-eslint/types"] }, "sha512-/yLB1538mag+dn0wsePTe8C0rDIjUOaJpMs2McodSzmM2msWcZsBSdRtg6HOBt0A/r82BN+Md3pgwSc/uWt2Ig=="], @@ -114,8 +148,12 @@ "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + "is-reference": ["is-reference@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.6" } }, "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="], + "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], @@ -176,6 +214,10 @@ "svelte-check": ["svelte-check@4.4.6", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "chokidar": "^4.0.1", "fdir": "^6.2.0", "picocolors": "^1.0.0", "sade": "^1.7.4" }, "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": ">=5.0.0" }, "bin": { "svelte-check": "bin/svelte-check" } }, "sha512-kP1zG81EWaFe9ZyTv4ZXv44Csi6Pkdpb7S3oj6m+K2ec/IcDg/a8LsFsnVLqm2nxtkSwsd5xPj/qFkTBgXHXjg=="], + "tailwindcss": ["tailwindcss@4.2.4", "", {}, "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA=="], + + "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], + "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], @@ -189,5 +231,17 @@ "vitefu": ["vitefu@1.1.3", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["vite"] }, "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg=="], "zimmerframe": ["zimmerframe@1.1.4", "", {}, "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], + + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], + + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], } } diff --git a/web/package.json b/web/package.json index 1e0bac788372dc6279b5e42b58847a4c5df0cfda..22b75be60f770dc32dd15d878bef898064679224 100644 --- a/web/package.json +++ b/web/package.json @@ -15,8 +15,10 @@ "@sveltejs/adapter-auto": "^7.0.1", "@sveltejs/kit": "^2.57.0", "@sveltejs/vite-plugin-svelte": "^7.0.0", + "@tailwindcss/vite": "^4.2.2", "svelte": "^5.55.2", "svelte-check": "^4.4.6", + "tailwindcss": "^4.2.2", "typescript": "^6.0.2", "vite": "^8.0.7" } diff --git a/web/src/routes/+layout.svelte b/web/src/routes/+layout.svelte index 5069a3996b9b0ab3f3de74d203f1f7df51239ff8..a8c871bcf5d1c006855c591a74259a6bdbbd3ab9 100644 --- a/web/src/routes/+layout.svelte +++ b/web/src/routes/+layout.svelte @@ -1,11 +1,8 @@ - - StarKingdoms - - +StarKingdoms {@render children()} diff --git a/web/src/routes/+page.svelte b/web/src/routes/+page.svelte index cc88df0ea3529d0fb891aa1e67f77b5228ade791..460ba597f5bc2bd9ac38e6de36aeffd49a8b8da1 100644 --- a/web/src/routes/+page.svelte +++ b/web/src/routes/+page.svelte @@ -1,2 +1,34 @@ -

Welcome to SvelteKit

-

Visit svelte.dev/docs/kit to read the documentation

+ + +{#if !isPlaying} +

StarKingdoms

+ + + + + +{/if} + + \ No newline at end of file diff --git a/web/src/routes/layout.css b/web/src/routes/layout.css new file mode 100644 index 0000000000000000000000000000000000000000..d4b5078586e291f9dc7d6f04a380aa3c1b52b84b --- /dev/null +++ b/web/src/routes/layout.css @@ -0,0 +1 @@ +@import 'tailwindcss'; diff --git a/web/static/assets b/web/static/assets new file mode 120000 index 0000000000000000000000000000000000000000..22693612084db6e7d14c0aa4276e71509be82d94 --- /dev/null +++ b/web/static/assets @@ -0,0 +1 @@ +../../crates/unified/assets \ No newline at end of file diff --git a/web/vite.config.ts b/web/vite.config.ts index bbf8c7da43f0080dc6b9fb275f9583b7c17f1506..56f40c72280eb7d9e2fe34ed1573379b0bc70944 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -1,6 +1,5 @@ +import tailwindcss from '@tailwindcss/vite'; import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; -export default defineConfig({ - plugins: [sveltekit()] -}); +export default defineConfig({ plugins: [tailwindcss(), sveltekit()] });