(pagetop): Añade Margin y Padding nativos

- Nuevo módulo `html::spacing` con `Margin`/`Padding`: igual que
  `FlexItem`, se resuelven generando clases CSS dinámicamente y se
  aplican con `PropsOp::margin()`/`PropsOp::padding()` sobre cualquier
  componente.
- Elimina `Margin`/`Padding` de `pagetop-bootsier`.
- Añade el ejemplo `intro-spacing` con los patrones de uso típicos.
This commit is contained in:
Manuel Cillero 2026-09-13 00:48:11 +02:00
parent 64113aff09
commit 50e4b42fe4
17 changed files with 881 additions and 322 deletions

30
src/html/spacing.rs Normal file
View file

@ -0,0 +1,30 @@
//! Márgenes y relleno nativos aplicados a componentes.
//!
//! [`Margin`] y [`Padding`] configuran márgenes externos y relleno interno por lado lógico y punto
//! de corte. Aplican sobre cualquier componente. Se usan igual que [`FlexItem`], con
//! [`PropsOp::margin()`] y [`PropsOp::padding()`] sobre el `with_prop()` que normalmente ya expone
//! cualquier componente.
//!
//! # Ejemplo
//!
//! ```rust,no_run
//! use pagetop::prelude::*;
//!
//! // Margen exterior arriba/abajo y relleno interno por los cuatro lados.
//! // `Margin` y `Padding` implementan `From` para `PropsOp`, así que `with_prop()`
//! // acepta `.into()` en vez de `PropsOp::margin()`/`PropsOp::padding()`.
//! let card = Container::new()
//! .with_prop(Margin::new().with_y(UnitValue::RelRem(1.0)).into())
//! .with_prop(Padding::new().with_all(UnitValue::RelRem(1.5)).into())
//! .with_child(Button::plain(Lc::n("Aceptar")));
//! ```
//!
//! [`FlexItem`]: crate::html::flex::FlexItem
//! [`PropsOp::margin()`]: crate::html::props::PropsOp::margin
//! [`PropsOp::padding()`]: crate::html::props::PropsOp::padding
mod margin;
pub use margin::Margin;
mod padding;
pub use padding::Padding;