Commit graph

44 commits

Author SHA1 Message Date
307ca6f62c ✨ (pagetop): Añade Grid y extrae Flex de Container 2026-09-18 16:49:09 +02:00
dfff12881f 🚧 (pagetop): Comparte align entre Flex y Grid
Extrae `Align`/`AlignContent`/`ItemAlign`/`Gap` de Flexbox a un nuevo
módulo neutral `html::align` (`Items`/`Content`/`ItemSelf`/`Gap`) para
que tambien lo use CSS Grid.
2026-09-13 23:08:39 +02:00
50e4b42fe4 ✨ (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.
2026-09-13 00:48:11 +02:00
f2a7507317 ✨ (theme): Añade Breakpoint y ResponsiveStyles
- Nuevo `Breakpoint` (`Xs`/`Sm`/`Md`/`Lg`/`Xl`/`Xxl`) y
  `Theme::breakpoint_min_width()`, que traduce cada variante al ancho
  mínimo CSS del tema activo (mismo patrón que `Theme::intent_color()`).
- `ResponsiveStyles` acumula declaraciones `property: value` agrupadas
  por punto de corte (opcional: `None` para reglas siempre activas, sin
  depender del tema) y por clase o clases. Aplica first-write-wins para
  clases utilitarias repetidas por muchos componentes. `render()` las
  agrupa en bloques `@media (min-width: ...)` mobile-first, sin saltos
  de línea.
2026-09-06 01:46:06 +02:00
17e16652e4 ✨ (pagetop): Añade Flex/FlexItem para usar Flexbox
Container y Navbar lo adoptan vía `with_flex()`/`PropsOp::flex_item()`.
Y se elimina `ButtonSet` porque su funcionalidad queda cubierta por este
mecanismo más general. Incluye el ejemplo `examples/intro-flex.rs` con
los patrones de uso.
2026-09-04 01:04:53 +02:00
bf4c635e59 ♻️ (pagetop): Sustituye Attr<T> por Option<T>
`Attr<T>` no aportaba nada sobre `Option<T>` directo: `Getters` ya trata
los campos `Option<T>` como caso especial (`Option<&T>`, o `Option<T>`
con `#[getters(copy)]`) y `#[builder_fn]` funciona igual sobre ellos.
2026-08-17 05:28:12 +02:00
745d492d5b ✨ (html): Evita duplicar atributos de Props
`html!` recopila los atributos literales de cada elemento y evita que
`Props` los duplique al renderizar.
2026-08-17 00:02:20 +02:00
e7f2563967 ✨ (htmx): Añade soporte HTMX a tablas ordenables
- Nuevo `SortDir` en `pagetop::html` para representar direcciones de
  orden (asc/desc) y calcular la siguiente al pulsar una cabecera.
- `hx_table::sort_link()` construye el enlace de ordenación con los
  cuatro atributos `hx-*` fijos, reutilizable en cualquier tabla.
- `HtmxResponse` usa `RoutePath` en `location`/`push_url`/`replace_url`/
  `redirect` para preservar "lang"; `location_json()` se separa de
  `location()` para el caso de configuración JSON personalizada.
- Añade el módulo `prelude` y una batería de tests para hx, hx_table,
  request, response y extension.
2026-07-23 07:21:27 +02:00
af548b03c9 ✨ (core): Añade Route, RoutePath y Waypoint
`Route` resuelve URLs sensibles al `Context`/idioma en propiedades de
componentes; `RoutePath` (renombrado desde html/route.rs) es el valor
concreto de ruta + query. `Waypoint` transporta la URL de retorno entre
pantallas de listado/alta/edición vía query string.

Ajusta `Context::route()`, `Redirect` y los componentes que aceptan
rutas para integrarse con el nuevo tipo `Route`.
2026-07-19 22:16:21 +02:00
25713a8a13 ♻️ (html): Añade valores extra a Props
- Reordena campos, variantes y métodos para mayor consistencia interna.
- Añade `extra_or`, `extra_or_default` y `extra_or_else` a `Props`.
- Mejora la documentación y amplía los tests de integración.
2026-07-09 00:05:28 +02:00
c7b680a7f7 ✨ (html): Añade Preload para precarga de recursos
Nuevo tipo `Preload` (junto a `StyleSheet` y `JavaScript`) que emite
`<link rel="preload">` con soporte para fuentes, estilos, scripts e
imágenes (WebP y AVIF incluidos). Bootsier lo usa para precargar las
fuentes Source Sans 3 y eliminar el FOUT en la carga inicial.
2026-07-07 00:03:36 +02:00
62219584b0 ♻️ (html): API para id's en Props y componentes 2026-06-20 15:02:23 +02:00
f9e87058d8 ♻️ (html): Migra Classes/ClassesOp a Props/PropsOp
Introduce `Props`/`PropsOp` para gestionar pares `atributo="valor"` y
clases CSS para aplicar en componentes.

- Constructores `Props::new()`, `Props::classes()` y `Props::default()`.
- `Page.body_classes` reemplazado por `body_props` (permite atributos
  arbitrarios en `<body>`, no sólo clases).
- Tests nuevos para atributos y reescritos para clases.
2026-06-12 01:55:07 +02:00
9c58d5e1d6 ♻️ (pagetop): Migra de actix-web a Axum
Sustituye el módulo `service` por `web` y adapta toda la API al modelo
de Axum: router inmutable, extractores via `FromRequestParts` y
servicios Tower para archivos estáticos.

- `HttpRequest` pasa a ser un tipo propio, mínimo y clonable.
- `configure_services` pasa a `configure_routes`.
- `EmbeddedFilesService` pasa a `ServeEmbedded`.
- Elimina `session_lifetime` de `Server` (va a `pagetop-auth`).
- Actualiza tests y ejemplos a la nueva API.
2026-05-30 22:30:58 +02:00
908fd969e4 ♻️ Cambia en prepare_component() el tipo devuelto
Elimina `PrepareMarkup` como tipo de retorno de prepare_component() y de
`FnPrepareRender`, sustituyéndolo directamente por `Markup`. Se elimina
una capa innecesaria, ya que html! {} y html! { ... } cubren todos los
casos que ofrecía `PrepareMarkup`.
2026-05-02 18:19:45 +02:00
4bf2c18b24 ♻️ Refactoriza AttrClasses como Classes 2025-12-28 14:57:21 +01:00
fa32833ffa ♻️ Refactoriza atributos HTML 2025-12-28 14:03:35 +01:00
700bca7258 💡 Repasa comentarios de la cabecera de funciones 2025-12-16 09:06:52 +01:00
476aff1d8e ✨ (pagetop): Añade gestión de rutas con parámetros 2025-12-12 00:14:55 +01:00
4ac7caddd4 🗑️ Elimina métodos y definiciones obsoletas 2025-11-23 14:37:00 +01:00
ceaee54484 🎨 Protege el uso de render en PrepareMarkup 2025-11-17 22:47:47 +01:00
2e39af0856 ♻️ (bootsier): Refactoriza la gestión de clases
- Mejora la legibilidad del código.
- Simplifica las alteraciones de clases en los componentes `Container`,
  `Dropdown`, `Image`, `Nav`, `Navbar` y `Offcanvas` usando métodos
  dedicados para generar clases en función de sus propiedades.
- Mejora los enums añadiendo métodos que devuelven sus clases
  asociadas, reduciendo código repetitivo.
- Elimina el trait `JoinClasses` y su implementación, integrando la
  lógica de unión de clases directamente en los componentes.
2025-11-15 13:16:15 +01:00
5ec69345b3 ✨ Añade trait JoinClasses para unir clases CSS
También elimina macros sin uso `join_op!` y `join_strict!` (KISS).
2025-11-08 08:07:59 +01:00
534b1f9615 🍱 Reemplaza imágenes del logo de PageTop con SVG 2025-10-26 06:38:10 +01:00
39a3dabcfb ✨ (html): Añade soporte para unidades CSS 2025-10-13 13:13:33 +02:00
f25f62dd3c 📝 Evita en los ejemplos use pagetop::prelude::*; 2025-10-12 06:57:04 +02:00
843aed86c7 🚚 Renombra ErrorParam por ContextError 2025-09-30 23:45:13 +02:00
075f61bf09 🚧 (core): Mueve Context al ámbito de componentes 2025-09-30 23:36:09 +02:00
6b08b92635 🚚 Renombra AssetsOp por ContextOp 2025-09-30 20:21:06 +02:00
67a9b057ee 🚧 (base): Añade nuevo componente menu 2025-09-28 13:47:33 +02:00
31435f30d3 💡 Mejora legibilidad de comentarios 2025-09-28 08:51:21 +02:00
2ac3c2a9c4 🔥 Elimina definitivamente TypedOpt por Typed 2025-09-27 21:18:54 +02:00
ce4557684e 🚚 Renombra TypedSlot por TypedOpt 2025-09-25 21:36:37 +02:00
a96a3fdf9f 🔥 Elimina Render para usar siempre el contexto 2025-09-11 19:58:50 +02:00
7179cf0831 🎨 Unifica conversiones a String con to_string()
Como `String::from()` y `.to_string()` son equivalentes, se sustituyen
todas las ocurrencias de `String::from()` por `to_string()` para mayor
coherencia y legibilidad.
2025-09-11 19:03:34 +02:00
b10d0aadf4 🚧 (context): Define un trait común de contexto 2025-09-07 21:06:50 +02:00
5ef85154b5 ♻️ (html): Cambia tipos Option... por Attr...
Renombra los tipos para atributos HTML `Id`, `Name`, `Value` (`String`),
`L10n` (`Translate`) y `Classes`. Y mueve `OptionComponent` al *core* de
componentes como `TypedSlot`.
2025-08-23 18:52:45 +02:00
4af558289e ♻️ Reemplaza ContextOp por AssetsOp en el contexto 2025-07-27 00:27:11 +02:00
c379ac2879 🧑‍💻 Mejora las operaciones de cambio en contexto 2025-07-24 13:16:39 +02:00
8e67065aae ✨ Añade acciones base y renderizado de componentes
- Añade acciones BeforeRender y AfterRender para ejecutar código
  personalizado antes y después de renderizar un componente.
- Introduce la acción PrepareRender para personalizar totalmente el
  renderizado de un componente.
- Se actualizan las definiciones de acciones para utilizar el nuevo
  "trait" ActionDispatcher.
- Se crea un nuevo trait ComponentTrait para definir componentes
  renderizables.
- Se implementan las estructuras Children y Child para gestionar
  componentes hijos dentro de un componente padre.
- Se añade OptionComponent para encapsular de forma segura componentes
  opcionales y poder usarlos en otros componentes.
2025-07-24 08:38:17 +02:00
4f56d4441f ✨ Añade tipos para renderizar atributos HTML 2025-07-21 20:52:45 +02:00
b3ed8e07af ✨ Añade soporte para recursos en documentos HTML
- Incluye los recursos favicon, hojas de estilo y scripts JavaScript.
- Se introduce una estructura de contexto que, además de gestionar el
  idioma y el uso de parámetros contextuales, permite administrar estos
  recursos en documentos HTML.
2025-07-20 14:24:19 +02:00
6944938910 ⬆️ Actualiza el código de maud a la versión 0.27.0 2025-07-07 20:31:00 +02:00
1fb8e937d1 ✨ Añade macro para componer HTML en código
- Incorpora el código de la versión 0.25.0 de `maud_macros` creado por
  Chris Wong.
- Y reexporta los elementos esenciales desde la librería principal.
2025-07-07 18:21:00 +02:00