🚧 (theme): Renombra variantes de Intent

Renombra `Intent::Secondary`/`Danger` a `Neutral`/`Severe` y actualiza
Badge y su CSS por defecto (basic.css) al nuevo vocabulario.

Introduce el punto de extensión `Theme::intent_color()`, que traduce una
`Intent` al nombre de color de la paleta propia de cada tema, con
`Intent::color(cx)` como atajo de uso desde los componentes.
This commit is contained in:
Manuel Cillero 2026-08-28 01:10:45 +02:00
parent af53cd4b52
commit 56a6691c87
6 changed files with 116 additions and 61 deletions

View file

@ -28,22 +28,22 @@ async fn renders_as_a_span_element() {
}
#[pagetop::test]
async fn default_intent_is_secondary() {
async fn default_intent_is_neutral() {
let mut badge = Badge::labeled(Lc::n("Admin"));
let html = badge.render(&mut Context::default()).await.into_string();
assert!(html.contains(r#"class="badge badge-secondary""#));
assert!(html.contains(r#"class="badge badge-neutral""#));
}
#[pagetop::test]
async fn each_direct_constructor_sets_its_intent() {
let cases = [
(Badge::primary(Lc::n("x")), "badge-primary"),
(Badge::secondary(Lc::n("x")), "badge-secondary"),
(Badge::neutral(Lc::n("x")), "badge-neutral"),
(Badge::success(Lc::n("x")), "badge-success"),
(Badge::info(Lc::n("x")), "badge-info"),
(Badge::warning(Lc::n("x")), "badge-warning"),
(Badge::danger(Lc::n("x")), "badge-danger"),
(Badge::severe(Lc::n("x")), "badge-severe"),
];
for (mut badge, expected_class) in cases {
let html = badge.render(&mut Context::default()).await.into_string();
@ -56,16 +56,16 @@ async fn each_direct_constructor_sets_its_intent() {
#[pagetop::test]
async fn with_intent_overrides_the_default() {
let mut badge = Badge::labeled(Lc::n("Admin")).with_intent(Intent::Danger);
let mut badge = Badge::labeled(Lc::n("Admin")).with_intent(Intent::Severe);
let html = badge.render(&mut Context::default()).await.into_string();
assert!(html.contains(r#"class="badge badge-danger""#));
assert!(html.contains(r#"class="badge badge-severe""#));
}
#[pagetop::test]
async fn direct_constructor_is_equivalent_to_labeled_with_intent() {
let mut from_constructor = Badge::danger(Lc::n("Admin"));
let mut from_builder = Badge::labeled(Lc::n("Admin")).with_intent(Intent::Danger);
let mut from_constructor = Badge::severe(Lc::n("Admin"));
let mut from_builder = Badge::labeled(Lc::n("Admin")).with_intent(Intent::Severe);
assert_eq!(
from_constructor
@ -89,9 +89,9 @@ async fn with_id_sets_the_identifier() {
#[pagetop::test]
async fn with_prop_adds_extra_classes_alongside_the_intent_class() {
let mut badge = Badge::danger(Lc::n("Admin")).with_prop(PropsOp::add_classes("custom"));
let mut badge = Badge::severe(Lc::n("Admin")).with_prop(PropsOp::add_classes("custom"));
let html = badge.render(&mut Context::default()).await.into_string();
assert!(html.contains("badge-danger"));
assert!(html.contains("badge-severe"));
assert!(html.contains("custom"));
}