@ajuarezso/sui-design-system 0.19.0 → 0.21.0
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.
- package/docs/INDEX.md +136 -0
- package/docs/sui-alert/README.md +229 -0
- package/docs/sui-app-store-badge/README.md +137 -0
- package/docs/sui-avatar/README.md +263 -0
- package/docs/sui-avatar-group/README.md +115 -0
- package/docs/sui-badge/README.md +229 -0
- package/docs/sui-banner/README.md +190 -0
- package/docs/sui-brand-logo/README.md +143 -0
- package/docs/sui-breadcrumb-item/README.md +96 -0
- package/docs/sui-breadcrumbs/README.md +122 -0
- package/docs/sui-button/README.md +209 -0
- package/docs/sui-button-group/README.md +178 -0
- package/docs/sui-button-group-item/README.md +102 -0
- package/docs/sui-card/README.md +168 -0
- package/docs/sui-chart-legend/README.md +140 -0
- package/docs/sui-chart-legend-dot/README.md +118 -0
- package/docs/sui-checkbox/README.md +147 -0
- package/docs/sui-checkbox-card/README.md +150 -0
- package/docs/sui-checkbox-label/README.md +143 -0
- package/docs/sui-circular-progress-bar/README.md +131 -0
- package/docs/sui-color-dot/README.md +112 -0
- package/docs/sui-color-picker/README.md +124 -0
- package/docs/sui-compact-avatar-group/README.md +103 -0
- package/docs/sui-compact-button/README.md +190 -0
- package/docs/sui-compact-select/README.md +127 -0
- package/docs/sui-compact-select-for-input/README.md +117 -0
- package/docs/sui-content-card/README.md +147 -0
- package/docs/sui-content-divider/README.md +124 -0
- package/docs/sui-content-label/README.md +148 -0
- package/docs/sui-counter-input/README.md +145 -0
- package/docs/sui-date-selector/README.md +98 -0
- package/docs/sui-datepicker/README.md +193 -0
- package/docs/sui-day-cell/README.md +118 -0
- package/docs/sui-day-label/README.md +81 -0
- package/docs/sui-divider/README.md +102 -0
- package/docs/sui-drawer-footer/README.md +127 -0
- package/docs/sui-drawer-header/README.md +140 -0
- package/docs/sui-emoji/README.md +138 -0
- package/docs/sui-empty-state/README.md +145 -0
- package/docs/sui-fancy-button/README.md +148 -0
- package/docs/sui-file-icon/README.md +103 -0
- package/docs/sui-file-upload/README.md +154 -0
- package/docs/sui-file-upload-card/README.md +129 -0
- package/docs/sui-flag/README.md +99 -0
- package/docs/sui-form-hint/README.md +124 -0
- package/docs/sui-form-label/README.md +148 -0
- package/docs/sui-icon/README.md +135 -0
- package/docs/sui-image-upload/README.md +200 -0
- package/docs/sui-image-upload-profile/README.md +145 -0
- package/docs/sui-inline-input/README.md +104 -0
- package/docs/sui-inline-select/README.md +101 -0
- package/docs/sui-input/README.md +244 -0
- package/docs/sui-integration-switch/README.md +142 -0
- package/docs/sui-kbd/README.md +97 -0
- package/docs/sui-key-icon/README.md +125 -0
- package/docs/sui-link-button/README.md +221 -0
- package/docs/sui-logo/README.md +152 -0
- package/docs/sui-notification/README.md +179 -0
- package/docs/sui-notification-footer/README.md +98 -0
- package/docs/sui-notification-tab-menu/README.md +112 -0
- package/docs/sui-otp-input/README.md +116 -0
- package/docs/sui-pagination/README.md +146 -0
- package/docs/sui-password-strength/README.md +99 -0
- package/docs/sui-payment-icon/README.md +98 -0
- package/docs/sui-period-range/README.md +93 -0
- package/docs/sui-popover/README.md +178 -0
- package/docs/sui-product-card/README.md +173 -0
- package/docs/sui-progress-bar/README.md +132 -0
- package/docs/sui-progress-bar-label/README.md +143 -0
- package/docs/sui-radio/README.md +134 -0
- package/docs/sui-radio-card/README.md +160 -0
- package/docs/sui-radio-label/README.md +137 -0
- package/docs/sui-rating/README.md +199 -0
- package/docs/sui-rich-editor/README.md +114 -0
- package/docs/sui-segmented-control/README.md +144 -0
- package/docs/sui-select/README.md +180 -0
- package/docs/sui-slider/README.md +143 -0
- package/docs/sui-social-button/README.md +158 -0
- package/docs/sui-status-badge/README.md +164 -0
- package/docs/sui-stepper/README.md +166 -0
- package/docs/sui-store-card/README.md +147 -0
- package/docs/sui-switch/README.md +146 -0
- package/docs/sui-switch-card/README.md +149 -0
- package/docs/sui-switch-label/README.md +139 -0
- package/docs/sui-tab-chips/README.md +185 -0
- package/docs/sui-tab-menu-horizontal/README.md +142 -0
- package/docs/sui-tab-menu-vertical/README.md +136 -0
- package/docs/sui-tag/README.md +145 -0
- package/docs/sui-tag-input/README.md +120 -0
- package/docs/sui-textarea/README.md +157 -0
- package/docs/sui-time-picker/README.md +237 -0
- package/docs/sui-toast/README.md +190 -0
- package/docs/sui-tooltip/README.md +201 -0
- package/fesm2022/ajuarezso-sui-design-system.mjs +466 -279
- package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ajuarezso-sui-design-system.d.ts +367 -72
package/docs/INDEX.md
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
<!-- generado por scripts/gen-docs.mjs — no editar a mano; `npm run docs` -->
|
|
2
|
+
|
|
3
|
+
# SUI Design System — componentes
|
|
4
|
+
|
|
5
|
+
Una fila por componente: qué es y qué usar en su lugar cuando no calza. Para elegir,
|
|
6
|
+
se lee esta lista; para usar uno, se abre su doc:
|
|
7
|
+
|
|
8
|
+
- en el paquete npm: `node_modules/@ajuarezso/sui-design-system/docs/<name>/README.md`
|
|
9
|
+
- en Storybook: `<storybook>/<name sin sui->.md` (ej. `/alert.md`) y la lista en `/index.md`
|
|
10
|
+
- en el repo: `projects/sui-design-system/src/lib/<name>/README.md`
|
|
11
|
+
|
|
12
|
+
Documentados: 92 de 116.
|
|
13
|
+
|
|
14
|
+
| name | resumen | alternativas |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| `sui-alert` | Aviso que se queda en la pantalla, en el lugar donde pasa lo que avisa | sui-toast (efímero, resultado de una acción) · sui-banner (afecta a toda la app o la pantalla) · sui-notification (fila de la bandeja) · sui-form-hint (ayuda de un solo campo) |
|
|
17
|
+
| `sui-app-store-badge` | El sello oficial de App Store o Google Play que lleva a descargar la app | sui-link-button (link directo de descarga, «Descargar la app») · sui-social-button (entrar con una cuenta de Google o Apple) |
|
|
18
|
+
| `sui-avatar` | La cara de alguien (o el logo de un local) en un círculo, con iniciales cuando no hay foto | sui-avatar-group (varias personas apiladas) · sui-compact-avatar-group (varias personas en una celda de tabla) · sui-key-icon (un ícono en círculo que no es nadie) · sui-image-upload-profile (subir o cambiar la foto) |
|
|
19
|
+
| `sui-avatar-group` | Varias personas apiladas en una fila, con «+N» cuando no entran todas | sui-compact-avatar-group (la versión en píldora, para celdas de tabla) · sui-avatar (una sola persona) |
|
|
20
|
+
| `sui-badge` | Etiqueta corta o número que clasifica algo sin competir con el contenido | sui-status-badge (estado de ciclo: completado, pendiente, fallido, deshabilitado) · sui-tag (chip que se puede quitar) · sui-alert (mensaje que tiene que envolver) |
|
|
21
|
+
| `sui-banner` | Barra de aviso a todo el ancho, arriba de la pantalla, para algo que afecta a toda la app | sui-alert (aviso ligado a una sección o una card) · sui-toast (resultado efímero de una acción) · sui-notification (fila de la bandeja) · sui-modal (algo que bloquea todo, como quedarse sin conexión) |
|
|
22
|
+
| `sui-brand-logo` | El logo oficial de otra marca (WhatsApp, Google, Apple, Instagram…) en su color, sin tocarlo | sui-icon (el mismo logo como ícono monocromo de una línea) · sui-logo (el logo de Master Pedidos) · sui-social-button (botón de entrar con Google o Apple) |
|
|
23
|
+
| `sui-breadcrumb-item` | Una miga suelta de la ruta; casi siempre la dibuja sui-breadcrumbs por ti | sui-breadcrumbs (la ruta completa con separadores) · sui-link-button (un enlace de texto suelto) |
|
|
24
|
+
| `sui-breadcrumbs` | Ruta de migas en web que dice dónde estás dentro de una jerarquía de 3 o más niveles y deja volver a cualquiera | sui-page-header (título de la pantalla) · botón de volver del layout (mobile) · sui-tab-menu-horizontal (secciones del mismo nivel) |
|
|
25
|
+
| `sui-button` | Botón base para que la persona dispare una acción | sui-link-button (acción que se lee como texto) · sui-compact-button (ícono de 20-28 px en filas y barras) · sui-fancy-button (el CTA héroe) · sui-social-button (entrar con Google/Apple) · sui-button-group (opciones que se ven como un solo control) |
|
|
26
|
+
| `sui-button-group` | Opciones pegadas en una fila que se prenden y se apagan, varias a la vez | sui-segmented-control (cambiar de vista o elegir una sola opción) · sui-checkbox (opciones que se suman dentro de un formulario largo) · sui-tab-chips (filtros en chips que se pueden desplazar) |
|
|
27
|
+
| `sui-button-group-item` | Cada opción de un sui-button-group; no se usa suelto | sui-button-group (el grupo, que ya pinta sus ítems desde items[]) · sui-segmented-control (elegir una sola opción) · sui-switch (prender o apagar algo suelto) |
|
|
28
|
+
| `sui-card` | Superficie con borde, radio y sombra que agrupa contenido, con slots de header, cuerpo, media y footer | sui-content-card (una fila «cara + nombre + detalle» dentro de su cajita) · sui-radio-card / sui-checkbox-card / sui-switch-card (la card ES la opción que se elige) · sui-product-card (un producto de la carta) · sui-store-card (un local en un listado del cliente) · sui-modal-sheet (contenido encima de la pantalla) |
|
|
29
|
+
| `sui-chart-legend` | Leyenda de un gráfico — punto de color, nombre de la serie y su valor — dibujada fuera del gráfico | sui-chart-legend-dot (el punto suelto, en una fila o tabla) · la leyenda propia de ECharts (cuando hay que poder apagar series tocándolas) · sui-badge (una etiqueta, no una serie) |
|
|
30
|
+
| `sui-chart-legend-dot` | Punto de color de una serie de gráfico, para atar un número de una fila o una tabla con su color en el gráfico | sui-chart-legend (la leyenda completa, que ya trae sus puntos) · sui-color-dot (elegir un color, no nombrar una serie) · sui-badge with-dot (un estado vivo) |
|
|
31
|
+
| `sui-checkbox` | La casilla sola para marcar una o varias opciones, sin texto propio | sui-checkbox-label (casilla con su texto, el caso normal) · sui-checkbox-card (cada opción es una tarjeta) · sui-switch (prende algo que se aplica al instante) · sui-radio (opciones excluyentes) |
|
|
32
|
+
| `sui-checkbox-card` | Opción con tarjeta (ícono o foto, título, descripción y la casilla) para elegir VARIAS que se guardan después | sui-checkbox-label (la misma casilla sin tarjeta, en un formulario denso) · sui-switch-card (un ajuste que se aplica al toque, sin «Guardar») · sui-radio-card (se elige solo una) · sui-tag-input (valores que la persona escribe) |
|
|
33
|
+
| `sui-checkbox-label` | Casilla con su texto (y opcionalmente descripción, badge y link) para opciones que se suman | sui-checkbox (la casilla sola, el texto vive en otra parte) · sui-checkbox-card (cada opción es una tarjeta) · sui-switch-label (se aplica al instante) · sui-radio-label (una sola opción) |
|
|
34
|
+
| `sui-circular-progress-bar` | El avance de algo en un anillo, para cuando cabe en un cuadrado al lado de un título | sui-progress-bar-label (barra con título y número, cuando hay ancho) · sui-progress-bar (barra pelada) |
|
|
35
|
+
| `sui-color-dot` | Una opción de color para elegir (o mostrar el color elegido); no es un punto de estado | sui-color-picker (el selector completo, con hex propio) · sui-badge type="with-dot" (punto de estado vivo) · sui-status-badge withDot (punto de estado de un ciclo) |
|
|
36
|
+
| `sui-color-picker` | Botón que abre un panel para elegir un color libre (espectro, matiz, hex) o uno de los recomendados | sui-color-dot (un punto de color, para armar una grilla propia) · sui-select o sui-radio-card (el color es una categoría con nombre, no un color libre) |
|
|
37
|
+
| `sui-compact-avatar-group` | Varias personas en una píldora baja con el «+N» en texto, para tablas y filas apretadas | sui-avatar-group (la pila grande, para cards y cabeceras) · sui-avatar (una sola persona) |
|
|
38
|
+
| `sui-compact-button` | Botón de solo ícono, chico, para cuando falta espacio | sui-button (acción con texto, o de ícono con onlyIcon en tamaños de 28 a 52) · sui-link-button (acción que se lee como texto) · sui-topbar-button (ícono de la barra superior) |
|
|
39
|
+
| `sui-compact-select` | Select chico que se ajusta al ancho de su texto, para filtros sueltos y paginación | sui-select (campo de formulario a todo el ancho, con label) · sui-inline-select (dentro de una frase, sin caja) · sui-compact-select-for-input (dentro de un sui-input) · sui-segmented-control (2 a 4 modos a la vista) |
|
|
40
|
+
| `sui-compact-select-for-input` | Selector chico que vive DENTRO de un sui-input, para elegir moneda o código de país sin salir del campo | sui-select (el valor se elige aparte, con su propio label) · sui-compact-select (filtro suelto con caja propia) · sui-inline-select (dentro de una frase) |
|
|
41
|
+
| `sui-content-card` | Fila «cara + nombre + detalle» dentro de su propia cajita, con badge y una X opcional para quitarla | sui-content-label (la misma fila sin caja, dentro de una card que ya existe) · sui-card (contenido libre) · sui-radio-card / sui-checkbox-card (la fila se elige) |
|
|
42
|
+
| `sui-content-divider` | Línea con algo encima: el «o» entre dos opciones, la cabecera de un grupo o un botón entre bloques | sui-divider (la línea sola, horizontal o vertical) |
|
|
43
|
+
| `sui-content-label` | Fila sin caja con ícono, foto o logo a la izquierda, título, descripción y un badge opcional | sui-content-card (la misma fila dentro de su propia cajita, con X) · sui-switch-label (un ajuste que se prende o apaga) · sui-alert (un aviso con color) · sui-card (para agrupar las filas) |
|
|
44
|
+
| `sui-counter-input` | Cantidad con − y + a los lados, con mínimo y máximo (unidades en el carrito, pasajeros) | sui-input type="number" (un número que se tipea, sin pasos de a uno) · sui-slider (un valor de un rango continuo) · sui-select (elegir una cantidad de una lista corta) |
|
|
45
|
+
| `sui-date-selector` | La cabecera de un calendario con el mes y las flechas de anterior y siguiente | sui-datepicker (el calendario completo, que ya la trae) · sui-tab-chips (elegir entre pocos días: hoy, mañana, sábado) |
|
|
46
|
+
| `sui-datepicker` | Calendario para elegir una fecha o un rango de fechas, en popover o en línea | sui-input type="date" (una fecha suelta en un formulario: abre el selector del sistema) · sui-tab-chips + sui-radio-label (día y franja de un pedido programado) · sui-tab-chips o sui-select (períodos fijos: hoy, 7 días, 30 días) |
|
|
47
|
+
| `sui-day-cell` | Un día del calendario, con sus estados de elegido, rango, hoy, marcado y bloqueado | sui-datepicker (el calendario completo, que ya la trae) · sui-tab-chips (pocos días para elegir, con nombre: hoy, mañana) |
|
|
48
|
+
| `sui-day-label` | La inicial del día de la semana arriba de cada columna del calendario | sui-datepicker (el calendario completo, que ya la trae) · sui-button-group (elegir días de la semana: L M M J V S D) |
|
|
49
|
+
| `sui-divider` | Línea de 1 px que separa bloques (horizontal) o datos en una fila (vertical) | sui-content-divider (línea con texto o botones encima, o el «o» entre dos opciones) |
|
|
50
|
+
| `sui-drawer-footer` | Pie de un panel lateral con dos botones y un extra a la izquierda; hoy sin uso, los botones van en sui-modal-footer | sui-modal-footer (el canon de botones de toda la app) · sui-filter-panel-footer (pie de un panel de filtros) |
|
|
51
|
+
| `sui-drawer-header` | Cabecera de un panel lateral (título, descripción, cerrar); hoy sin contenedor en SUI y sin uso en la app | sui-modal (con title y description: la cabecera de todos los modales de la app) · sui-modal-header (la cabecera suelta del modal) · sui-page-header (título de una página) |
|
|
52
|
+
| `sui-emoji` | Un emoji 3D animado (Fluent) para los momentos con emoción: estados vacíos, celebraciones, onboarding | sui-icon (ícono funcional, monocromo) · sui-empty-state (el estado vacío completo, que ya trae su emoji) |
|
|
53
|
+
| `sui-empty-state` | Pantalla o lista sin nada que mostrar (o que no pudo cargar) con emoji animado, título, explicación y una acción opcional | sui-alert (un aviso dentro de una pantalla que sí tiene contenido) · sui-banner (aviso de toda la app) · skeleton (mientras carga, nunca un empty) |
|
|
54
|
+
| `sui-fancy-button` | Botón con brillo y degradé para el CTA de una landing o campaña | sui-button (toda acción dentro de la app) · sui-app-store-badge (descargar la app desde una landing) |
|
|
55
|
+
| `sui-file-icon` | El ícono de un archivo con su extensión (PDF, XLSX, JPG…) en el color de su tipo | sui-file-upload-card (el archivo que se está subiendo, con progreso) · sui-icon (un ícono genérico de documento) |
|
|
56
|
+
| `sui-file-upload` | Área para arrastrar o elegir archivos que no son una foto (PDF, Excel, CSV) | sui-image-upload (una sola imagen con vista previa: logo, portada, comprobante) · sui-image-upload-profile (foto de perfil con botones Subir/Cambiar/Eliminar) · sui-file-upload-card (el archivo ya elegido, con su progreso) |
|
|
57
|
+
| `sui-file-upload-card` | La fila de un archivo que se está subiendo, con su progreso, listo o error para reintentar | sui-file-upload (el área para elegir el archivo) · sui-image-upload (una imagen: muestra la vista previa en vez de la fila) · sui-file-icon (un archivo en una lista, sin subida) |
|
|
58
|
+
| `sui-flag` | La bandera circular de un país | sui-emoji (un emoji con emoción) · sui-icon (un ícono funcional) |
|
|
59
|
+
| `sui-form-hint` | Una línea de ayuda o de error debajo de un campo o de un grupo de controles | el hint propio de sui-input / sui-select / sui-textarea (campo de texto) · sui-alert (un aviso de la pantalla o algo que salió bien) · sui-tooltip (ayuda escondida tras un toque) · sui-form-label (el rótulo de arriba) |
|
|
60
|
+
| `sui-form-label` | Rótulo de un campo o de un grupo de controles que no traen el suyo (asterisco, opcional, ayuda y link) | el label propio de sui-input / sui-select / sui-textarea (campo de texto) · sui-checkbox-label / sui-radio-label / sui-switch-label (un control con su texto) · sui-page-header o sui-content-label (título de sección) · sui-form-hint (la ayuda debajo) |
|
|
61
|
+
| `sui-icon` | Un ícono monocromo de RemixIcon (o uno propio del DS) que toma el color del texto | sui-key-icon (el ícono dentro de un círculo de color) · sui-emoji (emoji con emoción) · sui-brand-logo (el logo de otra marca en su color) · sui-compact-button (un ícono que se toca) |
|
|
62
|
+
| `sui-image-upload` | Subir una imagen y ver su vista previa en el mismo lugar (logo, portada, foto de producto, comprobante) | sui-image-upload-profile (foto de perfil con botones Subir/Cambiar/Eliminar al lado) · sui-file-upload (documentos que no son foto: PDF, Excel) · app-image-cropper (el recortador de la app, que se abre desde el lápiz) |
|
|
63
|
+
| `sui-image-upload-profile` | Foto de perfil o logo en círculo con los botones Subir, o Eliminar y Cambiar, al lado | sui-image-upload (la imagen grande con su vista previa y el lápiz que abre el recortador; es lo que usa hoy la app) · sui-avatar (solo mostrar la foto) |
|
|
64
|
+
| `sui-inline-input` | Texto que se edita en su lugar: en reposo muestra el dato y un lápiz; al tocarlo, campo con ✓ y ✕ | sui-input (campo de formulario, siempre editable) · sui-modal con sui-input (editar con más contexto o varios datos a la vez) |
|
|
65
|
+
| `sui-inline-select` | Selector sin caja que vive dentro de una frase o al final de un campo («Mostrar en USD ▾») | sui-compact-select (filtro suelto con caja propia) · sui-compact-select-for-input (al inicio de un sui-input, con divisor) · sui-select (campo de formulario) |
|
|
66
|
+
| `sui-input` | Campo de una sola línea para escribir un dato (nombre, teléfono, monto, búsqueda) | sui-textarea (texto de varias líneas) · sui-select (elegir de una lista) · sui-counter-input (una cantidad con − y +) · sui-tag-input (varios valores cortos) · sui-otp-input (código de verificación) · sui-inline-input (editar un dato en su lugar, con lápiz) |
|
|
67
|
+
| `sui-integration-switch` | Integración con otro servicio — logo, nombre, qué hace, botón «Administrar» y el interruptor para prenderla | sui-switch-card (un ajuste propio de la app, sin logo ni «Administrar») · sui-switch-label (un ajuste en una lista) · sui-content-card type="brand" (mostrar que un servicio está conectado, sin prender ni apagar) |
|
|
68
|
+
| `sui-kbd` | Una tecla dibujada para mostrar un atajo de teclado (⌘K, Esc, ↑ ↓) | sui-badge (una etiqueta corta que no es una tecla) · sui-tag (un chip) |
|
|
69
|
+
| `sui-key-icon` | Un ícono dentro de un círculo, con fondo de color si el ícono dice un estado | sui-icon (el ícono suelto) · sui-avatar (cuando es una persona o un local) · sui-payment-icon (el círculo ya armado para un pago de servicio) |
|
|
70
|
+
| `sui-link-button` | Acción que se lee como texto, sin caja | sui-button (acción con caja: la principal o la secundaria de un grupo) · sui-compact-button (solo ícono, sin texto) · sui-alert (sus acciones se pasan en actions[] y ya salen como link) |
|
|
71
|
+
| `sui-logo` | El logo de Master Pedidos (la M y la palabra), dibujado en SVG y coloreable | sui-brand-logo (logos de OTRAS marcas: WhatsApp, Google, Apple…) · sui-avatar (el logo de un local, que es una foto) |
|
|
72
|
+
| `sui-notification` | Fila de la bandeja de notificaciones, con quién, qué pasó, hace cuánto y si ya se leyó | sui-toast (aviso efímero, incluido el «notification» de esquina de la guía) · sui-alert (aviso que se queda en su contexto) · sui-banner (toda la app) |
|
|
73
|
+
| `sui-notification-footer` | Pie del panel desplegable de notificaciones (web): ayuda de teclado a la izquierda y un link a los ajustes a la derecha | sui-link-button (un link suelto a los ajustes) · sui-drawer-footer (pie de un panel lateral) · sui-modal-footer (pie con botones) |
|
|
74
|
+
| `sui-notification-tab-menu` | Cabecera con pestañas del panel desplegable de notificaciones (web), con conteo de no leídas y botón de filtro | sui-tab-chips (pestañas de la bandeja a pantalla completa, en mobile) · sui-tab-menu-horizontal (pestañas de una pantalla) · sui-segmented-control (cambiar de vista con 2–4 opciones) |
|
|
75
|
+
| `sui-otp-input` | Código de verificación dígito por dígito, una celda por número (SMS, código de entrega) | sui-input (un código largo o que se pega entero) · sui-input type="password-toggle" (una clave que no se ve) |
|
|
76
|
+
| `sui-pagination` | Números de página para recorrer una tabla larga en web cuando todos los datos ya están cargados | scroll infinito (directiva appInfiniteScroll de la app, para listas de Firestore) · sui-stepper (pasos de un flujo) · sui-tab-chips (filtrar en vez de paginar) |
|
|
77
|
+
| `sui-password-strength` | Barra de 3 niveles y lista de condiciones que acompaña al campo de una contraseña nueva | sui-input con hint (una sola regla, como «Mínimo 6 caracteres») |
|
|
78
|
+
| `sui-payment-icon` | El círculo de color de un pago de servicio (agua, gas, luz, internet, alquiler…) | sui-key-icon (cualquier otro ícono en círculo) · sui-brand-logo (el logo de un medio de pago con marca) |
|
|
79
|
+
| `sui-period-range` | Un período predefinido (Hoy, Últimos 7 días) en la columna de presets del calendario de rango | sui-datepicker mode="range" (ya los trae) · sui-tab-chips (períodos fijos a la vista: super admin, ganancias del repartidor) · sui-select (períodos fijos en poco espacio: resumen del local) |
|
|
80
|
+
| `sui-popover` | Panel con flecha que señala un elemento de la pantalla y explica algo nuevo, con una o dos acciones; sirve para recorridos de bienvenida | sui-tooltip (ayuda corta al pasar el mouse, sin acciones) · sui-alert (aviso dentro del contenido) · sui-modal (algo que pide decidir antes de seguir) |
|
|
81
|
+
| `sui-product-card` | Tarjeta de un producto de la carta con foto, nombre, descripción, precio y el botón para agregar (o editar) | sui-store-card (un local, no un producto) · sui-card (cualquier otro contenido) · sui-content-card (un producto en una fila, sin foto grande) |
|
|
82
|
+
| `sui-progress-bar` | Barra que muestra cuánto falta para completar algo, pintada con el estado de lo que mide | sui-progress-bar-label (la misma barra con título, número y descripción) · sui-circular-progress-bar (el avance en un círculo, junto a un título) · un gráfico (repartir un total entre partes) |
|
|
83
|
+
| `sui-progress-bar-label` | La barra de progreso con lo que mide, cuánto va y, si hace falta, qué hacer | sui-progress-bar (la barra pelada, cuando otra cosa ya la rotula) · sui-circular-progress-bar (el avance en un círculo, junto a un título) |
|
|
84
|
+
| `sui-radio` | El círculo solo para elegir una opción de una lista corta, sin texto propio | sui-radio-label (círculo con su texto, lista densa) · sui-radio-card (opción con peso o que se toca en el teléfono) · sui-select (más de 6 opciones) · sui-segmented-control (2-4 modos que se aplican al instante) · sui-checkbox (varias a la vez) |
|
|
85
|
+
| `sui-radio-card` | Opción con tarjeta (ícono o foto, título, descripción y el radio) para elegir UNA de una lista corta | sui-radio-label (la misma elección sin tarjeta, en un formulario denso) · sui-select (lista larga o que no entra en pantalla) · sui-segmented-control (2–4 vistas de la misma pantalla) · sui-checkbox-card (se pueden elegir varias) · sui-switch-card (se prende o se apaga un ajuste) |
|
|
86
|
+
| `sui-radio-label` | Círculo con su texto (y opcionalmente descripción, badge y link) para elegir una opción de una lista corta | sui-radio (el círculo solo) · sui-radio-card (cada opción es una tarjeta) · sui-select (más de 6 opciones) · sui-checkbox-label (varias a la vez) |
|
|
87
|
+
| `sui-rating` | Muestra una nota con estrellas o la pide (estrellas, emojis, corazones o números) | sui-icon (una estrella o un corazón sueltos, sin nota) · sui-badge (la nota escrita como dato corto) |
|
|
88
|
+
| `sui-rich-editor` | Barra de formato (negrita, cursiva, alineación, enlace) con un área de texto editable opcional | sui-textarea (todo texto libre de la app hoy, sin formato) |
|
|
89
|
+
| `sui-segmented-control` | Píldora de 2 a 4 opciones hermanas donde se elige una y se aplica en el momento | sui-tab-menu-horizontal (navegar entre secciones de contenido) · sui-tab-chips (fila de filtros con muchas opciones) · sui-radio-card (elegir una opción de un formulario que se guarda después) · sui-button-group (varias opciones a la vez) |
|
|
90
|
+
| `sui-select` | Campo que despliega una lista para elegir UNA opción (distrito, repartidor, categoría, motivo) | sui-radio-label / sui-radio-card (2 a 6 opciones fijas a la vista) · sui-segmented-control (2 a 4 modos que se aplican al instante) · sui-compact-select (filtro chico que se ajusta al texto) · sui-compact-select-for-input (elegir moneda o país dentro de un campo) · sui-tag-input (varios valores) |
|
|
91
|
+
| `sui-slider` | Barra para elegir un valor, o un rango, dentro de una escala donde importa ver la posición | sui-counter-input (cantidad chica y exacta con − y +) · sui-input type="number" (valor exacto o rango abierto) · sui-progress-bar (avance de solo lectura) |
|
|
92
|
+
| `sui-social-button` | Botón para iniciar sesión o registrarse con una cuenta de Google o Apple | sui-button (cualquier otra acción, aunque mencione una marca) · sui-app-store-badge (descargar la app de una tienda) |
|
|
93
|
+
| `sui-status-badge` | El resultado de un ciclo (completado, pendiente, fallido, deshabilitado) con su color y su ícono ya resueltos | sui-badge (estado con muchos valores, categoría o distinción) · sui-tag (chip neutro que se puede quitar) · sui-alert (mensaje que hay que leer) |
|
|
94
|
+
| `sui-stepper` | Indica en qué paso de un flujo con orden está la persona, cuánto hizo y cuánto le falta | sui-progress-bar (importa el porcentaje, no los pasos) · sui-pagination (páginas de una lista) · sui-tab-menu-horizontal (secciones sin orden) |
|
|
95
|
+
| `sui-store-card` | Tarjeta de un local para los listados del cliente con portada, logo, abierto/cerrado, favorito, nota, ubicación, envío y distancia | sui-product-card (un producto, no un local) · sui-content-card (un local en una fila de un panel, sin portada) · sui-card (cualquier otro contenido) |
|
|
96
|
+
| `sui-switch` | Interruptor solo para prender o apagar algo que se aplica al instante, sin texto propio | sui-switch-label (interruptor con su texto, el caso normal) · sui-switch-card (cada ajuste es una tarjeta) · sui-integration-switch (fila de integración con logo) · sui-checkbox (valor que se confirma después con un botón) |
|
|
97
|
+
| `sui-switch-card` | Ajuste con tarjeta (ícono, título, descripción y el interruptor) que se aplica al instante | sui-switch-label (el mismo ajuste sin tarjeta, en una lista de ajustes) · sui-integration-switch (una integración con logo y «Administrar») · sui-checkbox-card (varias opciones que se guardan con «Guardar») |
|
|
98
|
+
| `sui-switch-label` | Interruptor con su texto (y opcionalmente descripción, badge y link) para un ajuste que se aplica al instante | sui-switch (el interruptor solo, el texto vive en otra parte) · sui-switch-card (cada ajuste es una tarjeta) · sui-integration-switch (fila de integración con logo) · sui-checkbox-label (se confirma después) |
|
|
99
|
+
| `sui-tab-chips` | Fila de chips que se desliza en horizontal para filtrar una lista o saltar entre categorías; siempre hay uno elegido | sui-segmented-control (2 a 4 modos de la misma vista) · sui-tab-menu-horizontal (secciones de contenido distinto) · sui-radio-card (elegir un valor de un formulario) · sui-tag (chip que se quita) |
|
|
100
|
+
| `sui-tab-menu-horizontal` | Pestañas subrayadas para cambiar entre secciones de contenido distinto dentro de una pantalla | sui-tab-chips (filtros o categorías que se deslizan) · sui-segmented-control (2 a 4 modos de la misma vista) · sui-tab-menu-vertical (menú lateral de ajustes en web) |
|
|
101
|
+
| `sui-tab-menu-vertical` | Menú apilado para cambiar entre secciones de una página de ajustes en web | sui-tab-menu-horizontal (pocas secciones arriba del contenido) · sui-sidebar (navegación de toda la app) · sui-tab-chips (filtros o categorías) |
|
|
102
|
+
| `sui-tag` | Chip neutro que nombra algo elegido o aplicado y que la persona puede quitar | sui-badge (etiqueta de solo lectura, con color y significado) · sui-status-badge (resultado de un ciclo) · sui-tab-chips / sui-filter (chips para elegir) · sui-tag-input (campo que junta tags) |
|
|
103
|
+
| `sui-tag-input` | Campo donde se escriben varios valores cortos que se van sumando como chips (palabras clave) | sui-input (un solo valor) · sui-select (una opción de una lista) · sui-checkbox-label (varias opciones fijas) |
|
|
104
|
+
| `sui-textarea` | Campo de varias líneas para un texto libre (motivo, nota al repartidor, descripción) | sui-input (un dato de una línea) · sui-rich-editor (texto con formato, hoy sin uso) · sui-select (motivos que se pueden elegir de una lista) |
|
|
105
|
+
| `sui-time-picker` | Campo para elegir una hora del día, con columnas de hora, minuto y AM/PM | sui-tab-chips + sui-radio-label (día y franja de entrega de un pedido programado) · sui-select (pocas horas fijas) · sui-input type="time" (hora libre con el selector del sistema) |
|
|
106
|
+
| `sui-toast` | Aviso efímero que confirma el resultado de una acción y se va solo; se dispara con SuiToastService | sui-alert (aviso que se queda, en su contexto) · sui-banner (toda la app) · sui-notification (fila de la bandeja, con hora) · sui-form-hint (error de un campo) |
|
|
107
|
+
| `sui-tooltip` | Directiva que muestra una ayuda corta al pasar el mouse o al enfocar un elemento; solo web, no sirve con el dedo | sui-form-hint (ayuda visible bajo un campo) · sui-modal-sheet (explicación que se abre al tocar, en mobile) · sui-popover (panel que señala algo y pide una acción) |
|
|
108
|
+
|
|
109
|
+
## Sin documentar
|
|
110
|
+
|
|
111
|
+
Existen en el paquete pero todavía no tienen doc; antes de usarlos, leer su `.d.ts`.
|
|
112
|
+
|
|
113
|
+
- `sui-accordion`
|
|
114
|
+
- `sui-activity-feed`
|
|
115
|
+
- `sui-activity-filter`
|
|
116
|
+
- `sui-command-menu-footer`
|
|
117
|
+
- `sui-command-menu-item`
|
|
118
|
+
- `sui-command-menu-search`
|
|
119
|
+
- `sui-dropdown-caption`
|
|
120
|
+
- `sui-dropdown-item`
|
|
121
|
+
- `sui-dropdown-menu`
|
|
122
|
+
- `sui-dropdown-search`
|
|
123
|
+
- `sui-filter`
|
|
124
|
+
- `sui-href`
|
|
125
|
+
- `sui-img-retry`
|
|
126
|
+
- `sui-modal`
|
|
127
|
+
- `sui-modal-footer`
|
|
128
|
+
- `sui-modal-header`
|
|
129
|
+
- `sui-modal-sheet`
|
|
130
|
+
- `sui-page-header`
|
|
131
|
+
- `sui-sidebar`
|
|
132
|
+
- `sui-table`
|
|
133
|
+
- `sui-topbar`
|
|
134
|
+
- `sui-topbar-button`
|
|
135
|
+
- `sui-topbar-item`
|
|
136
|
+
- `sui-topbar-user`
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-alert
|
|
3
|
+
selector: sui-alert
|
|
4
|
+
resumen: Aviso que se queda en la pantalla, en el lugar donde pasa lo que avisa
|
|
5
|
+
alternativas: [sui-toast (efímero, resultado de una acción), sui-banner (afecta a toda la app o la pantalla), sui-notification (fila de la bandeja), sui-form-hint (ayuda de un solo campo)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-alert
|
|
9
|
+
|
|
10
|
+
Story: [Molecules/Feedback/Alert](https://sui-design-system.web.app/?path=/docs/molecules-feedback-alert--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** cuando la persona tiene que leer algo **ahí mismo, junto a lo que está haciendo**,
|
|
15
|
+
y el mensaje tiene que seguir visible hasta que cambie la situación: un error que impide
|
|
16
|
+
seguir, una advertencia antes de confirmar, una explicación de cómo funciona una sección,
|
|
17
|
+
el motivo por el que se canceló un pedido.
|
|
18
|
+
|
|
19
|
+
**No lo uses** para:
|
|
20
|
+
|
|
21
|
+
- Confirmar que una acción salió bien («Producto guardado»): eso es `sui-toast`. Un alert que
|
|
22
|
+
hay que cerrar a mano para decir «guardado» estorba.
|
|
23
|
+
- Algo que afecta a toda la app (sin conexión, modo demo, versión nueva): `sui-banner`.
|
|
24
|
+
- La ayuda de un solo campo de formulario: `sui-form-hint`.
|
|
25
|
+
- Decorar. Lleva `role="alert"`: el lector de pantalla lo anuncia apenas aparece.
|
|
26
|
+
|
|
27
|
+
Regla corta: **contexto → alert · toda la app → banner · efímero → toast · bandeja → notification.**
|
|
28
|
+
|
|
29
|
+
## Qué variante usar
|
|
30
|
+
|
|
31
|
+
El alert tiene **dos ejes** y se eligen por separado: `variant` dice **qué tipo de mensaje es**
|
|
32
|
+
(el color y el ícono) y `variantStyle` dice **cuánto peso visual tiene** (el relleno).
|
|
33
|
+
|
|
34
|
+
> **La guía del DS no dice cuándo usar cada relleno ni cada tipo.** Su página del alert muestra
|
|
35
|
+
> las combinaciones, la API y un ejemplo por tamaño, pero no trae do/don't ni jerarquía. Por eso
|
|
36
|
+
> casi todo lo de abajo sigue siendo **canon (aprobado por el dueño, 03-10-2026)**. Solo lo marcado
|
|
37
|
+
> «según la guía del DS» sale de ahí (de su texto o de sus ejemplos publicados).
|
|
38
|
+
>
|
|
39
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: 117 alerts, sin contar prototipos ni
|
|
40
|
+
> vitrinas (`master-preview`, `master-prototipos`, `mockup-sheets-*`, `dx/*`, `master-rutina`,
|
|
41
|
+
> `master-medico`, `dev-index`) ni las copias locales de `components/sui/`.
|
|
42
|
+
|
|
43
|
+
### Lo que sí dice la guía del DS
|
|
44
|
+
|
|
45
|
+
- **Para qué es**: aparece entre campos o pegado al elemento importante, para algo crítico. Su
|
|
46
|
+
ejemplo es el de la contraseña incorrecta al iniciar sesión. Coincide con «contexto → alert».
|
|
47
|
+
- **Hermanos**: el banner es para avisos cruciales **arriba de la pantalla**; el toast, para
|
|
48
|
+
feedback **breve** que se puede apilar; la notification, para avisos **temporales en una
|
|
49
|
+
esquina** (un pago, una actualización); el hint, para ayuda **debajo de un campo**.
|
|
50
|
+
- **Composición por tamaño**: `xsmall`/`small` = **una línea**: título y como mucho una acción a
|
|
51
|
+
la derecha, sin descripción. `large` = título + **descripción (idealmente dos líneas)** +
|
|
52
|
+
hasta **dos acciones** separadas por punto medio.
|
|
53
|
+
- **Las acciones son links, no botones**: en todos sus ejemplos la acción es un link que toma el
|
|
54
|
+
color del texto del alert, y **solo la primera va subrayada**. En SUI eso es `actions[]` (que
|
|
55
|
+
dibuja `sui-link-button`), con `underline: true` en la primera.
|
|
56
|
+
- **Defaults**: la guía arranca en relleno `filled` y tamaño `small`; SUI arranca en `lighter` y
|
|
57
|
+
`large`. Es un default, no una recomendación de uso.
|
|
58
|
+
|
|
59
|
+
### `variantStyle` — el peso visual (lo que más se confunde)
|
|
60
|
+
|
|
61
|
+
Hoy cada tipo de mensaje se reparte casi mitad y mitad: 59 `filled`, 54 `lighter`, 2 `stroke` y
|
|
62
|
+
2 que cambian según el caso. No hay criterio, y la guía tampoco lo da. La regla propuesta sale
|
|
63
|
+
de la jerarquía: `filled` es un bloque de color saturado con texto blanco y compite con el
|
|
64
|
+
botón principal; `lighter` es un fondo pálido con texto oscuro y acompaña sin taparlo.
|
|
65
|
+
|
|
66
|
+
| variantStyle | cuándo | ejemplo real de la app | fuente |
|
|
67
|
+
|---|---|---|---|
|
|
68
|
+
| `lighter` (default SUI) | El aviso **acompaña** al contenido: explica, da contexto, advierte sin frenar. También los errores de formulario que se corrigen ahí mismo. Es el caso normal. | `pages/orders/orders.html:281` («Recojo en tienda») · `pages/auth/login/login.html:31` (error de login) | canon (aprobado por el dueño, 03-10-2026) |
|
|
69
|
+
| `filled` (default de la guía) | El aviso **es lo principal del momento** y hay que leerlo antes de actuar: la persona no puede seguir, va a hacer algo que no se deshace, o el resultado es final (cancelado, rechazado). Uno por pantalla como máximo. | `pages/mi-negocio/mi-negocio.html:1242` («Se eliminará permanentemente») · `pages/customer/order-tracking/order-tracking.html:194` («Pedido cancelado») | canon (aprobado por el dueño, 03-10-2026) |
|
|
70
|
+
| `light` | No usar hoy: queda a medio camino entre los dos de arriba (0 usos). **Cuándo sí:** un aviso dentro de una superficie ya teñida (un banner de color) donde `lighter` se pierde. | — | canon (aprobado por el dueño, 03-10-2026) |
|
|
71
|
+
| `stroke` | Solo sobre una **superficie flotante** o encima de un mapa o una foto, donde un fondo pálido no se lee. | (sin uso correcto hoy) | canon (aprobado por el dueño, 03-10-2026) |
|
|
72
|
+
| `stroke-dark` | Igual que `stroke`, en oscuro. Default del toast. Extensión de SUI: la guía no lo tiene. | `sui-toast/sui-toast.service.ts:92` del DS | canon (aprobado por el dueño, 03-10-2026) |
|
|
73
|
+
|
|
74
|
+
**Usos de hoy que romperían la propuesta:**
|
|
75
|
+
|
|
76
|
+
- **24 `filled` que solo informan → `lighter`.** Los 22 `info filled` y los 5 `success filled`,
|
|
77
|
+
menos los 3 que sí frenan (`pages/promociones/promociones.html:106` «No disponible en tu plan»,
|
|
78
|
+
`pages/drivers/add-driver/add-driver.html:21`, `pages/super-admin/master-orders/master-orders.html:714`
|
|
79
|
+
«Ningún repartidor disponible»). Ejemplos: `pages/driver/driver-earnings/driver-earnings.html:18`
|
|
80
|
+
(«Cobras por cada entrega»), `pages/driver/driver-wallet/driver-wallet.html:12`,
|
|
81
|
+
`pages/customer/store-browser/store-browser.html:573` («Tu local fue aprobado»).
|
|
82
|
+
- **5 `warning filled` que no frenan nada → `lighter`:** `pages/super-admin/master-roles/master-roles.html:6`,
|
|
83
|
+
`pages/driver/driver-schedule/driver-schedule.html:12` y `:40`, `pages/customer/favorites/favorites.html:100`,
|
|
84
|
+
`pages/customer/order-tracking/order-tracking.html:314` («Esperando que el local confirme»).
|
|
85
|
+
- **4 errores de carga en `lighter` → `filled`** (la pantalla queda vacía; el aviso es lo único
|
|
86
|
+
que hay): `pages/envios/envios.html:11`, `pages/super-admin/master-drivers/master-drivers.html:697`,
|
|
87
|
+
`pages/super-admin/master-roles/master-roles.html:79`, `pages/super-admin/master-approvals/master-approvals.html:17`.
|
|
88
|
+
El mismo caso ya está en `filled` en `pages/super-admin/master-orders/master-orders.html:347`.
|
|
89
|
+
- **2 `stroke` inline sobre fondo blanco → `lighter`:** `pages/role-selector/role-selector.html:52`,
|
|
90
|
+
`pages/driver/driver-order-detail/driver-order-detail.html:360`.
|
|
91
|
+
|
|
92
|
+
La pregunta para decidir es una: **¿este aviso tiene que ganarle al botón principal?** Si no, `lighter`.
|
|
93
|
+
|
|
94
|
+
### `variant` — qué tipo de mensaje es
|
|
95
|
+
|
|
96
|
+
La guía lista los cinco tipos pero no dice cuándo va cada uno.
|
|
97
|
+
|
|
98
|
+
| variant | cuándo | ejemplo real de la app | fuente |
|
|
99
|
+
|---|---|---|---|
|
|
100
|
+
| `info` (default) | Un dato que conviene saber. No pide hacer nada. | `pages/orders/orders.html:281` | canon (aprobado por el dueño, 03-10-2026) |
|
|
101
|
+
| `success` | Un resultado bueno que se queda (aprobado, verificado, enviado). Si es la confirmación de un clic, es toast. | `components/transfer-tenant-modal/transfer-tenant-modal.html:16` («Cuenta verificada») | canon (aprobado por el dueño, 03-10-2026) |
|
|
102
|
+
| `warning` | Hay que atender algo o va a tener una consecuencia. | `pages/driver/driver-order-detail/driver-order-detail.html:856` («Se te cobran S/ 0.50») | canon (aprobado por el dueño, 03-10-2026) |
|
|
103
|
+
| `error` | Algo falló o no se puede hacer. Su ejemplo de uso (contraseña incorrecta) es de este tipo. | `pages/auth/login/login.html:31` | canon (aprobado por el dueño, 03-10-2026) (el ejemplo sí es de la guía) |
|
|
104
|
+
| `feature` | Novedad o función en prueba. Solo eso. El color sale del estado «feature» de la paleta. | `pages/customer/viaje/viaje.html:81` («Viajes está en prueba») | canon (aprobado por el dueño, 03-10-2026) |
|
|
105
|
+
|
|
106
|
+
**Usos de hoy que romperían la propuesta:** 3 alerts `feature` muestran la **nota que dejó el
|
|
107
|
+
cliente**, que no es una novedad: `pages/envios/envios.html:725`,
|
|
108
|
+
`pages/driver/driver-order-detail/driver-order-detail.html:177`,
|
|
109
|
+
`pages/customer/order-tracking/order-tracking.html:551`. Pasarían a `info`.
|
|
110
|
+
|
|
111
|
+
### `size` y acciones
|
|
112
|
+
|
|
113
|
+
| size | cuándo | fuente |
|
|
114
|
+
|---|---|---|
|
|
115
|
+
| `large` (default SUI) | Siempre que haya **descripción**: título + descripción de hasta dos líneas + hasta dos acciones. | según la guía del DS |
|
|
116
|
+
| `small` / `xsmall` | Un aviso de **una línea**: título y como mucho una acción, sin descripción. `small` es el default de la guía. | según la guía del DS |
|
|
117
|
+
| `xlarge` | Extensión de SUI (la guía no lo tiene). Sin uso hoy. | canon (aprobado por el dueño, 03-10-2026) |
|
|
118
|
+
|
|
119
|
+
| acciones | regla | fuente |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
| tipo | Links por `actions[]`, nunca un `sui-button` proyectado en el slot. | según la guía del DS |
|
|
122
|
+
| cuántas | Hasta dos, separadas por punto medio. | según la guía del DS |
|
|
123
|
+
| subrayado | Solo la primera, con `underline: true`. | según la guía del DS |
|
|
124
|
+
|
|
125
|
+
**Usos de hoy que rompen la guía:**
|
|
126
|
+
|
|
127
|
+
- **3 alerts con descripción en `small` → `large`.** El componente hace lo que dice la guía
|
|
128
|
+
(en `small` no hay descripción), así que no es un bug del componente: es un error de uso, y la
|
|
129
|
+
descripción hoy **no se ve**. `pages/customer/checkout/checkout.html:417` (la descripción del
|
|
130
|
+
cupón), `pages/super-admin/master-settings/master-settings.html:633` y `:680`.
|
|
131
|
+
- **5 alerts con un `sui-button` en el slot `action` → `actions[]`:** `pages/role-selector/role-selector.html:52`,
|
|
132
|
+
`pages/overview/overview.html:34`, `pages/mi-negocio/mi-negocio.html:376`,
|
|
133
|
+
`pages/customer/cart/cart.html:29`, `pages/customer/viaje/viaje.html:86` (este último es un
|
|
134
|
+
`filled primary` dentro del alert: el CTA de la pantalla no debería vivir ahí).
|
|
135
|
+
- **2 acciones únicas sin subrayar → `underline: true`:** `pages/notifications/notifications.ts:197`
|
|
136
|
+
y `:198` (`accionActivar`, `accionReintentar`, usadas en `notifications.html:17` y `:23`).
|
|
137
|
+
- Más de dos acciones: 0.
|
|
138
|
+
|
|
139
|
+
## Tamaño en mobile y en web
|
|
140
|
+
|
|
141
|
+
El alert no tiene un tamaño «de mobile»: el tamaño lo decide el contenido (guía del DS).
|
|
142
|
+
Con descripción va `large` en las dos plataformas; de una línea, `small`. Lo que cambia
|
|
143
|
+
en mobile es el ancho: ocupa toda la columna.
|
|
144
|
+
|
|
145
|
+
| uso | mobile | web | fuente |
|
|
146
|
+
|---|---|---|---|
|
|
147
|
+
| aviso con descripción | `large` | `large` | guía del DS |
|
|
148
|
+
| aviso de una línea en la página | `small` | `small` | guía del DS |
|
|
149
|
+
| dentro de un campo o una card | `xsmall` | `xsmall` | guía del DS |
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
## API
|
|
153
|
+
|
|
154
|
+
<!-- api:inicio -->
|
|
155
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
156
|
+
|
|
157
|
+
| input | tipo | default |
|
|
158
|
+
|---|---|---|
|
|
159
|
+
| `variant` | `'info' \| 'success' \| 'warning' \| 'error' \| 'feature'` | `'info'` |
|
|
160
|
+
| `variantStyle` | `'filled' \| 'light' \| 'lighter' \| 'stroke' \| 'stroke-dark'` | `'lighter'` |
|
|
161
|
+
| `size` | `'xsmall' \| 'small' \| 'large' \| 'xlarge'` | `'large'` |
|
|
162
|
+
| `title` | `string \| null` | `null` |
|
|
163
|
+
| `description` | `string \| null` | `null` |
|
|
164
|
+
| `showIcon` | `boolean` | `true` |
|
|
165
|
+
| `dismissible` | `boolean` | `false` |
|
|
166
|
+
| `autoHideOnDismiss` | `boolean` | `true` |
|
|
167
|
+
| `actions` | `readonly SuiAlertAction[]` | `[]` |
|
|
168
|
+
|
|
169
|
+
| output | payload |
|
|
170
|
+
|---|---|
|
|
171
|
+
| `closed` | `void` |
|
|
172
|
+
<!-- api:fin -->
|
|
173
|
+
|
|
174
|
+
`description` se pinta con `innerHTML`: acepta HTML y no se escapa.
|
|
175
|
+
|
|
176
|
+
Signal pública: `dismissed` (`signal(false)`).
|
|
177
|
+
|
|
178
|
+
```ts
|
|
179
|
+
interface SuiAlertAction {
|
|
180
|
+
label: string;
|
|
181
|
+
onClick?: () => void;
|
|
182
|
+
underline?: boolean; // canon: solo la primera en true
|
|
183
|
+
href?: string; // con href se dibuja <a>; sin href, <button>
|
|
184
|
+
target?: '_blank' | '_self' | '_parent' | '_top';
|
|
185
|
+
color?: string; // pisa el color automático
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Slot: `<ng-content select="[slot=action]">` — legado; solo se usa si `actions` está vacío y en
|
|
190
|
+
`large`/`xlarge`.
|
|
191
|
+
|
|
192
|
+
## Trampas
|
|
193
|
+
|
|
194
|
+
- **Los nombres están cruzados respecto al Figma de origen.** Allá «Style» es el relleno y
|
|
195
|
+
«Status» el tipo; aquí el relleno es `variantStyle` y el tipo es `variant`. Y en `sui-badge`,
|
|
196
|
+
`variant` es el **relleno**: misma palabra, otro eje.
|
|
197
|
+
- La prop de relleno se llama `variantStyle` en alert, banner, compact-button y social-button;
|
|
198
|
+
`appearance` en status-badge; `tagStyle` en tag.
|
|
199
|
+
- **Defaults distintos entre hermanos:** alert arranca en `lighter`, banner en `stroke`, toast en
|
|
200
|
+
`stroke-dark`. La guía del DS arranca el alert en `filled` y `small`; SUI, en `lighter` y `large`.
|
|
201
|
+
- `small`/`xsmall` **descartan la descripción** sin avisar, y la acción pasa a dibujarse en la
|
|
202
|
+
misma línea, a la derecha. Es lo que define la guía del DS para esos tamaños: si hay
|
|
203
|
+
descripción, va `large`.
|
|
204
|
+
- `description` va por `innerHTML`: no le pases texto escrito por el usuario sin sanear.
|
|
205
|
+
- Las acciones toman el **color del texto** del alert (blanco en `filled`, casi negro en el
|
|
206
|
+
resto), no el color del tipo. Para forzar otro, `color` en la acción.
|
|
207
|
+
- `feature` es **morado** aquí y **gris** en `sui-banner` (decisión documentada en los dos `.ts`).
|
|
208
|
+
- Con `autoHideOnDismiss` en `true` (default) el alert se oculta solo al tocar la X. Si el padre
|
|
209
|
+
necesita animar la salida antes de quitarlo, pásalo en `false` y escucha `(closed)`.
|
|
210
|
+
- El slot de acción usa `slot=`; los de badge y button usan `data-slot=`.
|
|
211
|
+
- El host borra el atributo `title` nativo (no aparece el tooltip gris del navegador).
|
|
212
|
+
|
|
213
|
+
## Ejemplo
|
|
214
|
+
|
|
215
|
+
```html
|
|
216
|
+
<!-- Aviso que acompaña: lighter (default) -->
|
|
217
|
+
<sui-alert
|
|
218
|
+
variant="warning"
|
|
219
|
+
title="Tu local todavía no está en el mapa"
|
|
220
|
+
description="Marca la ubicación en Mi negocio: sin ella no podemos calcular la distancia." />
|
|
221
|
+
|
|
222
|
+
<!-- Aviso que frena: filled, con acción -->
|
|
223
|
+
<sui-alert
|
|
224
|
+
variant="error"
|
|
225
|
+
variantStyle="filled"
|
|
226
|
+
title="Se eliminará permanentemente"
|
|
227
|
+
description="Todos los productos, historial de pedidos y horarios."
|
|
228
|
+
[actions]="[{ label: 'Ver qué se borra', underline: true, onClick: verDetalle }]" />
|
|
229
|
+
```
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-app-store-badge
|
|
3
|
+
selector: sui-app-store-badge
|
|
4
|
+
resumen: El sello oficial de App Store o Google Play que lleva a descargar la app
|
|
5
|
+
alternativas: [sui-link-button (link directo de descarga, «Descargar la app»), sui-social-button (entrar con una cuenta de Google o Apple)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-app-store-badge
|
|
9
|
+
|
|
10
|
+
Story: [Atoms/App Store Badge](https://sui-design-system.web.app/?path=/docs/atoms-app-store-badge--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** donde se invita a descargar la app: las landings (`/clientes`, `/empresas`,
|
|
15
|
+
`/repartidores`), su footer y piezas de «Descarga la app». Siempre los dos juntos, App Store y
|
|
16
|
+
Google Play, en ese orden.
|
|
17
|
+
|
|
18
|
+
**No lo uses** para:
|
|
19
|
+
|
|
20
|
+
- **Dentro de la app** (la persona ya la tiene instalada).
|
|
21
|
+
- **Un link de descarga directa** sin tienda: `sui-link-button` `primary` con
|
|
22
|
+
`leftIcon="download-2-line"`, como hacen las landings debajo de los sellos.
|
|
23
|
+
- **Entrar con una cuenta de Google o Apple**: `sui-social-button`.
|
|
24
|
+
|
|
25
|
+
## Qué variante usar
|
|
26
|
+
|
|
27
|
+
> **La guía del DS no tiene página para este componente.** Todo lo de abajo es **canon (aprobado
|
|
28
|
+
> por el dueño, 03-10-2026)** o propuesta. Los sellos son los oficiales de cada tienda (cada una
|
|
29
|
+
> pide usar el suyo tal cual, sin recolorear ni tocar el logo).
|
|
30
|
+
>
|
|
31
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: 10 sellos en 4 archivos, sin contar
|
|
32
|
+
> prototipos ni vitrinas. 5 `app-store` y 5 `google-play`; 8 `preferred`, 2 `alternative`. Todos
|
|
33
|
+
> con `href`, `target="_blank"` y `ariaLabel`.
|
|
34
|
+
|
|
35
|
+
### `company`
|
|
36
|
+
|
|
37
|
+
| company | cuándo | ejemplo real de la app | fuente |
|
|
38
|
+
|---|---|---|---|
|
|
39
|
+
| `app-store` | Landings y «Descarga la app». Va primero. | `pages/public/landing-customers/landing-customers.html:26` | canon (aprobado por el dueño, 03-10-2026) |
|
|
40
|
+
| `google-play` | Siempre al lado del de App Store. | `pages/public/landing-customers/landing-customers.html:32` | canon (aprobado por el dueño, 03-10-2026) |
|
|
41
|
+
| `huawei-appgallery`, `galaxy-store` | No: la app no está publicada ahí. | — | no usar · canon (aprobado por el dueño, 03-10-2026) |
|
|
42
|
+
| `mac-app-store`, `amazon-appstore`, `f-droid`, `microsoft-store` | No: la app no está publicada ahí. | — | no usar · canon (aprobado por el dueño, 03-10-2026) |
|
|
43
|
+
|
|
44
|
+
### `appearance`
|
|
45
|
+
|
|
46
|
+
| appearance | cuándo | ejemplo real de la app | fuente |
|
|
47
|
+
|---|---|---|---|
|
|
48
|
+
| `preferred` (default) | Lo normal: el sello negro, que es el oficial de cada tienda. | `pages/public/landing-driver/landing-driver.html:24` | canon (aprobado por el dueño, 03-10-2026) |
|
|
49
|
+
| `alternative` | Solo sobre un fondo oscuro o de color, donde el negro se pierde o pesa. | `components/landing-footer/landing-footer.html:16` y `:19` (footer de las landings, sobre el naranja de marca) | no usar salvo ese caso · canon (aprobado por el dueño, 03-10-2026) |
|
|
50
|
+
|
|
51
|
+
**Usos de hoy que rompen la regla: 0.** Los 2 `alternative` del footer de las landings están sobre
|
|
52
|
+
`--sui-primary-base` (`components/landing-footer/landing-footer.scss:5`): caen justo en el «cuándo sí».
|
|
53
|
+
|
|
54
|
+
### `height`, `href`, `target`, `ariaLabel`, `disabled`
|
|
55
|
+
|
|
56
|
+
| prop | cuándo | fuente |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| `height` (40, default) | 40 en desktop y en el footer. El ancho sale solo de la proporción de cada sello. | propuesta |
|
|
59
|
+
| `height` 48 | En el hero de una landing en mobile, si los sellos son el CTA principal. Los dos sellos siempre a la misma altura. | propuesta |
|
|
60
|
+
| `href` | Siempre: el link de la ficha de la tienda (`apps.apple.com/pe/app/master-pedidos/…`, `play.google.com/store/apps/details?id=com.masterpedidos.app`). Sin `href` el sello no es un link. | canon (todos los usos de hoy) |
|
|
61
|
+
| `target="_blank"` | Siempre que hay `href`: el `rel="noopener"` se aplica solo en ese caso. | propuesta |
|
|
62
|
+
| `ariaLabel` | Siempre, en español: «Descargar Master Pedidos en App Store». Sin él, el texto alternativo sale en inglés («Download on the App Store»). | propuesta |
|
|
63
|
+
| `disabled` | Sin caso: si la app no está en una tienda, no se muestra su sello. | propuesta |
|
|
64
|
+
|
|
65
|
+
## Tamaño en mobile y en web
|
|
66
|
+
|
|
67
|
+
En mobile se toca con el dedo: el área táctil tiene que medir **44 px o más**. En web, con mouse,
|
|
68
|
+
va un tamaño más chico. La app ya lo resuelve con `BreakpointsService`
|
|
69
|
+
(`src/app/services/breakpoints.service.ts`, mobile = hasta 767 px):
|
|
70
|
+
`[size]="bp.isMobile() ? 'large' : 'small'"`, 27 usos hoy en `master-pedidos` (16 `large`/`small`,
|
|
71
|
+
9 `large`/`medium`, 2 `medium`/`xsmall`). Regla del dueño, 03-10-2026.
|
|
72
|
+
|
|
73
|
+
| uso | mobile | web | fuente |
|
|
74
|
+
|---|---|---|---|
|
|
75
|
+
| hero de una landing, cuando los sellos son el CTA | `[height]="48"` | `[height]="40"` | propuesta |
|
|
76
|
+
| footer de las landings, «Descarga la app» | `[height]="44"` | `[height]="40"` (default) | propuesta |
|
|
77
|
+
|
|
78
|
+
```html
|
|
79
|
+
<sui-app-store-badge company="app-store" [height]="bp.isMobile() ? 48 : 40" href="…" target="_blank"
|
|
80
|
+
ariaLabel="Descargar Master Pedidos en App Store" />
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Los dos sellos siempre a la misma altura. Hoy los 10 usan la altura default (40) también en mobile:
|
|
84
|
+
quedan 4 px por debajo de los 44.
|
|
85
|
+
|
|
86
|
+
## «No usar»: por qué no hoy y cuándo sí
|
|
87
|
+
|
|
88
|
+
Nada se borra del DS. Lo marcado «no usar» no tiene caso en la app de hoy; si un flujo nuevo cae
|
|
89
|
+
en la columna de la derecha, se usa (aprobado por el dueño, 03-10-2026).
|
|
90
|
+
|
|
91
|
+
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| `appearance="alternative"` | el `preferred` es el oficial de cada tienda | landings o piezas sobre fondo oscuro o de color (ya es el caso del footer de las landings) |
|
|
94
|
+
| otras tiendas (`huawei-appgallery`, `galaxy-store`, `mac-app-store`, `amazon-appstore`, `f-droid`, `microsoft-store`) | la app no está publicada ahí | si se publica en Huawei AppGallery (teléfonos Huawei sin Google) o Galaxy Store |
|
|
95
|
+
| `disabled` | un sello deshabilitado no se entiende | no se ve un caso |
|
|
96
|
+
|
|
97
|
+
## API
|
|
98
|
+
|
|
99
|
+
<!-- api:inicio -->
|
|
100
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
101
|
+
|
|
102
|
+
| input | tipo | default |
|
|
103
|
+
|---|---|---|
|
|
104
|
+
| `company` | `'app-store' \| 'mac-app-store' \| 'amazon-appstore' \| 'galaxy-store' \| 'huawei-appgallery' \| 'f-droid' \| 'google-play' \| 'microsoft-store'` | — (requerido) |
|
|
105
|
+
| `appearance` | `'preferred' \| 'alternative'` | `'preferred'` |
|
|
106
|
+
| `href` | `string \| null` | `null` |
|
|
107
|
+
| `target` | `string \| null` | `null` |
|
|
108
|
+
| `rel` | `string \| null` | `'noopener'` |
|
|
109
|
+
| `height` | `number` | `40` |
|
|
110
|
+
| `disabled` | `boolean` | `false` |
|
|
111
|
+
| `ariaLabel` | `string \| null` | `null` |
|
|
112
|
+
|
|
113
|
+
Outputs: ninguno.
|
|
114
|
+
<!-- api:fin -->
|
|
115
|
+
|
|
116
|
+
## Trampas
|
|
117
|
+
|
|
118
|
+
- **Los sellos están en inglés** («Download on the App Store», «Get it on Google Play»): son los
|
|
119
|
+
SVG oficiales y no se traducen. Lo que sí va en español es el `ariaLabel`.
|
|
120
|
+
- **Sin `href` no hay link**: el componente pinta solo la imagen, sin foco ni clic.
|
|
121
|
+
- **No tiene output**: es un link, no un botón. Para medir clics, escucha `(click)` en el host.
|
|
122
|
+
- Los SVG se sirven desde `/assets/brand/store-badges/<company>-<appearance>.svg`: la app tiene que
|
|
123
|
+
tener esos archivos en sus assets (`master-pedidos` los tiene copiados en
|
|
124
|
+
`src/assets/brand/store-badges/`). Si falta uno, el sello sale como imagen rota.
|
|
125
|
+
- `height` escala el sello entero; no le pongas `width` desde afuera o se deforma.
|
|
126
|
+
- El hover baja la opacidad a 0.85, como recomienda Apple; no hay estado activo propio de las tiendas.
|
|
127
|
+
|
|
128
|
+
## Ejemplo
|
|
129
|
+
|
|
130
|
+
```html
|
|
131
|
+
<sui-app-store-badge company="app-store"
|
|
132
|
+
href="https://apps.apple.com/pe/app/master-pedidos/id6764676191" target="_blank"
|
|
133
|
+
ariaLabel="Descargar Master Pedidos en App Store" />
|
|
134
|
+
<sui-app-store-badge company="google-play"
|
|
135
|
+
href="https://play.google.com/store/apps/details?id=com.masterpedidos.app" target="_blank"
|
|
136
|
+
ariaLabel="Descargar Master Pedidos en Google Play" />
|
|
137
|
+
```
|