slate-framework 1.0.1

GPU-accelerated Rust UI framework — umbrella crate
[package]
name = "slate-framework"
description = "GPU-accelerated Rust UI framework — umbrella crate"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
authors.workspace = true
readme = "README.md"
keywords = ["gui", "ui", "gpu", "wgpu", "framework"]
categories = ["gui", "graphics", "rendering"]

[dependencies]
slate-platform = { path = "../slate-platform", version = "1.0.1" }
slate-reactive.workspace = true
slate-renderer = { path = "../slate-renderer", version = "1.0.1" }
slate-text = { path = "../slate-text", version = "1.0.1" }

# Phase 3 dependencies (pinned to latest stable 2026-05-07)
taffy = "=0.10.1"
smallvec = "=1.15.1"
accesskit = "=0.24.0"
unicode-segmentation.workspace = true

# Phase 4 async runtime (pinned to latest stable 2026-05-07)
smol = "=2.0.2"
async-compat = { version = "=0.2.4", optional = true }
tokio = { version = "=1.52.0", features = ["rt"], optional = true }

# Shared workspace deps
wgpu.workspace = true
bytemuck.workspace = true
glam.workspace = true
log.workspace = true
thiserror.workspace = true
pollster.workspace = true
image.workspace = true

[dev-dependencies]
trybuild = "1"
tracing-test = "0.2"
env_logger.workspace = true
insta.workspace = true

[features]
default = []
tokio = ["dep:tokio", "dep:async-compat"]
test-hooks = ["slate-renderer/test-hooks", "slate-platform/test-hooks"]
# Unified profiling surface. Re-exports per-crate counters
# (`slate-reactive::profiling`, `slate-renderer::profiling`) and owns the
# optional counting allocator. Default-build is byte-equivalent because every
# counter increment sits behind a `#[cfg(feature = "profiling")]` gate.
profiling = ["slate-reactive/profiling", "slate-renderer/profiling"]

# Dispatch suites for the multi-line TextArea run their `fn main` on the process
# main thread (`harness = false`) so the real platform + a 1×1 window construct
# on macOS, where AppKit mandates the main thread. They build only with
# `test-hooks`, which exposes the `*_for_test` hooks the cases drive.
[[test]]
name = "text_area_nav"
harness = false
required-features = ["test-hooks"]

[[test]]
name = "text_area_editing"
harness = false
required-features = ["test-hooks"]

[[test]]
name = "text_area_layout"
harness = false
required-features = ["test-hooks"]

[[test]]
name = "text_area_mouse"
harness = false
required-features = ["test-hooks"]

[[test]]
name = "event_capture_and_window_id"
harness = false
required-features = ["test-hooks"]

# Golden-trace dispatch pin. `harness = false` so its `fn main` runs on the
# process main thread — required on macOS for `DefaultPlatform::new()` and
# its `MainThreadMarker` use. `required-features = ["test-hooks"]` keeps the
# build gated on the test-only `_for_test` hooks. Snapshots live next to the
# test in `crates/slate-framework/tests/snapshots/` and are blessed via
# `cargo insta review`.
[[test]]
name = "dispatch_golden_trace"
harness = false
required-features = ["test-hooks"]

# Two-window smoke: per-window state isolation, last-window-destroy semantics,
# and reactive wake-all bridge verification.
[[test]]
name = "multi_window_smoke"
harness = false
required-features = ["test-hooks"]

# Two-window golden-trace companion to dispatch_golden_trace. Pins the
# handler-invocation order for interleaved events across two live windows.
[[test]]
name = "golden_trace_two_window"
harness = false
required-features = ["test-hooks"]