@ajuarezso/sui-design-system 0.18.10 → 0.20.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 +216 -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 +212 -0
- package/docs/sui-brand-logo/README.md +143 -0
- package/docs/sui-button/README.md +192 -0
- package/docs/sui-button-group/README.md +178 -0
- package/docs/sui-button-group-item/README.md +102 -0
- package/docs/sui-checkbox/README.md +147 -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-content-divider/README.md +124 -0
- package/docs/sui-divider/README.md +102 -0
- package/docs/sui-emoji/README.md +138 -0
- package/docs/sui-fancy-button/README.md +148 -0
- package/docs/sui-file-icon/README.md +103 -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-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-payment-icon/README.md +98 -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-label/README.md +137 -0
- package/docs/sui-rating/README.md +198 -0
- package/docs/sui-segmented-control/README.md +144 -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-switch/README.md +146 -0
- package/docs/sui-switch-label/README.md +139 -0
- package/docs/sui-tag/README.md +145 -0
- package/fesm2022/ajuarezso-sui-design-system.mjs +207 -52
- package/fesm2022/ajuarezso-sui-design-system.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ajuarezso-sui-design-system.d.ts +177 -28
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: 42 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-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) |
|
|
22
|
+
| `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) |
|
|
23
|
+
| `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) |
|
|
24
|
+
| `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) |
|
|
25
|
+
| `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) |
|
|
26
|
+
| `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) |
|
|
27
|
+
| `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) |
|
|
28
|
+
| `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) |
|
|
29
|
+
| `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) |
|
|
30
|
+
| `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) |
|
|
31
|
+
| `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) |
|
|
32
|
+
| `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) |
|
|
33
|
+
| `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) |
|
|
34
|
+
| `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) |
|
|
35
|
+
| `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) |
|
|
36
|
+
| `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) |
|
|
37
|
+
| `sui-flag` | La bandera circular de un país | sui-emoji (un emoji con emoción) · sui-icon (un ícono funcional) |
|
|
38
|
+
| `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) |
|
|
39
|
+
| `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) |
|
|
40
|
+
| `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) |
|
|
41
|
+
| `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) |
|
|
42
|
+
| `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) |
|
|
43
|
+
| `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) |
|
|
44
|
+
| `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) |
|
|
45
|
+
| `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) |
|
|
46
|
+
| `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) |
|
|
47
|
+
| `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) |
|
|
48
|
+
| `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) |
|
|
49
|
+
| `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) |
|
|
50
|
+
| `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) |
|
|
51
|
+
| `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) |
|
|
52
|
+
| `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) |
|
|
53
|
+
| `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) |
|
|
54
|
+
| `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) |
|
|
55
|
+
| `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) |
|
|
56
|
+
| `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) |
|
|
57
|
+
| `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) |
|
|
58
|
+
|
|
59
|
+
## Sin documentar
|
|
60
|
+
|
|
61
|
+
Existen en el paquete pero todavía no tienen doc; antes de usarlos, leer su `.d.ts`.
|
|
62
|
+
|
|
63
|
+
- `sui-accordion`
|
|
64
|
+
- `sui-activity-feed`
|
|
65
|
+
- `sui-activity-filter`
|
|
66
|
+
- `sui-banner`
|
|
67
|
+
- `sui-breadcrumb-item`
|
|
68
|
+
- `sui-breadcrumbs`
|
|
69
|
+
- `sui-card`
|
|
70
|
+
- `sui-chart-legend`
|
|
71
|
+
- `sui-chart-legend-dot`
|
|
72
|
+
- `sui-checkbox-card`
|
|
73
|
+
- `sui-command-menu-footer`
|
|
74
|
+
- `sui-command-menu-item`
|
|
75
|
+
- `sui-command-menu-search`
|
|
76
|
+
- `sui-compact-select`
|
|
77
|
+
- `sui-compact-select-for-input`
|
|
78
|
+
- `sui-content-card`
|
|
79
|
+
- `sui-content-label`
|
|
80
|
+
- `sui-counter-input`
|
|
81
|
+
- `sui-date-selector`
|
|
82
|
+
- `sui-datepicker`
|
|
83
|
+
- `sui-day-cell`
|
|
84
|
+
- `sui-day-label`
|
|
85
|
+
- `sui-drawer-footer`
|
|
86
|
+
- `sui-drawer-header`
|
|
87
|
+
- `sui-dropdown-caption`
|
|
88
|
+
- `sui-dropdown-item`
|
|
89
|
+
- `sui-dropdown-menu`
|
|
90
|
+
- `sui-dropdown-search`
|
|
91
|
+
- `sui-empty-state`
|
|
92
|
+
- `sui-file-upload`
|
|
93
|
+
- `sui-file-upload-card`
|
|
94
|
+
- `sui-filter`
|
|
95
|
+
- `sui-href`
|
|
96
|
+
- `sui-image-upload`
|
|
97
|
+
- `sui-image-upload-profile`
|
|
98
|
+
- `sui-img-retry`
|
|
99
|
+
- `sui-inline-input`
|
|
100
|
+
- `sui-inline-select`
|
|
101
|
+
- `sui-input`
|
|
102
|
+
- `sui-integration-switch`
|
|
103
|
+
- `sui-modal`
|
|
104
|
+
- `sui-modal-footer`
|
|
105
|
+
- `sui-modal-header`
|
|
106
|
+
- `sui-modal-sheet`
|
|
107
|
+
- `sui-notification`
|
|
108
|
+
- `sui-notification-footer`
|
|
109
|
+
- `sui-notification-tab-menu`
|
|
110
|
+
- `sui-otp-input`
|
|
111
|
+
- `sui-page-header`
|
|
112
|
+
- `sui-pagination`
|
|
113
|
+
- `sui-password-strength`
|
|
114
|
+
- `sui-period-range`
|
|
115
|
+
- `sui-popover`
|
|
116
|
+
- `sui-product-card`
|
|
117
|
+
- `sui-radio-card`
|
|
118
|
+
- `sui-rich-editor`
|
|
119
|
+
- `sui-select`
|
|
120
|
+
- `sui-sidebar`
|
|
121
|
+
- `sui-stepper`
|
|
122
|
+
- `sui-store-card`
|
|
123
|
+
- `sui-switch-card`
|
|
124
|
+
- `sui-tab-chips`
|
|
125
|
+
- `sui-tab-menu-horizontal`
|
|
126
|
+
- `sui-tab-menu-vertical`
|
|
127
|
+
- `sui-table`
|
|
128
|
+
- `sui-tag-input`
|
|
129
|
+
- `sui-textarea`
|
|
130
|
+
- `sui-time-picker`
|
|
131
|
+
- `sui-toast`
|
|
132
|
+
- `sui-tooltip`
|
|
133
|
+
- `sui-topbar`
|
|
134
|
+
- `sui-topbar-button`
|
|
135
|
+
- `sui-topbar-item`
|
|
136
|
+
- `sui-topbar-user`
|
|
@@ -0,0 +1,216 @@
|
|
|
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
|
+
## API
|
|
140
|
+
|
|
141
|
+
<!-- api:inicio -->
|
|
142
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
143
|
+
|
|
144
|
+
| input | tipo | default |
|
|
145
|
+
|---|---|---|
|
|
146
|
+
| `variant` | `'info' \| 'success' \| 'warning' \| 'error' \| 'feature'` | `'info'` |
|
|
147
|
+
| `variantStyle` | `'filled' \| 'light' \| 'lighter' \| 'stroke' \| 'stroke-dark'` | `'lighter'` |
|
|
148
|
+
| `size` | `'xsmall' \| 'small' \| 'large' \| 'xlarge'` | `'large'` |
|
|
149
|
+
| `title` | `string \| null` | `null` |
|
|
150
|
+
| `description` | `string \| null` | `null` |
|
|
151
|
+
| `showIcon` | `boolean` | `true` |
|
|
152
|
+
| `dismissible` | `boolean` | `false` |
|
|
153
|
+
| `autoHideOnDismiss` | `boolean` | `true` |
|
|
154
|
+
| `actions` | `readonly SuiAlertAction[]` | `[]` |
|
|
155
|
+
|
|
156
|
+
| output | payload |
|
|
157
|
+
|---|---|
|
|
158
|
+
| `closed` | `void` |
|
|
159
|
+
<!-- api:fin -->
|
|
160
|
+
|
|
161
|
+
`description` se pinta con `innerHTML`: acepta HTML y no se escapa.
|
|
162
|
+
|
|
163
|
+
Signal pública: `dismissed` (`signal(false)`).
|
|
164
|
+
|
|
165
|
+
```ts
|
|
166
|
+
interface SuiAlertAction {
|
|
167
|
+
label: string;
|
|
168
|
+
onClick?: () => void;
|
|
169
|
+
underline?: boolean; // canon: solo la primera en true
|
|
170
|
+
href?: string; // con href se dibuja <a>; sin href, <button>
|
|
171
|
+
target?: '_blank' | '_self' | '_parent' | '_top';
|
|
172
|
+
color?: string; // pisa el color automático
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Slot: `<ng-content select="[slot=action]">` — legado; solo se usa si `actions` está vacío y en
|
|
177
|
+
`large`/`xlarge`.
|
|
178
|
+
|
|
179
|
+
## Trampas
|
|
180
|
+
|
|
181
|
+
- **Los nombres están cruzados respecto al Figma de origen.** Allá «Style» es el relleno y
|
|
182
|
+
«Status» el tipo; aquí el relleno es `variantStyle` y el tipo es `variant`. Y en `sui-badge`,
|
|
183
|
+
`variant` es el **relleno**: misma palabra, otro eje.
|
|
184
|
+
- La prop de relleno se llama `variantStyle` en alert, banner, compact-button y social-button;
|
|
185
|
+
`appearance` en status-badge; `tagStyle` en tag.
|
|
186
|
+
- **Defaults distintos entre hermanos:** alert arranca en `lighter`, banner en `stroke`, toast en
|
|
187
|
+
`stroke-dark`. La guía del DS arranca el alert en `filled` y `small`; SUI, en `lighter` y `large`.
|
|
188
|
+
- `small`/`xsmall` **descartan la descripción** sin avisar, y la acción pasa a dibujarse en la
|
|
189
|
+
misma línea, a la derecha. Es lo que define la guía del DS para esos tamaños: si hay
|
|
190
|
+
descripción, va `large`.
|
|
191
|
+
- `description` va por `innerHTML`: no le pases texto escrito por el usuario sin sanear.
|
|
192
|
+
- Las acciones toman el **color del texto** del alert (blanco en `filled`, casi negro en el
|
|
193
|
+
resto), no el color del tipo. Para forzar otro, `color` en la acción.
|
|
194
|
+
- `feature` es **morado** aquí y **gris** en `sui-banner` (decisión documentada en los dos `.ts`).
|
|
195
|
+
- Con `autoHideOnDismiss` en `true` (default) el alert se oculta solo al tocar la X. Si el padre
|
|
196
|
+
necesita animar la salida antes de quitarlo, pásalo en `false` y escucha `(closed)`.
|
|
197
|
+
- El slot de acción usa `slot=`; los de badge y button usan `data-slot=`.
|
|
198
|
+
- El host borra el atributo `title` nativo (no aparece el tooltip gris del navegador).
|
|
199
|
+
|
|
200
|
+
## Ejemplo
|
|
201
|
+
|
|
202
|
+
```html
|
|
203
|
+
<!-- Aviso que acompaña: lighter (default) -->
|
|
204
|
+
<sui-alert
|
|
205
|
+
variant="warning"
|
|
206
|
+
title="Tu local todavía no está en el mapa"
|
|
207
|
+
description="Marca la ubicación en Mi negocio: sin ella no podemos calcular la distancia." />
|
|
208
|
+
|
|
209
|
+
<!-- Aviso que frena: filled, con acción -->
|
|
210
|
+
<sui-alert
|
|
211
|
+
variant="error"
|
|
212
|
+
variantStyle="filled"
|
|
213
|
+
title="Se eliminará permanentemente"
|
|
214
|
+
description="Todos los productos, historial de pedidos y horarios."
|
|
215
|
+
[actions]="[{ label: 'Ver qué se borra', underline: true, onClick: verDetalle }]" />
|
|
216
|
+
```
|
|
@@ -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
|
+
```
|