Correctness: - MangaGridSkeleton: covers rendered 0px tall because height="0" is a definite height that defeats aspect-ratio. Skeleton gains an `aspectRatio` prop (height stays auto) so the 2/3 cover box is reserved and the grid no longer shifts when real covers load. - Move `.manga-card` layout into global tokens.css (it was scoped to MangaCard, so the skeleton's cards inherited none of it). Both consumers now share one definition. - NavProgress: rebuilt as an idle/loading/done state machine. It now completes to full and fades on settle (was snapping away instantly), restarts the trickle when one navigation supersedes another (was parking frozen near 90%), animates transform/opacity only with will-change gated to the active phase, and hides itself in reader fullscreen. - Skeleton: text-variant height resolved in one place (no inline style shadowing a stylesheet rule); shimmer gradient/animation gated behind prefers-reduced-motion: no-preference so reduced motion shows a flat block. A11y: - Home loading region announces via visually-hidden text instead of an aria-label a live region won't reliably read. Cleanup: - Drop the fragile :first-child selector and index-keying ceremony in MangaGridSkeleton; simplify Skeleton's style construction. Tests: adds regression guards for the 0px cover collapse, the aspect-ratio box, text-height defaulting, and the nav-progress complete/restart phases. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
75 lines
2.4 KiB
TOML
75 lines
2.4 KiB
TOML
[package]
|
||
name = "mangalord"
|
||
version = "0.114.2"
|
||
edition = "2021"
|
||
default-run = "mangalord"
|
||
|
||
[lib]
|
||
path = "src/lib.rs"
|
||
|
||
[[bin]]
|
||
name = "mangalord"
|
||
path = "src/main.rs"
|
||
|
||
[[bin]]
|
||
name = "crawler"
|
||
path = "src/bin/crawler.rs"
|
||
|
||
[dependencies]
|
||
axum = { version = "0.7", features = ["macros", "multipart"] }
|
||
tokio = { version = "1", features = ["full"] }
|
||
sqlx = { version = "0.8", features = ["runtime-tokio", "postgres", "uuid", "chrono", "macros", "migrate"] }
|
||
serde = { version = "1", features = ["derive"] }
|
||
serde_json = "1"
|
||
uuid = { version = "1", features = ["v4", "serde"] }
|
||
chrono = { version = "0.4", features = ["serde"] }
|
||
chrono-tz = "0.9"
|
||
tracing = "0.1"
|
||
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
||
tower = { version = "0.5", features = ["util"] }
|
||
tower-http = { version = "0.6", features = ["trace", "cors"] }
|
||
thiserror = "1"
|
||
anyhow = "1"
|
||
async-trait = "0.1"
|
||
dotenvy = "0.15"
|
||
argon2 = "0.5"
|
||
rand = "0.8"
|
||
sha2 = "0.10"
|
||
subtle = "2"
|
||
base64 = "0.22"
|
||
# Image decode + downscale for the analysis worker (keep the page image
|
||
# under the local vision model's token budget). Only the manga page formats.
|
||
image = { version = "0.25", default-features = false, features = ["jpeg", "png", "webp"] }
|
||
axum-extra = { version = "0.9", features = ["cookie", "typed-header"] }
|
||
time = "0.3"
|
||
infer = "0.16"
|
||
tokio-util = { version = "0.7", features = ["io"] }
|
||
futures-core = "0.3"
|
||
futures-util = "0.3"
|
||
bytes = "1"
|
||
chromiumoxide = { version = "0.7", features = ["tokio-runtime", "_fetcher-rusttls-tokio"], default-features = false }
|
||
sysinfo = { version = "0.32", default-features = false, features = ["system", "component"] }
|
||
nix = { version = "0.29", features = ["fs"] }
|
||
scraper = "0.20"
|
||
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "socks", "cookies", "stream", "json"] }
|
||
ocrs = "0.12"
|
||
rten = "0.24"
|
||
|
||
[dev-dependencies]
|
||
tempfile = "3"
|
||
tower = { version = "0.5", features = ["util"] }
|
||
http-body-util = "0.1"
|
||
mime = "0.3"
|
||
futures-util = "0.3"
|
||
tokio = { version = "1", features = ["test-util"] }
|
||
|
||
# Trim debug builds: keep line numbers in panics / backtraces but drop the
|
||
# full DWARF info (variable-level inspection in gdb/lldb). With a sqlx +
|
||
# axum + tokio dep tree the default ("full") leaves backend/target on the
|
||
# order of tens of GiB; this typically cuts ~50–70% off that.
|
||
[profile.dev]
|
||
debug = "line-tables-only"
|
||
|
||
[profile.test]
|
||
debug = "line-tables-only"
|