[package]
name          = "ltk"
version       = "0.2.0"
edition       = "2021"
rust-version  = "1.85"
# MSRV-aware resolver: keep a fresh resolve on deps compatible with rust-version (Debian stable = 1.85).
resolver      = "3"
license       = "LGPL-2.1-only"
description   = "Lightweight declarative Wayland UI toolkit. Elm-shaped App / view / update model with GLES and software rendering backends, layer-shell support, runtime theming and a runtime-free core surface for embedding."
repository    = "https://github.com/liberux/ltk"
documentation = "https://docs.rs/ltk"
homepage      = "https://liberux.net"
readme        = "README.md"
keywords      = [ "wayland", "ui", "gui", "toolkit", "layer-shell" ]
categories    = [ "gui", "rendering", "os::linux-apis" ]
authors       = [ "Liberux Labs, S. L. <info@liberux.net>" ]
exclude       = [
	"target/*",
	"debian/*",
	"themes/*",
	"liberux.toml",
	"TODO",
]

[features]
# Exposes `ltk::test_support` — internal helpers (widget handlers, laid-out
# widget lookup, slider math) used only by ltk's own integration tests. Not
# part of the stable public API; off by default so third-party builds never
# see it. `make test` enables it.
test-support = []

[dependencies]
chrono = { version = "0.4", features = ["clock"] }
serde      = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
smithay-client-toolkit = { version = "0.20", features = ["calloop", "calloop-wayland-source", "xkbcommon"] }
calloop            = "0.14"
calloop-wayland-source = "0.4"
tiny-skia          = "0.12"
fontdue            = "=0.9.3"
unicode-bidi       = "0.3"
rustybuzz          = "0.14"
image              = { version = "=0.25.9", default-features = false, features = ["png", "jpeg", "webp"] }
resvg              = "0.44"
rust-i18n          = "3"
# Transitive dep of rust-i18n (globwalk → ignore); 0.4.24+ needs a rustc
# newer than Debian's 1.85, and its manifest does not declare that MSRV.
ignore             = "=0.4.23"
wayland-protocols  = { version = "0.32", features = ["client", "unstable", "staging"] }
wayland-egl        = "0.32"
khronos-egl        = { version = "6", features = ["dynamic"] }
glow               = "0.17"
raw-window-handle  = "0.6"
# AT-SPI2 / accessibility is delegated to AccessKit so we get the same
# Node / Role / TreeUpdate model the rest of the Rust GUI ecosystem
# (egui, iced via the COSMIC fork, dioxus) is converging on. The
# Linux platform adapter (`accesskit_unix`) handles every D-Bus
# detail — registering against `org.a11y.Bus`, exposing the
# `org.a11y.atspi.Accessible` interface hierarchy, translating
# `Action`s back into our event loop, emitting state-changed signals
# — so this crate only has to construct an `accesskit::TreeUpdate`
# from `widget_rects` once per frame.
accesskit          = "0.17"
accesskit_unix     = "0.13"

[dev-dependencies]
criterion = { version = "0.5", features = ["html_reports"] }

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