new components

This commit is contained in:
2026-08-06 18:10:55 +02:00
parent b02c885b83
commit f86db1556c
149 changed files with 7038 additions and 395 deletions

View File

@@ -72,6 +72,14 @@ hecho **no se pueden enlazar a mano** esas entradas en un elemento que ya use
Se puede ver funcionando en la app `playground` (`nx serve playground`).
## Theming: tokens CSS
El aspecto visual (color, forma, sombra, tipografía de controles) se resuelve
en custom properties (`--pi-color-*`, `--pi-theme-*`) aplicadas vía `ShellClass`
(`pi-shell pi-shell__<tema>`). Documentación completa, tabla de valores por
tema (Default/Alternative/Minimal/Gradient) y guía para añadir tokens o temas
nuevos: [`TOKENS.md`](./TOKENS.md).
| Componente | Contrato | Tipo del valor |
| ---------------------------------------------------- | --------------------- | ------------------------------------- |
| text, email, password, phone, icon, search, textarea | `FormValueControl` | `string` |
@@ -106,6 +114,63 @@ Detalles a tener en cuenta:
Los selects (`ui/select`) siguen con `ControlValueAccessor`; quedaron fuera del
alcance de esta migración.
## Charts
`pi-chart` (un componente, un input `type`) se dividió en **4 componentes
independientes** — `pi-line-chart`, `pi-bar-chart`, `pi-pie-chart`,
`pi-doughnut-chart` —, cada uno en su propia carpeta, con su propio selector y
su propio registro de Chart.js. Ningún consumidor arrastra código de un tipo
de gráfico que no usa: `pi-pie-chart` no registra `LineController`/`BarController`.
Comparten dos bases abstractas (no un único componente con `@switch`):
- `PiBaseChartComponent` — el `<canvas>`, `device`, y el ciclo de vida que
llama a `buildChart()`.
- `PiBaseCartesianChartComponent extends PiBaseChartComponent` — de
`pi-line-chart`/`pi-bar-chart`: reciben `datasets` (una serie por
elemento, comparadas a lo largo de `xAxisMarks`), usan `pi-chart-legend`
(leyenda propia, no la de Chart.js) y comparten el tooltip/hover.
- `PiBaseArcChartComponent extends PiBaseChartComponent` — de
`pi-pie-chart`/`pi-doughnut-chart`: reciben `slices`
(`{ label, value, color }[]`, tipo `ChartSlice`), no `datasets` — la forma
de los datos es otra (una magnitud repartida en porciones, cada una con su
propio color, no varias series en el tiempo) — y usan la leyenda **nativa**
de Chart.js en vez de `pi-chart-legend`.
```html
<pi-line-chart [device]="device" [xAxisMarks]="meses" [datasets]="datasets" />
<pi-line-chart [device]="device" [xAxisMarks]="meses" [datasets]="datasets" [filled]="true" /> <!-- área -->
<pi-bar-chart [device]="device" [xAxisMarks]="meses" [datasets]="datasets" />
<pi-pie-chart [device]="device" [slices]="slices" />
<pi-doughnut-chart [device]="device" [slices]="slices" />
```
Detalles a tener en cuenta:
- **`[filled]="true"` en `pi-line-chart` exige el plugin `Filler` de
Chart.js.** Sin registrarlo, `fill: true` en el dataset no falla — se
ignora en silencio y el gráfico sale sin rellenar. Ya está registrado en
`line-chart.component.ts`; si se añade otro tipo relleno, hay que
registrarlo ahí también.
- **El área usa un color traducido a `rgba(…, 0.15)`, no el `backgroundColor`
del dataset tal cual.** Ese campo también pinta el relleno de los puntos;
si se reutilizase el color opaco para el área saldría un bloque sólido en
vez de una zona translúcida, así que `pointBackgroundColor` conserva el
color original y `backgroundColor` pasa a translúcido solo cuando `filled`
está activo (ver `hexToRgba` en `chart.configs.ts`).
- **`DatasetColor` no tenía `success`/`warn`** (solo `primary`/`accent`/
`highlighted`/`grey`), así que un `pie`/`doughnut` no podía representar
estados (pagado/pendiente/rechazado, etc.) con los mismos colores que
`pi-chip-status`. Se añadieron con los mismos hex que `--pi-color-success`/
`--pi-color-warn`.
- **`Dataset.cubicInterpolationMode` pasa a opcional.** Solo tiene sentido en
`line`; forzarlo en `bar`/`pie`/`doughnut` no aportaba nada y esos tipos ni
siquiera usan `Dataset` (los dos últimos usan `ChartSlice`).
- **El `type="bar"` del `pi-chart` original nunca funcionó**: el input
existía pero `getLineChartConfigs()` construía siempre un chart `line`
ignorando su valor. Se descubrió al dividir los componentes; `pi-bar-chart`
es la primera versión que realmente renderiza barras.
**El loader de servidor de traducciones ya no está en el barrel.**
`util/translate/loaders/translate-server.loader` usa `fs`, `path` y `process`;
exportarlo desde `@pi/ui` rompía el bundle de navegador de cualquier app que