Layered UI primitives + components for Leptos:
crates/ui-state-primitives: state (Stately)crates/ui-headless: behavior + a11y (Aria)crates/ui-theme: tokens → CSS variablescrates/ui-motion: spring/WAAPI motion runtimecrates/ui: Spectrum-grade componentsapps/web-demo: CSR demo app (Trunk)apps/docs-app: CSR docs site (Trunk)
- Docs entrypoint:
docs/README.md - Philosophy and strategy:
docs/philosophy.md - Rules (hard constraints):
docs/RULES_ZH.md - Full markdown index:
docs/DOCS_INDEX.md - Doc governance:
docs/DOCS_GOVERNANCE.md
From the repo root (rust-ui/):
./scripts/dev-web-demo.sh
./scripts/dev-docs-app.shThese scripts:
- ensure
~/.cargo/binis onPATH(sotrunkis found) - unset
NO_COLOR(Trunk treats it as a boolean env var) - force
RUSTFLAGS="--cfg erase_components"(prevents Tachys tuple blowups in WASM) - check
wasm32-unknown-unknown+wasm-bindgenare installed - auto-patch
trunkonce so browserBuild failureoverlays include cargo stderr details
To skip the auto-patch step:
TRUNK_PATCH_ERROR_DETAILS=0 ./scripts/dev-docs-app.sh./scripts/smoke-web-demo.sh
./scripts/smoke-docs-app.shIf a smoke check fails, it prints the Trunk log path and keeps a screenshot for debugging.
./scripts/check.sh./scripts/release-web-demo.sh
./scripts/release-docs-app.shThese wrappers run trunk build --release, generate .gz (and .br if brotli is installed)
for wasm/js/css, and write dist/_headers with immutable cache headers for hashed assets.