use leptos::*;
use wasm_bindgen::prelude::*;
use wasm_bindgen::JsCast;
use console_error_panic_hook;
use tracing_wasm;
mod app;
mod components;
mod pages;
mod store;
mod utils;
mod api;
use app::App;
// Main entry point for the Leptos CSR application
fn main() {
// Initialize panic hook for better error messages in development
console_error_panic_hook::set_once();
// Initialize tracing for logging
tracing_wasm::set_as_global_default();
// Log application startup
tracing::info!("Starting Control Center UI");
// Also log to browser console
web_sys::console::log_1(&"🚀 Control Center UI WASM loaded and main() called".into());
// Try mounting to body first to test basic functionality
leptos::mount_to_body(|| {
view! {
"🚀 LEPTOS IS WORKING!"
}
});
web_sys::console::log_1(&"✅ Leptos app mounted to body".into());
}
// Export functions that can be called from JavaScript
#[wasm_bindgen]
extern "C" {
#[wasm_bindgen(js_namespace = console)]
fn log(s: &str);
#[wasm_bindgen(js_namespace = localStorage)]
fn getItem(key: &str) -> Option;
#[wasm_bindgen(js_namespace = localStorage)]
fn setItem(key: &str, value: &str);
}
// Helper macro for console logging
#[allow(unused_macros)]
macro_rules! console_log {
($($t:tt)*) => (log(&format_args!($($t)*).to_string()))
}
#[allow(unused_imports)]
pub(crate) use console_log;
// Utility functions for localStorage interaction
pub fn get_local_storage_item(key: &str) -> Option {
getItem(key)
}
pub fn set_local_storage_item(key: &str, value: &str) {
setItem(key, value);
}
// Theme utilities
pub fn get_saved_theme() -> String {
get_local_storage_item("theme").unwrap_or_else(|| "light".to_string())
}
pub fn save_theme(theme: &str) {
set_local_storage_item("theme", theme);
}
// Performance monitoring
#[wasm_bindgen]
pub fn mark_performance(name: &str) {
#[wasm_bindgen]
extern "C" {
#[wasm_bindgen(js_namespace = ["window", "performance"], js_name = mark)]
fn performance_mark(name: &str);
}
performance_mark(name);
}
// Initialize application
#[wasm_bindgen(start)]
pub fn start() {
// This function is called when the WASM module is instantiated
tracing::info!("WASM module initialized");
mark_performance("wasm-initialized");
}