# Rustelo — Workspace Dependencies Registry
#
# Single source of truth for [workspace.dependencies] across rustelo and all
# implementations. This file is a Cargo workspace manifest with zero members —
# its only purpose is to host the canonical dependency table where Cargo-native
# tooling (Zed/rust-analyzer, cargo-edit, Dependabot, cargo-outdated) can read
# and update versions naturally.
#
# Sync workflow:
#   cargo xtask sync-deps --check            verify rustelo/Cargo.toml matches
#   cargo xtask sync-deps                    rewrite rustelo/Cargo.toml
#   cargo xtask sync-deps --target <dir>     rewrite <dir>/Cargo.toml (paths rebased)
#
# Path metadata that does not fit native Cargo (e.g. "do not rebase this path
# when propagating to other workspaces") lives in `sync.toml` alongside.

[workspace]
resolver = "2"
members = []

[workspace.dependencies]
# --- Rustelo foundation crates ---------------------------------------------
rustelo_utils = { path = "../crates/foundation/crates/rustelo_utils" }
rustelo_core_types = { path = "../crates/foundation/crates/rustelo_core_types" }
rustelo_language = { path = "../crates/foundation/crates/rustelo_language" }
rustelo_routing = { path = "../crates/foundation/crates/rustelo_routing" }
rustelo_core_lib = { path = "../crates/foundation/crates/rustelo_core_lib" }
rustelo_components_leptos = { path = "../crates/foundation/crates/rustelo_components_leptos" }
rustelo_components_htmx = { path = "../crates/foundation/crates/rustelo_components_htmx" }
rustelo_pages_leptos = { path = "../crates/foundation/crates/rustelo_pages_leptos" }
rustelo_pages_htmx = { path = "../crates/foundation/crates/rustelo_pages_htmx" }
rustelo_seo = { path = "../crates/foundation/crates/rustelo_seo" }
rustelo_client = { path = "../crates/foundation/crates/rustelo_client" }
rustelo_server = { path = "../crates/foundation/crates/rustelo_server", default-features = false }
rustelo_tools = { path = "../crates/foundation/crates/rustelo_tools" }
rustelo_macros = { path = "../crates/foundation/crates/rustelo_macros" }
rustelo_config = { path = "../crates/foundation/crates/rustelo_config" }

# --- Rustelo framework crates ----------------------------------------------
rustelo_core = { path = "../crates/framework/crates/rustelo_core" }
rustelo_web = { path = "../crates/framework/crates/rustelo_web" }
rustelo_auth = { path = "../crates/framework/crates/rustelo_auth" }
rustelo_content = { path = "../crates/framework/crates/rustelo_content" }
rustelo_cli = { path = "../crates/framework/crates/rustelo_cli" }

# --- External path deps (outside rustelo, no-rebase via sync.toml) ---------
platform-nats = { path = "../../../stratumiops/code/crates/platform-nats" }

# --- Leptos ecosystem ------------------------------------------------------
leptos = "=0.8.15"
leptos_router = "=0.8.11"
leptos_axum = "=0.8.7"
any_spawner = "0.3"
leptos_config = "=0.8.8"
leptos_meta = "=0.8.5"
leptos_integration_utils = "=0.8.7"
reactive_graph = "0.2.14"

# --- Serialization / common ------------------------------------------------
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
serde_yaml = "0.9"
serde-wasm-bindgen = "0.6.5"
toml = "1.1.2"

# --- HTTP / runtime --------------------------------------------------------
axum = "0.8.9"
axum-server = { version = "0.8", features = ["tls-rustls"] }
axum-test = "20.0"
tokio = { version = "1.52", features = ["rt-multi-thread"] }
tokio-util = { version = "0.7", features = ["io"] }
tokio-stream = { version = "0.1", features = ["sync"] }
tokio-test = "0.4"
tower = "0.5.3"
tower-http = { version = "0.6.11", features = ["fs"] }
tower-sessions = "0.15"
tower-cookies = "0.11"
http = "1"
reqwest = { version = "0.13.4", features = ["json"] }
reqwasm = "0.5.0"

# --- WASM / browser --------------------------------------------------------
wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4"
js-sys = "=0.3.97"
web-sys = { version = "=0.3.97", features = [
    "Clipboard",
    "Window",
    "Navigator",
    "Permissions",
    "MouseEvent",
    "KeyboardEvent",
    "Event",
    "Storage",
    "console",
    "File",
    "SvgElement",
    "SvgsvgElement",
    "SvgPathElement",
    "MediaQueryList",
] }
gloo-net = "0.7.0"
gloo-timers = { version = "0.4", features = ["futures"] }
console_error_panic_hook = "0.1.7"
console_log = "1"

# --- Errors / logging ------------------------------------------------------
anyhow = "1.0.102"
thiserror = "2.0.18"
log = "0.4.30"
env_logger = "0.11"
tracing = "0.1"
tracing-subscriber = "0.3"

# --- i18n ------------------------------------------------------------------
fluent = "0.17"
fluent-bundle = "0.16"
fluent-syntax = "0.12"
fluent-templates = { version = "0.14.0", features = ["tera"] }
unic-langid = { version = "0.9", features = ["unic-langid-macros"] }

# --- Auth / crypto ---------------------------------------------------------
jsonwebtoken = { version = "10.4", features = ["rust_crypto"] }
argon2 = "0.5"
oauth2 = "5.0"
rustls = "0.23"
rustls-pemfile = "2.2"
totp-rs = "5.7"
qrcode = { version = "0.14", features = ["svg"] }
base32 = "0.5"
sha2 = "0.11"
base64 = "0.22"
aes-gcm = "0.10"
hex = "0.4.3"

# --- Storage / data --------------------------------------------------------
sqlx = { version = "0.9.0", features = [
    "runtime-tokio",
    "tls-rustls-ring",
    "postgres",
    "sqlite",
    "chrono",
    "uuid",
    "migrate",
] }
uuid = { version = "1.23", features = ["v4", "serde", "js"] }
chrono = { version = "0.4", features = ["serde"] }
time = { version = "0.3", features = ["serde"] }

# --- Content / templating --------------------------------------------------
pulldown-cmark = { version = "0.13", features = ["simd"] }
comrak = { version = "0.52", features = ["syntect"] }
tera = "1.20"
minijinja = { version = "2", features = ["loader", "builtins", "json"] }
handlebars = "6.4"
gray_matter = "0.3"
syntect = "5.3"
ammonia = "4.1"
scraper = "0.27"
html-escape = "0.2"
unicode-normalization = "0.1"

# --- Email -----------------------------------------------------------------
lettre = { version = "0.11", default-features = false, features = [
    "tokio1-rustls-tls",
    "smtp-transport",
    "pool",
    "hostname",
    "builder",
] }
urlencoding = "2.1"

# --- Misc utility ----------------------------------------------------------
regex = "1.12.3"
glob = "0.3.3"
walkdir = "2.5"
ignore = "0.4"
tempfile = "3.27"
notify = { version = "8.2.0", default-features = false }
dotenv = "0.15.0"
async-trait = "0.1.89"
async-compression = { version = "0.4", features = ["gzip", "tokio"] }
async-nats = "0.49"
nkeys = "0.4"
bytes = "1.11"
futures = "0.3.32"
rand = "0.10"
rand_core = "0.10"
getrandom = { version = "0.4", features = ["std", "wasm_js"] }
once_cell = "1.21.4"
dashmap = "6"
lru = "0.18"
cfg-if = "1.0"
paste = "1.0.15"
typed-builder = "0.23"
rhai = { version = "1.25", features = ["serde", "only_i64", "no_float"] }

# --- CLI / TUI -------------------------------------------------------------
clap = { version = "4.6", features = ["derive", "env"] }
ratatui = "0.30"
inquire = "0.9"
crossterm = "0.29"
dialoguer = "0.12"
console = "0.16"
indicatif = "0.18"
similar = "3.1"

# --- Macro support ---------------------------------------------------------
syn = { version = "2.0", features = ["full"] }
quote = "1.0"
proc-macro2 = "1.0"

# --- Metrics ---------------------------------------------------------------
prometheus = "0.14"

# --- Path / version utilities ----------------------------------------------
shellexpand = "3.1"
semver = "1.0"
pathdiff = "0.2"

# --- Test mocking ----------------------------------------------------------
mockall = "0.14"
wiremock = "0.6"
