[package]
name = "revue"
version = "2.25.0"
edition = "2021"
rust-version = "1.87"
description = "A Vue-style TUI framework for Rust with CSS styling"
license = "MIT"
repository = "https://github.com/hawk90/revue"
homepage = "https://hawk90.github.io/revue"
documentation = "https://docs.rs/revue"
readme = "README.md"
keywords = ["tui", "terminal", "css", "reactive", "ui"]
categories = ["command-line-interface", "gui"]
exclude = [
    "revue-cli/",
    "references/",
    "playground/",
    "extensions/",
    "tools/",
    "docs/",
    "tree-sitter-revue-css/",
    ".claude/",
    ".github/",
    "tests/snapshots/",
    "*.md",
    "cliff.toml",
    "deny.toml",
    "lefthook.yml",
]

[dependencies]
# ═══════════════════════════════════════════
# Terminal
# ═══════════════════════════════════════════
crossterm = "0.29"

# ═══════════════════════════════════════════
# Layout
# ═══════════════════════════════════════════
taffy = "0.9"

# ═══════════════════════════════════════════
# Text & Unicode
# ═══════════════════════════════════════════
unicode-width = "0.2"
unicode-segmentation = "1.10"
unic-emoji-char = "0.9"
textwrap = "0.16"

# ═══════════════════════════════════════════
# Markdown & Syntax (optional)
# ═══════════════════════════════════════════
pulldown-cmark = { version = "0.13", optional = true }
syntect = { version = "5.2", optional = true }

# ═══════════════════════════════════════════
# Image (Kitty Protocol, optional)
# ═══════════════════════════════════════════
image = { version = "0.25", optional = true }
base64 = { version = "0.22", optional = true }

# ═══════════════════════════════════════════
# Serialization & Config (optional)
# ═══════════════════════════════════════════
serde = { version = "1.0", features = ["derive"], optional = true }
toml = { version = "0.9", optional = true }
dirs = { version = "6.0", optional = true }

# ═══════════════════════════════════════════
# Utilities
# ═══════════════════════════════════════════
bitflags = "2.6"
arboard = { version = "3.4", optional = true }
notify = { version = "8.2", optional = true }
tracing = { version = "0.1", optional = true }
tracing-subscriber = { version = "0.3", optional = true }

# ═══════════════════════════════════════════
# QR Code & HTTP & System (optional)
# ═══════════════════════════════════════════
qrcode = { version = "0.14", optional = true }
sysinfo = { version = "0.37", optional = true }
reqwest = { version = "0.13", features = ["json", "blocking"], optional = true }
similar = { version = "2.6", optional = true }

# ═══════════════════════════════════════════
# Error Handling
# ═══════════════════════════════════════════
thiserror = "2.0"

[dev-dependencies]
insta = "1.34"
tokio-test = "0.4"
pretty_assertions = "1.4"
criterion = { version = "0.8", features = ["html_reports"] }
proptest = "1.4"
tempfile = "3.10"
serial_test = "3.1"

[[bench]]
name = "render"
harness = false

[[bench]]
name = "layout"
harness = false

[[bench]]
name = "css"
harness = false

[[bench]]
name = "dom"
harness = false

[features]
default = ["full"]
# All features enabled (current behavior)
full = [
    "devtools",
    "async",
    "config",
    "tracing",
    "markdown",
    "syntax-highlighting",
    "image",
    "qrcode",
    "sysinfo",
    "diff",
    "clipboard",
    "hot-reload",
]
devtools = []

# Core optional features
async = ["dep:tokio"]
config = ["dep:serde", "dep:toml", "dep:dirs"]
tracing = ["dep:tracing", "dep:tracing-subscriber"]

# Heavy optional features
markdown = ["dep:pulldown-cmark"]
syntax-highlighting = ["dep:syntect"]
image = ["dep:image", "dep:base64"]
qrcode = ["dep:qrcode"]
sysinfo = ["dep:sysinfo"]
diff = ["dep:similar"]
clipboard = ["dep:arboard"]
hot-reload = ["dep:notify"]
http = ["dep:reqwest"]

# Examples with required features
[[example]]
name = "slideshow"
required-features = ["markdown"]

[dependencies.tokio]
version = "1"
features = ["rt-multi-thread", "macros", "time", "sync"]
optional = true
