@sfperusacdev/sf-ui 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/sf-ui.css +1 -1
  2. package/dist/sf-ui.js +4417 -2438
  3. package/dist/sf-ui.js.map +1 -1
  4. package/dist/sf-ui.umd.cjs +7 -7
  5. package/dist/sf-ui.umd.cjs.map +1 -1
  6. package/dist/theme/densidad.css +291 -0
  7. package/dist/theme/neon.css +185 -0
  8. package/dist/theme/temas.css +229 -0
  9. package/dist/types/src/components/cards/Badge.d.ts +7 -1
  10. package/dist/types/src/components/cards/MetricBar.caracterizacion.test.d.ts +1 -0
  11. package/dist/types/src/components/cards/MetricBar.d.ts +5 -3
  12. package/dist/types/src/components/cards/MetricBar.disposiciones.test.d.ts +1 -0
  13. package/dist/types/src/components/cards/ProfileCard.d.ts +27 -0
  14. package/dist/types/src/components/cards/ProfileCard.test.d.ts +1 -0
  15. package/dist/types/src/components/cards/QuoteCard.d.ts +11 -0
  16. package/dist/types/src/components/cards/QuoteCard.test.d.ts +1 -0
  17. package/dist/types/src/components/cards/index.d.ts +6 -2
  18. package/dist/types/src/components/cards/types.d.ts +19 -0
  19. package/dist/types/src/components/charts/Chart.colores.test.d.ts +1 -0
  20. package/dist/types/src/components/charts/Chart.d.ts +1 -1
  21. package/dist/types/src/components/charts/ChartLegend.caracterizacion.test.d.ts +1 -0
  22. package/dist/types/src/components/charts/ChartLegend.d.ts +22 -1
  23. package/dist/types/src/components/charts/index.d.ts +1 -1
  24. package/dist/types/src/components/charts/types.d.ts +5 -0
  25. package/dist/types/src/components/dashboard/DonutGauge.caracterizacion.test.d.ts +1 -0
  26. package/dist/types/src/components/dashboard/DonutGauge.d.ts +5 -1
  27. package/dist/types/src/components/dashboard/DonutGauge.degradado.test.d.ts +1 -0
  28. package/dist/types/src/components/dashboard/MetricTile.d.ts +24 -0
  29. package/dist/types/src/components/dashboard/MetricTile.test.d.ts +1 -0
  30. package/dist/types/src/components/dashboard/Seleccion.test.d.ts +1 -0
  31. package/dist/types/src/components/dashboard/StageFlow.caracterizacion.test.d.ts +1 -0
  32. package/dist/types/src/components/dashboard/StageFlow.d.ts +43 -0
  33. package/dist/types/src/components/dashboard/StageFlow.test.d.ts +1 -0
  34. package/dist/types/src/components/dashboard/StateChain.d.ts +28 -0
  35. package/dist/types/src/components/dashboard/StateChain.test.d.ts +1 -0
  36. package/dist/types/src/components/dashboard/StateChain.vertical.test.d.ts +1 -0
  37. package/dist/types/src/components/dashboard/Stepper.caracterizacion.test.d.ts +1 -0
  38. package/dist/types/src/components/dashboard/Stepper.d.ts +3 -1
  39. package/dist/types/src/components/dashboard/Stepper.icono.test.d.ts +1 -0
  40. package/dist/types/src/components/dashboard/index.d.ts +6 -0
  41. package/dist/types/src/components/dashboard/types.d.ts +4 -0
  42. package/dist/types/src/components/display/AuditTimeline.cadena.test.d.ts +1 -0
  43. package/dist/types/src/components/display/AuditTimeline.caracterizacion.test.d.ts +1 -0
  44. package/dist/types/src/components/display/AuditTimeline.d.ts +7 -1
  45. package/dist/types/src/components/display/CheckList.d.ts +19 -0
  46. package/dist/types/src/components/display/CheckList.test.d.ts +1 -0
  47. package/dist/types/src/components/display/MediaGallery.d.ts +41 -0
  48. package/dist/types/src/components/display/MediaGallery.test.d.ts +1 -0
  49. package/dist/types/src/components/display/MediaPanel.d.ts +4 -1
  50. package/dist/types/src/components/display/RecordList.caracterizacion.test.d.ts +1 -0
  51. package/dist/types/src/components/display/RecordList.compacta.test.d.ts +1 -0
  52. package/dist/types/src/components/display/RecordList.d.ts +15 -2
  53. package/dist/types/src/components/display/Timeline.caracterizacion.test.d.ts +1 -0
  54. package/dist/types/src/components/display/Timeline.columnas.test.d.ts +1 -0
  55. package/dist/types/src/components/display/Timeline.d.ts +22 -1
  56. package/dist/types/src/components/display/Timeline.horizontal.test.d.ts +1 -0
  57. package/dist/types/src/components/display/index.d.ts +8 -4
  58. package/dist/types/src/components/display/mediaGalleryFoco.d.ts +1 -0
  59. package/dist/types/src/components/display/mediaGalleryFoco.test.d.ts +1 -0
  60. package/dist/types/src/components/layout/AppShell.caracterizacion.test.d.ts +1 -0
  61. package/dist/types/src/components/layout/AppShell.d.ts +8 -2
  62. package/dist/types/src/components/layout/Tabs.caracterizacion.test.d.ts +1 -0
  63. package/dist/types/src/components/layout/Tabs.d.ts +5 -2
  64. package/dist/types/src/components/layout/Tabs.test.d.ts +1 -0
  65. package/dist/types/src/components/layout/ThemePicker.d.ts +23 -0
  66. package/dist/types/src/components/layout/ThemePicker.test.d.ts +1 -0
  67. package/dist/types/src/components/layout/WorkspaceHeader.d.ts +31 -0
  68. package/dist/types/src/components/layout/WorkspaceHeader.test.d.ts +1 -0
  69. package/dist/types/src/components/layout/index.d.ts +5 -1
  70. package/dist/types/src/components/overlays/Drawer.d.ts +5 -2
  71. package/dist/types/src/components/overlays/Foco.test.d.ts +1 -0
  72. package/dist/types/src/components/overlays/Modal.d.ts +4 -1
  73. package/dist/types/src/components/overlays/colorTexto.test.d.ts +1 -0
  74. package/dist/types/src/components/overlays/useFocoDeCapa.d.ts +8 -0
  75. package/dist/types/src/components/overlays/useOverlayStack.consulta.test.d.ts +1 -0
  76. package/dist/types/src/components/overlays/useOverlayStack.d.ts +10 -0
  77. package/dist/types/src/components/table/CustomTable.d.ts +14 -1
  78. package/dist/types/src/components/table/CustomTable.densidad.caracterizacion.test.d.ts +1 -0
  79. package/dist/types/src/components/table/CustomTable.densidad.test.d.ts +1 -0
  80. package/dist/types/src/components/table/index.d.ts +1 -1
  81. package/dist/types/src/components/visualization/IntegrationFlow.caracterizacion.test.d.ts +1 -0
  82. package/dist/types/src/components/visualization/IntegrationFlow.d.ts +61 -0
  83. package/dist/types/src/components/visualization/IntegrationFlow.paneles.test.d.ts +1 -0
  84. package/dist/types/src/components/visualization/IntegrationFlow.test.d.ts +1 -0
  85. package/dist/types/src/components/visualization/RelationGraph.caracterizacion.test.d.ts +1 -0
  86. package/dist/types/src/components/visualization/RelationGraph.d.ts +65 -0
  87. package/dist/types/src/components/visualization/RelationGraph.orbita.test.d.ts +1 -0
  88. package/dist/types/src/components/visualization/RelationGraph.test.d.ts +1 -0
  89. package/dist/types/src/components/visualization/SeleccionNodos.test.d.ts +1 -0
  90. package/dist/types/src/components/visualization/disponerOrbita.d.ts +29 -0
  91. package/dist/types/src/components/visualization/disponerRadial.d.ts +19 -0
  92. package/dist/types/src/components/visualization/index.d.ts +4 -0
  93. package/dist/types/src/theme/temas.test.d.ts +1 -0
  94. package/dist/types/src/utils/devWarning.d.ts +2 -0
  95. package/dist/types/src/utils/devWarning.test.d.ts +1 -0
  96. package/dist/types/src/utils/foco.d.ts +9 -0
  97. package/dist/types/src/utils/identidadColeccion.d.ts +11 -0
  98. package/dist/types/src/utils/identidadColeccion.test.d.ts +1 -0
  99. package/dist/types/src/utils/useAnchoContenedor.d.ts +22 -0
  100. package/dist/types/src/utils/useAnchoContenedor.test.d.ts +1 -0
  101. package/package.json +5 -2
@@ -10,5 +10,11 @@ export type BadgeProps = {
10
10
  /** Icono antes del label (`.sf-badge__icon`). Compatible con `dot`: si vienen ambos, primero el punto y
11
11
  * luego el icono. Solo aplica a `shape="pill"` (el círculo es de un solo carácter). */
12
12
  icon?: ReactNode;
13
+ /** "solid": relleno del color con texto claro y esquinas de 6px (estados en tablas densas). Por defecto
14
+ * "soft", el acabado publicado. */
15
+ appearance?: BadgeAppearance;
16
+ /** Color propio para estados sin variante (ej. un estado de un flujo propio). Gana sobre `variant`. */
17
+ color?: string;
13
18
  };
14
- export declare const Badge: ({ label, variant, dot, size, shape, className, icon, }: BadgeProps) => import('react').JSX.Element;
19
+ export type BadgeAppearance = "soft" | "solid";
20
+ export declare const Badge: ({ label, variant, dot, size, shape, className, icon, appearance, color, }: BadgeProps) => import('react').JSX.Element;
@@ -1,17 +1,19 @@
1
- import { MetricBarFootnote, MetricBarItem } from './types';
1
+ import { MetricBarFootnote, MetricBarItem, MetricBarLayout } from './types';
2
2
  type MetricBarRowProps = {
3
3
  item: MetricBarItem;
4
4
  small?: boolean;
5
+ layout?: MetricBarLayout;
5
6
  };
6
- export declare const MetricBarRow: ({ item, small }: MetricBarRowProps) => import('react').JSX.Element;
7
+ export declare const MetricBarRow: ({ item, small, layout }: MetricBarRowProps) => import('react').JSX.Element;
7
8
  type MetricBarListProps = {
8
9
  metrics: MetricBarItem[];
9
10
  small?: boolean;
11
+ layout?: MetricBarLayout;
10
12
  className?: string;
11
13
  /** Nota destacada debajo de las barras (ej. "56% con menos de 3 meses"), en una caja tintada.
12
14
  * Por defecto no se muestra nada (acabado actual). No es una conclusión calculada — el texto es
13
15
  * responsabilidad de quien arma los datos. */
14
16
  footnote?: MetricBarFootnote;
15
17
  };
16
- export declare const MetricBarList: ({ metrics, small, className, footnote }: MetricBarListProps) => import('react').JSX.Element;
18
+ export declare const MetricBarList: ({ metrics, small, layout, className, footnote }: MetricBarListProps) => import('react').JSX.Element;
17
19
  export {};
@@ -0,0 +1,27 @@
1
+ import { ReactNode } from 'react';
2
+ import { BadgeVariant } from './types';
3
+ export type ProfileCardFact = {
4
+ key: string;
5
+ icon?: ReactNode;
6
+ label: ReactNode;
7
+ };
8
+ export type ProfileCardProps = {
9
+ name: string;
10
+ role?: string;
11
+ /** Código visible de la persona (ej. su número de empleado). */
12
+ code?: string;
13
+ photoSrc?: string;
14
+ photoAlt?: string;
15
+ /** Estado superpuesto sobre la foto, abajo a la izquierda. */
16
+ status?: {
17
+ label: string;
18
+ variant?: BadgeVariant;
19
+ };
20
+ /** Con `onEdit` aparece el botón de lápiz sobre la foto. */
21
+ onEdit?: () => void;
22
+ editLabel?: string;
23
+ facts?: ProfileCardFact[];
24
+ quote?: ReactNode;
25
+ className?: string;
26
+ };
27
+ export declare const ProfileCard: ({ name, role, code, photoSrc, photoAlt, status, onEdit, editLabel, facts, quote, className, }: ProfileCardProps) => import('react').JSX.Element;
@@ -0,0 +1,11 @@
1
+ import { ReactNode } from 'react';
2
+ export type QuoteCardProps = {
3
+ quote: ReactNode;
4
+ author?: ReactNode;
5
+ /** Adorno decorativo abajo a la derecha (ej. una hoja). */
6
+ icon?: ReactNode;
7
+ /** Foto de fondo, oscurecida para que el texto se lea. */
8
+ backgroundSrc?: string;
9
+ className?: string;
10
+ };
11
+ export declare const QuoteCard: ({ quote, author, icon, backgroundSrc, className }: QuoteCardProps) => import('react').JSX.Element;
@@ -1,5 +1,5 @@
1
1
  export { Badge } from './Badge';
2
- export type { BadgeProps } from './Badge';
2
+ export type { BadgeAppearance, BadgeProps } from './Badge';
3
3
  export { badgeClassName, badgeDotClassName } from './badgeClassName';
4
4
  export { KPICard, KPIGrid } from './KPICard';
5
5
  export type { KPICardAccentTone, KPICardProgress, KPICardLayout, KPICardVariant, KPICardIconStyle, KPICardSize, KPICardDensity, KPICardTrendDirection, KPICardValueFormat, KPICardFormatOptions, KPICardSparkline, KPICardProps, } from './KPICard';
@@ -10,8 +10,12 @@ export type { QuickActionTileProps, QuickActionGridProps } from './QuickActionTi
10
10
  export { MetricBarRow, MetricBarList } from './MetricBar';
11
11
  export { EntityCard, EntityCardGrid } from './EntityCard';
12
12
  export type { EntityCardProps } from './EntityCard';
13
+ export { ProfileCard } from './ProfileCard';
14
+ export type { ProfileCardFact, ProfileCardProps } from './ProfileCard';
15
+ export { QuoteCard } from './QuoteCard';
16
+ export type { QuoteCardProps } from './QuoteCard';
13
17
  export { RecommendationCard } from './RecommendationCard';
14
18
  export type { RecommendationCardProps } from './RecommendationCard';
15
19
  export { ModuleCard, ModuleCardGrid } from './ModuleCard';
16
20
  export type { ModuleCardProps } from './ModuleCard';
17
- export type { BadgeVariant, BadgeSize, BadgeShape, MetricBarTone, MetricBarThresholds, MetricBarItem, MetricBarFootnote, SplitBarTone, SplitBarSegment, EntityCardStatus, EntityCardVariant, RecommendationPriority, RecommendationImpact, ModuleCardVariant, ModuleCardDensity, } from './types';
21
+ export type { BadgeVariant, BadgeSize, BadgeShape, MetricBarTone, MetricBarThresholds, MetricBarItem, MetricBarLayout, MetricBarFootnote, SplitBarTone, SplitBarSegment, EntityCardStatus, EntityCardVariant, RecommendationPriority, RecommendationImpact, ModuleCardVariant, ModuleCardDensity, } from './types';
@@ -1,3 +1,4 @@
1
+ import { ReactNode } from 'react';
1
2
  export type BadgeVariant = "neutral" | "primary" | "success" | "warning" | "danger" | "info";
2
3
  export type BadgeSize = "sm" | "md";
3
4
  export type BadgeShape = "pill" | "circle";
@@ -37,7 +38,25 @@ export type MetricBarItem = {
37
38
  /** Texto a mostrar a la derecha en vez del autogenerado (ej. un conteo real: "442"). NUNCA es lo que
38
39
  * dimensiona la barra — eso siempre es `value` (crudo si hay `max`, 0-100 si no lo hay). */
39
40
  valueLabel?: string;
41
+ /** Color CSS de categoría (ej. `categoryColor(i)`) para el relleno de la barra y el ícono. Gana sobre `tone` y
42
+ * `thresholds` solo en esas partes gráficas: etiqueta, descripción y valor siguen con los colores de texto del tema. */
43
+ color?: string;
44
+ /** Ícono decorativo antes de la etiqueta. */
45
+ icon?: ReactNode;
46
+ /** Texto debajo de la etiqueta (ej. "Quién es"). Parte línea; no se trunca. */
47
+ description?: ReactNode;
48
+ /** Texto corto antes de la etiqueta, en el color de la barra (ej. «01.»). Solo en las disposiciones `tile` e
49
+ * `inline`. */
50
+ prefix?: string;
51
+ /** Contenido tras el valor (ej. un ícono de estado). Solo en las disposiciones `tile` e `inline`. */
52
+ trailing?: ReactNode;
53
+ /** Solo en `tile` e `inline`: la fila es un botón. */
54
+ onClick?: () => void;
55
+ selected?: boolean;
40
56
  };
57
+ /** `default`: etiqueta y valor arriba, barra debajo (publicado). `tile`: baldosa con ícono en círculo, etiqueta,
58
+ * descripción y barra con el valor a su derecha. `inline`: etiqueta, barra gruesa y valor en una sola fila. */
59
+ export type MetricBarLayout = "default" | "tile" | "inline";
41
60
  export type MetricBarFootnote = {
42
61
  text: string;
43
62
  tone?: MetricBarTone;
@@ -1,3 +1,3 @@
1
1
  import { ChartProps } from './types';
2
2
  export type { ChartProps } from './types';
3
- export declare const Chart: ({ type, data, xKey, series, height, ariaLabel, emptyMessage, className, showGrid, showTooltip, showLegend, orientation, stacking, unit, yDomain, xAxisFormat, yAxisFormat, tooltipFormat, valueLabelFormat, showValueLabels, referenceLines, onDataPointClick, }: ChartProps) => import('react').JSX.Element;
3
+ export declare const Chart: ({ type, data, xKey, series, height, ariaLabel, emptyMessage, className, showGrid, showTooltip, showLegend, orientation, stacking, unit, yDomain, xAxisFormat, yAxisFormat, tooltipFormat, valueLabelFormat, showValueLabels, referenceLines, onDataPointClick, stackRadius, }: ChartProps) => import('react').JSX.Element;
@@ -1,14 +1,35 @@
1
+ import { ReactNode } from 'react';
1
2
  export type ChartLegendItem = {
3
+ /** Identidad del ítem, única en `items`. Por defecto, `label`. */
4
+ key?: string;
2
5
  label: string;
3
6
  /** Color CSS (token o hex), el mismo de la serie del gráfico. */
4
7
  color: string;
8
+ /** Cifra que acompaña al nombre (ej. "420.530" o "88%"). Sin ella, el ítem es solo muestra y nombre. */
9
+ value?: ReactNode;
10
+ /** Ícono decorativo en lugar de la muestra de color (ej. una verificación en los indicadores de calidad). */
11
+ icon?: ReactNode;
5
12
  };
13
+ export type ChartLegendOrientation = "inline" | "vertical";
6
14
  export type ChartLegendProps = {
7
15
  items: ChartLegendItem[];
16
+ /** "inline" (por defecto): una línea que parte entre ítems. "vertical": una fila por ítem con la cifra alineada a la
17
+ * derecha, para leyendas con valores (ej. 10 dimensiones junto a una dona). */
18
+ orientation?: ChartLegendOrientation;
19
+ /** Solo en vertical: 2 reparte los ítems en dos columnas (de arriba abajo, luego la derecha) que pasan a una cuando
20
+ * el ancho no alcanza. Por defecto 1. */
21
+ columns?: 1 | 2;
22
+ /** Con `columns={2}`: ancho mínimo de cada columna antes de pasar a una sola (longitud CSS). Por defecto 13rem. */
23
+ columnMinWidth?: string;
24
+ /** Forma de la muestra de color. Por defecto "square". */
25
+ swatchShape?: "square" | "circle";
26
+ /** Con `onSelect` cada ítem es un botón (aria-pressed según `selectedKey`); recibe `key ?? label`. */
27
+ onSelect?: (key: string) => void;
28
+ selectedKey?: string;
8
29
  className?: string;
9
30
  };
10
31
  /**
11
32
  * Leyenda compacta en una línea, para la cabecera de una tarjeta (`DashboardCard.headerAction`) cuando el gráfico va
12
33
  * con `showLegend={false}`: deja el alto del gráfico para los datos.
13
34
  */
14
- export declare const ChartLegend: ({ items, className }: ChartLegendProps) => import('react').JSX.Element;
35
+ export declare const ChartLegend: ({ items, orientation, columns, columnMinWidth, swatchShape, onSelect, selectedKey, className, }: ChartLegendProps) => import('react').JSX.Element;
@@ -1,7 +1,7 @@
1
1
  export { Chart } from './Chart';
2
2
  export type { ChartProps } from './Chart';
3
3
  export { ChartLegend } from './ChartLegend';
4
- export type { ChartLegendItem, ChartLegendProps } from './ChartLegend';
4
+ export type { ChartLegendItem, ChartLegendOrientation, ChartLegendProps } from './ChartLegend';
5
5
  export { Sparkline } from './Sparkline';
6
6
  export { DiagnosticRadar } from './DiagnosticRadar';
7
7
  export { DeviationBand } from './DeviationBand';
@@ -16,6 +16,9 @@ export type ChartSeries = {
16
16
  /** Id de grupo de apilado explícito, para mezclar series apiladas y sueltas en un mismo chart.
17
17
  * Si se omite y `stacking` es "stacked"/"stacked-100", todas las series comparten un solo stack. */
18
18
  stackId?: string;
19
+ /** Solo en `line`: un color por punto, en el orden de `data`. Los puntos toman su color y la línea pasa por ellos
20
+ * en degradado. */
21
+ pointColors?: string[];
19
22
  };
20
23
  export type ChartDataPoint = Record<string, string | number | null | undefined>;
21
24
  /** Formatea un valor numérico de un chart (eje, tooltip o label de barra). `key` es la key de la
@@ -67,6 +70,8 @@ export type BaseChartProps = {
67
70
  * (comportamiento de Recharts: no es un hit-test exacto de la barra/punto individual, es el punto
68
71
  * activo del eje de categorías en esa posición). `series` es la primera serie definida, como referencia. */
69
72
  onDataPointClick?: (point: ChartDataPoint, series: ChartSeries) => void;
73
+ /** Barras apiladas: "all" (por defecto) redondea cada tramo; "top" solo el extremo de la pila. */
74
+ stackRadius?: "all" | "top";
70
75
  };
71
76
  export type ChartProps = BaseChartProps & {
72
77
  type: ChartType;
@@ -14,9 +14,13 @@ export type DonutGaugeProps = {
14
14
  showValue?: boolean;
15
15
  /** Grosor del anillo. Se acota a un quinto del diámetro para que el centro siempre tenga hueco. */
16
16
  strokeWidth?: number;
17
+ /** Trazo en degradado del primer color al segundo (gana sobre `color` y los umbrales). */
18
+ gradient?: [string, string];
19
+ /** Color de la etiqueta bajo la dona (ej. una calificación en verde). */
20
+ labelColor?: string;
17
21
  className?: string;
18
22
  };
19
- export declare const DonutGauge: ({ value, label, sublabel, size, color, thresholds, inverse, showValue, strokeWidth, className, }: DonutGaugeProps) => import('react').JSX.Element;
23
+ export declare const DonutGauge: ({ value, label, sublabel, size, color, thresholds, inverse, showValue, strokeWidth, gradient, labelColor, className, }: DonutGaugeProps) => import('react').JSX.Element;
20
24
  export type DonutGaugeRowItem = Omit<DonutGaugeProps, "className">;
21
25
  type DonutGaugeRowProps = {
22
26
  gauges: DonutGaugeRowItem[];
@@ -0,0 +1,24 @@
1
+ import { ReactNode } from 'react';
2
+ export type MetricTileLayout = "leading" | "centered";
3
+ export type MetricTileProps = {
4
+ label: ReactNode;
5
+ value: ReactNode;
6
+ sublabel?: ReactNode;
7
+ /** Rótulo pequeño encima de todo (ej. «Estado actual»). */
8
+ eyebrow?: ReactNode;
9
+ icon?: ReactNode;
10
+ /** Color de categoría o de tono: tiñe el fondo, el borde y el ícono. Por defecto `--sf-accent`. */
11
+ color?: string;
12
+ /** Color de la cifra. Por defecto, en `leading` el mismo `color`; en `centered`, `--sf-success`. */
13
+ valueColor?: string;
14
+ /** `leading`: ícono a la izquierda, cifra arriba y etiqueta debajo. `centered`: ícono arriba, etiqueta y cifra
15
+ * centradas. */
16
+ layout?: MetricTileLayout;
17
+ /** Solo en `centered`: "value-first" pone la cifra antes de la etiqueta (ej. tipos de archivo). */
18
+ order?: "label-first" | "value-first";
19
+ /** Con `onClick` la baldosa es un botón (aria-pressed según `selected`). */
20
+ onClick?: () => void;
21
+ selected?: boolean;
22
+ className?: string;
23
+ };
24
+ export declare const MetricTile: ({ label, value, sublabel, eyebrow, icon, color, valueColor, layout, order, onClick, selected, className, }: MetricTileProps) => import('react').JSX.Element;
@@ -0,0 +1,43 @@
1
+ import { ReactNode } from 'react';
2
+ import { BadgeVariant } from '../cards/types';
3
+ export type StageFlowEffect = {
4
+ label: string;
5
+ variant?: BadgeVariant;
6
+ };
7
+ export type StageFlowItem = {
8
+ /** Identidad de la etapa, única en `items`. Es la que recibe `onSelect`. */
9
+ key: string;
10
+ title: string;
11
+ /** Rótulo superior (ej. una fecha). */
12
+ eyebrow?: string;
13
+ icon?: ReactNode;
14
+ /** Cifra grande de la etapa (ej. un conteo de un embudo). */
15
+ value?: string | number;
16
+ note?: string;
17
+ /** Efecto de la etapa (ej. "+ Competencia"), pintado con `Badge`. */
18
+ effect?: StageFlowEffect;
19
+ /** Color de categoría de la etapa (borde y ícono). Por defecto, la paleta de categorías en orden. */
20
+ color?: string;
21
+ };
22
+ export type StageFlowProps = {
23
+ items: StageFlowItem[];
24
+ /** Etapa seleccionada, controlada por el host. Una clave que no existe no marca nada. */
25
+ selectedKey?: string;
26
+ /** Pide seleccionar una etapa (no significa abrirla). Sin él no hay controles. */
27
+ onSelect?: (key: string) => void;
28
+ ariaLabel?: string;
29
+ emptyMessage?: string;
30
+ /** `card` (por defecto): tarjetas con borde superior del color. `ring`: sin tarjeta; ícono en anillo grande con halo,
31
+ * rótulo en el color, título centrado y el efecto como pastilla rellena del color (su `variant` no se usa). */
32
+ variant?: StageFlowVariant;
33
+ /** Ancho mínimo por etapa, en rem, para ir en fila. Por defecto 10 en `card` y 6.5 en `ring`. */
34
+ minStageWidth?: number;
35
+ className?: string;
36
+ };
37
+ export type StageFlowVariant = "card" | "ring";
38
+ /**
39
+ * Etapas en tarjetas unidas por flechas, en el orden recibido. La flecha es decorativa y solo dice «la siguiente en
40
+ * este orden»: no es tiempo, causa ni avance (eso es `Stepper`). En fila si el contenedor da al menos 10rem por etapa;
41
+ * si no, en columna.
42
+ */
43
+ export declare const StageFlow: ({ items, selectedKey, onSelect, ariaLabel, emptyMessage, variant, minStageWidth, className, }: StageFlowProps) => import('react').JSX.Element;
@@ -0,0 +1,28 @@
1
+ import { ReactNode } from 'react';
2
+ export type StateChainItem = {
3
+ key: string;
4
+ label: string;
5
+ icon?: ReactNode;
6
+ /** Color propio del estado. Por defecto, la paleta de categorías en orden. */
7
+ color?: string;
8
+ /** Texto bajo el estado (ej. «Desde 12 Mar 2021»). */
9
+ caption?: ReactNode;
10
+ };
11
+ /** `dot`: círculo relleno con el nombre debajo. `ring`: anillo grande con ícono y nombre dentro. */
12
+ export type StateChainVariant = "dot" | "ring";
13
+ export type StateChainProps = {
14
+ items: StateChainItem[];
15
+ /** Estado actual: se marca con `aria-current` y, en `ring`, con una insignia de verificación. */
16
+ currentKey?: string;
17
+ variant?: StateChainVariant;
18
+ /** Con `onSelect` cada estado es un botón (aria-pressed según `selectedKey`). */
19
+ onSelect?: (key: string) => void;
20
+ selectedKey?: string;
21
+ ariaLabel?: string;
22
+ className?: string;
23
+ };
24
+ /**
25
+ * Cadena de estados (máquina de estados): cada estado con su color y una flecha hacia el siguiente. No es
26
+ * un proceso con pasos completados (para eso, `Stepper`).
27
+ */
28
+ export declare const StateChain: ({ items, currentKey, variant, onSelect, selectedKey, ariaLabel, className, }: StateChainProps) => import('react').JSX.Element;
@@ -8,7 +8,9 @@ type StepperProps = {
8
8
  /** Subrayado de acento en el paso activo (wizard CEO / transporte). */
9
9
  variant?: StepperVariant;
10
10
  onStepClick?: (key: string) => void;
11
+ /** Nombre accesible de la lista de pasos. Por defecto "Progreso". */
12
+ ariaLabel?: string;
11
13
  className?: string;
12
14
  };
13
- export declare const Stepper: ({ steps, activeKey, orientation, size, variant, onStepClick, className, }: StepperProps) => import('react').JSX.Element;
15
+ export declare const Stepper: ({ steps, activeKey, orientation, size, variant, onStepClick, ariaLabel, className, }: StepperProps) => import('react').JSX.Element;
14
16
  export {};
@@ -4,6 +4,10 @@ export { TramoCard } from './TramoCard';
4
4
  export type { TramoCardTipo } from './TramoCard';
5
5
  export { StatCard } from './StatCard';
6
6
  export type { StatCardSize } from './StatCard';
7
+ export { StateChain } from './StateChain';
8
+ export type { StateChainItem, StateChainProps, StateChainVariant } from './StateChain';
9
+ export { MetricTile } from './MetricTile';
10
+ export type { MetricTileLayout, MetricTileProps } from './MetricTile';
7
11
  export { Calendar } from './Calendar';
8
12
  export { MONTH_NAMES, WEEKDAY_LABELS, toLocalYMD, parseYMD, buildMonthGrid } from './calendarUtils';
9
13
  export { DonutGauge, DonutGaugeRow } from './DonutGauge';
@@ -37,3 +41,5 @@ export type { DrilldownKPICardProps, DrilldownAlertItem, DrilldownAlertListProps
37
41
  export { DetailSection } from './DetailSection';
38
42
  export type { DetailSectionProps, DetailSectionRow, DetailSectionTone, DetailSectionDensity } from './DetailSection';
39
43
  export type { StepStatus, StepItem, CalendarBadgeVariant, CalendarDayBadge, DonutGaugeSize, DashboardCardVariant, DashboardCardState, EventStatus, EventItem, AlertRowItem, AlertRowSeverity, AlertRowListHeaderLabels, AlertActionItem, AlertDensity, StatBarItem, } from './types';
44
+ export { StageFlow } from './StageFlow';
45
+ export type { StageFlowEffect, StageFlowItem, StageFlowProps, StageFlowVariant } from './StageFlow';
@@ -1,3 +1,4 @@
1
+ import { ReactNode } from 'react';
1
2
  /** "warning" y "opportunity" son aditivos (ej. cadena de decisiones tipo Domino Flow: un paso puede
2
3
  * señalar un riesgo detectado o una oportunidad, no solo "hecho/pendiente/error"). */
3
4
  export type StepStatus = "completed" | "active" | "pending" | "error" | "warning" | "opportunity";
@@ -9,6 +10,9 @@ export type StepItem = {
9
10
  /** Valor o consecuencia de este paso (ej. "EXCEL", "+20 usuarios") — se pinta junto al label cuando
10
11
  * viene. Sin `value`, el render es idéntico al de antes. */
11
12
  value?: string;
13
+ /** Ícono decorativo en lugar del número. El estado se mantiene visible (marca en la esquina para completado, error,
14
+ * advertencia y oportunidad; anillo para el activo) y se agrega al nombre accesible del paso. */
15
+ icon?: ReactNode;
12
16
  };
13
17
  export type CalendarBadgeVariant = "primary" | "warning" | "danger" | "success" | "neutral";
14
18
  export type CalendarDayBadge = {
@@ -8,13 +8,19 @@ export type AuditTimelineItem = {
8
8
  detail?: ReactNode;
9
9
  eventType?: AuditEventType;
10
10
  icon?: ReactNode;
11
+ /** Solo en `variant="chain"`: color del paso. Por defecto, la paleta de categorías en orden. */
12
+ color?: string;
11
13
  };
14
+ /** `default`: historial de movimientos (publicado). `chain`: cadena de pasos con ícono grande en círculo de color,
15
+ * `actor` como título del paso, `action` y `detail` debajo, la hora a la derecha y una flecha de color entre pasos. */
16
+ export type AuditTimelineVariant = "default" | "chain";
12
17
  export type AuditTimelineProps = {
13
18
  items: AuditTimelineItem[];
14
19
  sectionTitle?: string;
15
20
  eventCountLabel?: string;
16
21
  ariaLabel?: string;
17
22
  emptyMessage?: string;
23
+ variant?: AuditTimelineVariant;
18
24
  className?: string;
19
25
  };
20
- export declare const AuditTimeline: ({ items, sectionTitle, eventCountLabel, ariaLabel, emptyMessage, className, }: AuditTimelineProps) => import('react').JSX.Element;
26
+ export declare const AuditTimeline: ({ items, sectionTitle, eventCountLabel, ariaLabel, emptyMessage, variant, className, }: AuditTimelineProps) => import('react').JSX.Element;
@@ -0,0 +1,19 @@
1
+ export type CheckListItem = {
2
+ key: string;
3
+ label: string;
4
+ checked: boolean;
5
+ };
6
+ export type CheckListProps = {
7
+ items: CheckListItem[];
8
+ /** `inline` (por defecto): en una fila que pasa de línea si no cabe. `stacked`: una debajo de otra. */
9
+ layout?: "inline" | "stacked";
10
+ checkedLabel?: string;
11
+ uncheckedLabel?: string;
12
+ /** Con `onSelect` cada condición es un botón (aria-pressed según `selectedKey`). */
13
+ onSelect?: (key: string) => void;
14
+ selectedKey?: string;
15
+ ariaLabel?: string;
16
+ className?: string;
17
+ };
18
+ /** Lista de solo lectura de condiciones cumplidas o pendientes (no es un control de formulario). */
19
+ export declare const CheckList: ({ items, layout, checkedLabel, uncheckedLabel, onSelect, selectedKey, ariaLabel, className, }: CheckListProps) => import('react').JSX.Element;
@@ -0,0 +1,41 @@
1
+ export type MediaGalleryKind = "image" | "pdf" | "video" | "other";
2
+ export type MediaGalleryItem = {
3
+ /** Identidad del archivo, única en `items`. El visor la sigue al cambiar `items`. */
4
+ key: string;
5
+ kind: MediaGalleryKind;
6
+ /** Texto alternativo de la imagen (o nombre del archivo si no es imagen). */
7
+ alt: string;
8
+ /** Archivo completo. Solo una imagen con `src` se abre en el visor interno. */
9
+ src?: string;
10
+ /** Miniatura propia (ej. la primera página de un PDF). Por defecto, el `src` de una imagen. */
11
+ thumbnailSrc?: string;
12
+ caption?: string;
13
+ sublabel?: string;
14
+ };
15
+ export type MediaGalleryProps = {
16
+ items: MediaGalleryItem[];
17
+ /** Abre las imágenes con `src` en el visor interno. Por defecto `true`. */
18
+ viewer?: boolean;
19
+ /** Abre todo lo que el visor no abre (PDF, vídeo, otros, imágenes sin `src` o todo si `viewer` es `false`). Lo
20
+ * reemplaza: la galería no hace nada más. Sin él, esos elementos no son accionables. */
21
+ onItemOpen?: (item: MediaGalleryItem) => void;
22
+ ariaLabel?: string;
23
+ viewerTitle?: string;
24
+ emptyMessage?: string;
25
+ /** Ancho mínimo de cada miniatura antes de pasar a menos columnas (longitud CSS). Por defecto 8rem. */
26
+ minThumbnailWidth?: string;
27
+ className?: string;
28
+ };
29
+ type Devolucion = {
30
+ clave: string;
31
+ generacion: number;
32
+ };
33
+ /** Una devolución de foco solo se evalúa con el visor cerrado y si es de la última apertura: una reapertura la descarta. */
34
+ export declare const devolucionVigente: (devolucion: Devolucion | null, generacionVigente: number, visorAbierto: boolean) => devolucion is Devolucion;
35
+ /**
36
+ * Cuadrícula de miniaturas con visor de imágenes. La galería no descarga ni llama servicios: lo que no abre el visor lo
37
+ * abre el host con `onItemOpen`. El visor usa `Modal` y su pila (Escape, capas, scroll); el foco lo gestiona la galería.
38
+ * Contrato completo: doc 184, Anexo B.3.
39
+ */
40
+ export declare const MediaGallery: ({ items, viewer, onItemOpen, ariaLabel, viewerTitle, emptyMessage, minThumbnailWidth, className, }: MediaGalleryProps) => import('react').JSX.Element;
41
+ export {};
@@ -1,6 +1,7 @@
1
1
  import { ImgHTMLAttributes, ReactNode } from 'react';
2
2
  export type MediaPanelOverlay = "none" | "gradient-bottom" | "gradient-top" | "dark";
3
3
  export type MediaPanelFit = "cover" | "contain";
4
+ export type MediaPanelContentStyle = "default" | "script";
4
5
  export type MediaPanelProps = {
5
6
  src: string;
6
7
  alt: string;
@@ -12,6 +13,8 @@ export type MediaPanelProps = {
12
13
  overlay?: MediaPanelOverlay;
13
14
  /** Contenido superpuesto (ej. un título editorial) — se ancla abajo a la izquierda por defecto. */
14
15
  children?: ReactNode;
16
+ /** "script" pinta el contenido superpuesto con la letra manuscrita del tema (`--sf-font-script`), en blanco. */
17
+ contentStyle?: MediaPanelContentStyle;
15
18
  rounded?: boolean;
16
19
  loading?: "lazy" | "eager";
17
20
  /** Se muestra si `src` falla al cargar (ej. un icono o texto). Sin `fallback`, un error de carga
@@ -26,4 +29,4 @@ export type MediaPanelProps = {
26
29
  * cercano era `Avatar`, pensado para fotos de perfil pequeñas, y `Carousel`, que es un slideshow
27
30
  * genérico sin tratamiento de imagen).
28
31
  */
29
- export declare const MediaPanel: ({ src, alt, aspectRatio, fit, overlay, children, rounded, loading, fallback, className, imgProps, }: MediaPanelProps) => import('react').JSX.Element;
32
+ export declare const MediaPanel: ({ src, alt, aspectRatio, fit, overlay, children, contentStyle, rounded, loading, fallback, className, imgProps, }: MediaPanelProps) => import('react').JSX.Element;
@@ -1,26 +1,39 @@
1
1
  import { ReactNode } from 'react';
2
+ import { BadgeAppearance } from '../cards/Badge';
2
3
  import { BadgeVariant } from '../cards/types';
3
4
  export type RecordListIconTone = "info" | "warning" | "success" | "neutral";
4
5
  export type RecordListItemProps = {
5
6
  id?: string;
6
7
  icon?: ReactNode;
7
8
  iconTone?: RecordListIconTone;
9
+ /** Color propio del ícono (sin caja de fondo, con halo). Gana sobre `iconTone`. */
10
+ iconColor?: string;
11
+ /** Columna fija antes del título (ej. la fecha). */
12
+ meta?: ReactNode;
8
13
  title: ReactNode;
9
14
  subtitle?: ReactNode;
10
15
  badge?: {
11
16
  label: string;
12
17
  variant?: BadgeVariant;
13
18
  dot?: boolean;
19
+ appearance?: BadgeAppearance;
20
+ color?: string;
14
21
  };
15
22
  actions?: ReactNode;
23
+ /** Con `onClick`, ícono, columna `meta`, título y subtítulo forman un botón (el `badge` y `actions` quedan fuera). */
24
+ onClick?: () => void;
25
+ selected?: boolean;
16
26
  className?: string;
17
27
  };
18
28
  export type RecordListProps = {
19
29
  title?: ReactNode;
20
30
  action?: ReactNode;
21
31
  items: RecordListItemProps[];
32
+ /** "compact": filas de una línea, sin caja propia, separadas por una línea. */
33
+ density?: RecordListDensity;
22
34
  className?: string;
23
35
  ariaLabel?: string;
24
36
  };
25
- export declare const RecordListItem: ({ icon, iconTone, title, subtitle, badge, actions, className, }: RecordListItemProps) => import('react').JSX.Element;
26
- export declare const RecordList: ({ title, action, items, className, ariaLabel }: RecordListProps) => import('react').JSX.Element;
37
+ export type RecordListDensity = "default" | "compact";
38
+ export declare const RecordListItem: ({ icon, iconTone, iconColor, meta, title, subtitle, badge, actions, onClick, selected, className, }: RecordListItemProps) => import('react').JSX.Element;
39
+ export declare const RecordList: ({ title, action, items, density, className, ariaLabel }: RecordListProps) => import('react').JSX.Element;