4424db5acb
CI / Check (pull_request) Successful in 10m12s
CI / Detect Changes (pull_request) Has been skipped
CI / Deploy Agent (pull_request) Has been skipped
CI / Deploy Dashboard (pull_request) Has been skipped
CI / Deploy Docs (pull_request) Has been skipped
CI / Deploy MCP (pull_request) Has been skipped
Introduces a light theme alongside the existing dark Obsidian Control look, plus a sun/moon toggle in the sidebar footer. The dashboard's CSS already drove every surface through custom properties on :root, so the light theme is added as a second token set under `:root[data-theme="light"]` and, in parallel, inside a `@media (prefers-color-scheme: light)` block guarded by `:not([data-theme="dark"])`. Net effect: - A user with no stored preference gets their OS theme via the media query (no flash, no JS required). - A user who clicked the toggle gets `data-theme="light|dark"` set on `<html>`, which wins over the media query. The toggle component (`theme_toggle.rs`) reads `localStorage` first then `prefers-color-scheme` on mount, and writes both the DOM attribute and `localStorage` on click. All `web_sys` calls are gated behind `#[cfg(feature = "web")]` so the server build stays clean. Three CSS rules that hardcoded near-black hex values (the page dot grid, `.code-block`, and the graph stabilization overlay) get explicit light-mode overrides so they don't render as dark patches on white. web-sys feature list extended with Storage, MediaQueryList, and Element so the toggle can read the media query and set the attribute. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
76 lines
2.4 KiB
TOML
76 lines
2.4 KiB
TOML
[package]
|
|
name = "compliance-dashboard"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
default-run = "compliance-dashboard"
|
|
|
|
[[bin]]
|
|
name = "compliance-dashboard"
|
|
path = "../bin/main.rs"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[features]
|
|
web = ["dioxus/web", "dioxus/router", "dioxus/fullstack", "dep:web-sys", "dep:js-sys", "dep:wasm-bindgen", "dep:gloo-timers"]
|
|
server = [
|
|
"dioxus/server",
|
|
"dioxus/router",
|
|
"dioxus/fullstack",
|
|
"compliance-core/mongodb",
|
|
"compliance-core/telemetry",
|
|
"dep:axum",
|
|
"dep:mongodb",
|
|
"dep:reqwest",
|
|
"dep:tower-http",
|
|
"dep:secrecy",
|
|
"dep:dotenvy",
|
|
"dep:dioxus-cli-config",
|
|
"dep:dioxus-fullstack",
|
|
"dep:tokio",
|
|
"dep:tower-sessions",
|
|
"dep:time",
|
|
"dep:rand",
|
|
"dep:url",
|
|
"dep:sha2",
|
|
"dep:base64",
|
|
"dep:uuid",
|
|
"dep:bson",
|
|
]
|
|
|
|
[dependencies]
|
|
compliance-core = { workspace = true, default-features = false }
|
|
dioxus = "=0.7.3"
|
|
dioxus-free-icons = { version = "0.10", features = ["bootstrap"] }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
chrono = { workspace = true }
|
|
tracing = { workspace = true }
|
|
dioxus-logger = "0.6"
|
|
thiserror = { workspace = true }
|
|
|
|
# Web-only
|
|
reqwest = { workspace = true, optional = true }
|
|
web-sys = { version = "0.3", optional = true, features = ["Blob", "BlobPropertyBag", "HtmlAnchorElement", "Url", "Document", "Element", "Window", "Storage", "MediaQueryList"] }
|
|
js-sys = { version = "0.3", optional = true }
|
|
wasm-bindgen = { version = "0.2", optional = true }
|
|
gloo-timers = { version = "0.3", features = ["futures"], optional = true }
|
|
|
|
# Server-only
|
|
axum = { version = "0.8", optional = true }
|
|
mongodb = { workspace = true, optional = true }
|
|
tower-http = { version = "0.6", features = ["cors", "trace"], optional = true }
|
|
secrecy = { workspace = true, optional = true }
|
|
dotenvy = { version = "0.15", optional = true }
|
|
tokio = { workspace = true, optional = true }
|
|
dioxus-cli-config = { version = "=0.7.3", optional = true }
|
|
dioxus-fullstack = { version = "=0.7.3", optional = true }
|
|
tower-sessions = { version = "0.15", default-features = false, features = ["axum-core", "memory-store", "signed"], optional = true }
|
|
time = { version = "0.3", default-features = false, optional = true }
|
|
rand = { version = "0.9", optional = true }
|
|
url = { version = "2", optional = true }
|
|
sha2 = { workspace = true, optional = true }
|
|
base64 = { version = "0.22", optional = true }
|
|
uuid = { workspace = true, optional = true }
|
|
bson = { version = "2", features = ["chrono-0_4"], optional = true }
|