@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
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-key-icon
|
|
3
|
+
selector: sui-key-icon
|
|
4
|
+
resumen: Un ícono dentro de un círculo, con fondo de color si el ícono dice un estado
|
|
5
|
+
alternativas: [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)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-key-icon
|
|
9
|
+
|
|
10
|
+
Story: [Atoms/Icon/Key Icon](https://sui-design-system.web.app/?path=/docs/atoms-icon-key-icon--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** cuando un ícono tiene que **anclar** algo: el inicio de una fila, la cabecera de un
|
|
15
|
+
modal, el resultado de una acción («Cuenta bloqueada», «¡Gracias por calificar!»).
|
|
16
|
+
|
|
17
|
+
**No lo uses** para:
|
|
18
|
+
|
|
19
|
+
- Una persona o un local: `sui-avatar`.
|
|
20
|
+
- Un ícono dentro de un texto o un botón: `sui-icon`.
|
|
21
|
+
- Algo que se toca: no es clickeable (sin foco, sin output). Envuélvelo en la card o el botón.
|
|
22
|
+
|
|
23
|
+
## Qué variante usar
|
|
24
|
+
|
|
25
|
+
> **La guía del DS no tiene página para este componente.** Todo es **propuesta, falta
|
|
26
|
+
> aprobación**.
|
|
27
|
+
>
|
|
28
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: **0 usos directos**. Lo usan por dentro
|
|
29
|
+
> `sui-content-label` y `sui-payment-icon`.
|
|
30
|
+
|
|
31
|
+
### `styleVariant`
|
|
32
|
+
|
|
33
|
+
| valor | cuándo | fuente |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| `lighter` | El ícono dice un estado: el color del fondo **es** el significado («Cuenta bloqueada» en rojo, «Calificación enviada» en verde). | propuesta |
|
|
36
|
+
| `stroke` (default) | Ícono neutro al inicio de una fila, sobre fondo blanco. **Siempre con `color="gray"`.** | propuesta |
|
|
37
|
+
|
|
38
|
+
### `color` — mismo significado que el badge
|
|
39
|
+
|
|
40
|
+
| valor | estado de la paleta | cuándo | fuente |
|
|
41
|
+
|---|---|---|---|
|
|
42
|
+
| `gray` (default) | faded | Neutro. El único color para `stroke`. | propuesta |
|
|
43
|
+
| `blue` | information | Información. | propuesta |
|
|
44
|
+
| `orange` | warning | Pendiente, pide atención. | propuesta |
|
|
45
|
+
| `red` | error | Error, bloqueado, rechazado. | propuesta |
|
|
46
|
+
| `green` | success | Bien, listo, aprobado. | propuesta |
|
|
47
|
+
| `yellow` | away | En pausa. | propuesta |
|
|
48
|
+
| `purple` | feature | Novedad. | propuesta |
|
|
49
|
+
| `pink` | highlighted | Destacado. | propuesta |
|
|
50
|
+
| `teal` | verified | Verificado. | propuesta |
|
|
51
|
+
|
|
52
|
+
### `size`
|
|
53
|
+
|
|
54
|
+
| valor | ícono | cuándo | fuente |
|
|
55
|
+
|---|---|---|---|
|
|
56
|
+
| `32` | 20 | Filas densas. | propuesta |
|
|
57
|
+
| `40` (default) | 20 | Filas de una lista. | propuesta |
|
|
58
|
+
| `48` | 24 | Cards. | propuesta |
|
|
59
|
+
| `56` | 28 | Cabecera de un modal. | propuesta |
|
|
60
|
+
| `64` | 32 | El resultado de un modal: cuenta bloqueada, calificación enviada. | propuesta |
|
|
61
|
+
|
|
62
|
+
**Usos de hoy que romperían la propuesta: 7 círculos con ícono hechos a mano.** Dos son un
|
|
63
|
+
`sui-key-icon` `lighter` exacto: `components/cuenta-bloqueada/cuenta-bloqueada.html:4` (64 px,
|
|
64
|
+
fondo `error-lighter`) y `components/driver-rate-modal/driver-rate-modal.html:17` (64 px,
|
|
65
|
+
`success-lighter`). Los otros cinco se acercan (40–48 px, fondos neutros o `primary-alpha-10`):
|
|
66
|
+
`pages/envios/envios.html:27`, `pages/customer/mandadito/mandadito.html:255`,
|
|
67
|
+
`pages/customer/confirmation/confirmation.html:29`,
|
|
68
|
+
`pages/customer/order-tracking/order-tracking.html:487`, `pages/products/add-product/add-product.html:74`.
|
|
69
|
+
Se encontraron buscando reglas `*icon*` con `border-radius: 50%`, fondo y 32–64 px: puede haber más.
|
|
70
|
+
|
|
71
|
+
## Tamaño en mobile y en web
|
|
72
|
+
|
|
73
|
+
En mobile se lee y se toca con el dedo, así que va más grande; en web, más chico. En las
|
|
74
|
+
pantallas que se usan en los dos (panel del local, super admin) se elige con el servicio de
|
|
75
|
+
breakpoints de la app (`bp`, en `services/breakpoints.service.ts`); en las que solo existen en
|
|
76
|
+
el celular (cliente, repartidor) va directo el valor de mobile. Todo es **propuesta**.
|
|
77
|
+
|
|
78
|
+
| uso | mobile | web |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| inicio de una fila | `40` | `32` |
|
|
81
|
+
| card | `48` | `40` |
|
|
82
|
+
| resultado de un modal | `64` | `56` |
|
|
83
|
+
|
|
84
|
+
```html
|
|
85
|
+
<sui-key-icon name="lock-line" styleVariant="lighter" color="red" [size]="bp.isMobile() ? 64 : 56" />
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## «No usar»: por qué no hoy y cuándo sí
|
|
89
|
+
|
|
90
|
+
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
91
|
+
|---|---|---|
|
|
92
|
+
| `stroke` con un color que no sea `gray` | el color solo tiñe el ícono y se confunde con `lighter` | ninguno: si el color significa algo, es `lighter` |
|
|
93
|
+
|
|
94
|
+
## API
|
|
95
|
+
|
|
96
|
+
<!-- api:inicio -->
|
|
97
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
98
|
+
|
|
99
|
+
| input | tipo | default |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| `name` | `string` | — (requerido) |
|
|
102
|
+
| `styleVariant` | `'stroke' \| 'lighter'` | `'stroke'` |
|
|
103
|
+
| `color` | `'gray' \| 'blue' \| 'orange' \| 'red' \| 'green' \| 'yellow' \| 'purple' \| 'pink' \| 'teal'` | `'gray'` |
|
|
104
|
+
| `size` | `32 \| 40 \| 48 \| 56 \| 64` | `40` |
|
|
105
|
+
|
|
106
|
+
Outputs: ninguno.
|
|
107
|
+
<!-- api:fin -->
|
|
108
|
+
|
|
109
|
+
## Trampas
|
|
110
|
+
|
|
111
|
+
- **El estilo se llama `styleVariant`**, no `variant` ni `style` (choca con el `style` del HTML).
|
|
112
|
+
- **`size` es un número**: `[size]="48"`. Con `size="48"` (string) no compila.
|
|
113
|
+
- **El ícono no baja de 20 px**: en `32` sigue en 20 (es el Figma), en el resto es la mitad.
|
|
114
|
+
- **El default es `stroke` `gray`**: si quieres el círculo de color, pide `lighter` explícito.
|
|
115
|
+
- `name` va sin `ri-`, como en `sui-icon`.
|
|
116
|
+
|
|
117
|
+
## Ejemplo
|
|
118
|
+
|
|
119
|
+
```html
|
|
120
|
+
<!-- Resultado de un modal -->
|
|
121
|
+
<sui-key-icon name="lock-line" styleVariant="lighter" color="red" [size]="64" />
|
|
122
|
+
|
|
123
|
+
<!-- Inicio de una fila -->
|
|
124
|
+
<sui-key-icon name="store-2-line" />
|
|
125
|
+
```
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-link-button
|
|
3
|
+
selector: sui-link-button
|
|
4
|
+
resumen: Acción que se lee como texto, sin caja
|
|
5
|
+
alternativas: [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)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-link-button
|
|
9
|
+
|
|
10
|
+
Story: [Atoms/Button/Link Button](https://sui-design-system.web.app/?path=/docs/atoms-button-link-button--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** para una acción que se lee como texto: «Ver todas» en la cabecera de una sección,
|
|
15
|
+
«Omitir» o «Ahora no», «Términos y condiciones» dentro de un párrafo, «Cambiar» junto a un dato.
|
|
16
|
+
Es el reemplazo del `sui-button` `ghost` `primary`.
|
|
17
|
+
|
|
18
|
+
**No lo uses** para:
|
|
19
|
+
|
|
20
|
+
- **La acción principal** de un grupo: `sui-button` `filled`.
|
|
21
|
+
- **Abrir una acción destructiva grande** (cancelar un pedido, rechazarlo, anular un gasto):
|
|
22
|
+
`sui-button` `stroke` `error`. El link `error` es para quitar algo menor.
|
|
23
|
+
- **Las acciones de un alert o un toast**: se pasan en `actions[]` y el componente ya las pinta
|
|
24
|
+
como link `modifiable`. No proyectes un link-button a mano dentro.
|
|
25
|
+
- **Un ícono solo**: `sui-compact-button`.
|
|
26
|
+
|
|
27
|
+
## Qué variante usar
|
|
28
|
+
|
|
29
|
+
> **La guía del DS no dice cuándo usar cada variante.** Su página muestra los cinco colores,
|
|
30
|
+
> los dos tamaños, el subrayado, los íconos y el deshabilitado, sin do/don't. Las reglas de
|
|
31
|
+
> abajo son **canon (aprobado por el dueño, 03-10-2026)** salvo donde dice otra fuente.
|
|
32
|
+
>
|
|
33
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: 22 link-buttons en 17 archivos, sin
|
|
34
|
+
> contar prototipos ni vitrinas (`master-preview`, `master-prototipos`, `mockup-sheets-*`,
|
|
35
|
+
> `dx/*`, `master-rutina`, `master-medico`, `dev-index`) ni la copia local del componente en
|
|
36
|
+
> `components/sui/sui-link-button/`. Variantes: 10 `gray` (1 por default), 7 `primary`,
|
|
37
|
+
> 3 `error`, 2 `modifiable`, 0 `black`. Tamaños: 16 `medium`, 6 `small`. 8 con `leftIcon`,
|
|
38
|
+
> 4 con `rightIcon`, 4 con `href`, 2 con `underline`, 2 con `disabled`.
|
|
39
|
+
|
|
40
|
+
### Lo que sí dice la guía del DS
|
|
41
|
+
|
|
42
|
+
- **Para qué es**: botones que se integran con el texto que los rodea.
|
|
43
|
+
- **Defaults**: `gray` + `medium`. Igual que SUI.
|
|
44
|
+
- **`modifiable` no tiene color propio**: hereda el del contenedor, para que lo pinte quien lo usa.
|
|
45
|
+
- **Subrayado**: aparece al pasar el mouse; con `underline` queda fijo.
|
|
46
|
+
- **Deshabilitado**: el texto pasa a `text-disabled-300` y se va el subrayado.
|
|
47
|
+
- **Tamaños**: `large` (24 px, texto `label-md`, ícono 20; extensión SUI para mobile), `medium` (20 px, `label-sm`, ícono 20) y `small` (16 px, `label-xs`, ícono 16).
|
|
48
|
+
|
|
49
|
+
### `variant`
|
|
50
|
+
|
|
51
|
+
| variant | cuándo | ejemplo real de la app | fuente |
|
|
52
|
+
|---|---|---|---|
|
|
53
|
+
| `primary` | El link principal de una sección: «Ver todas», «Cambiar horario», «Descargar la app». Reemplaza al `sui-button` `ghost` `primary`. | `pages/customer/checkout/checkout.html:165` («Cambiar horario») · `pages/public/landing-business/landing-business.html:208` («Descargar la app») | canon (aprobado por el dueño, 03-10-2026) |
|
|
54
|
+
| `gray` (default) | Salida de baja jerarquía: «Omitir», «Ahora no», «Cerrar sesión», «Más información». | `pages/account-suspended/account-suspended.html:70` («Cerrar sesión») · `pages/super-admin/master-approvals/master-approvals.html:90` («Más información») | canon (aprobado por el dueño, 03-10-2026) |
|
|
55
|
+
| `black` | Un link dentro de un texto, con `underline`: «Términos y condiciones», «Ver política». | (sin uso hoy) | canon (aprobado por el dueño, 03-10-2026) |
|
|
56
|
+
| `error` | Quitar algo menor, en texto: «Quitar», «Borrar foto». Nunca para abrir una destructiva grande. | (sin uso correcto hoy) | canon (aprobado por el dueño, 03-10-2026) |
|
|
57
|
+
| `modifiable` | Toma el color del contenedor: las acciones del alert, del banner y del toast. | `components/sui/sui-toast/sui-toast-outlet.html:36` (acción del toast) · `components/subscription-banner/subscription-banner.html:10` («Renovar plan») | hereda el color: según la guía del DS · dónde va: canon (aprobado por el dueño, 03-10-2026) |
|
|
58
|
+
|
|
59
|
+
**Usos de hoy que rompen la regla:**
|
|
60
|
+
|
|
61
|
+
- **3 `error` que abren una destructiva grande → `sui-button` `stroke` `error`:**
|
|
62
|
+
`pages/super-admin/master-orders/master-orders.html:425` («Cancelar pedido»),
|
|
63
|
+
`pages/orders/orders.html:232` («Rechazar pedido»), `pages/central/central-gastos/central-gastos.html:101`
|
|
64
|
+
(«Anular gasto»).
|
|
65
|
+
- A discutir: `pages/super-admin/master-orders/master-orders.html:430` («Liberar» en `gray`): es una
|
|
66
|
+
acción de operación, no una salida de baja jerarquía.
|
|
67
|
+
|
|
68
|
+
### `size`
|
|
69
|
+
|
|
70
|
+
| size | cuándo | fuente |
|
|
71
|
+
|---|---|---|
|
|
72
|
+
| `large` (24 px, texto 16, ícono 20) | Mobile, donde se lee y se toca con el dedo: el link suelto de una pantalla de teléfono. | propuesta: el tamaño es extensión SUI aprobada (03-10-2026); el «cuándo» falta aprobarlo |
|
|
73
|
+
| `medium` (20 px, default) | Lo normal: cabeceras de sección, párrafos, acciones sueltas. | default según la guía del DS; el «cuándo» es canon (aprobado por el dueño, 03-10-2026) |
|
|
74
|
+
| `small` (16 px) | Junto a un dato en una fila: «Cambiar», «Mi billetera», «Cambiar mi calificación». | canon (aprobado por el dueño, 03-10-2026) |
|
|
75
|
+
|
|
76
|
+
### `underline`
|
|
77
|
+
|
|
78
|
+
| underline | cuándo | fuente |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| `false` (default) | Lo normal: la línea aparece al pasar el mouse o con foco. | según la guía del DS |
|
|
81
|
+
| `true` | Solo la **primera** acción de un alert, banner o toast, o un link dentro de un párrafo (`black`). | solo la primera subrayada: según la guía del DS (alert) · el resto: canon (aprobado por el dueño, 03-10-2026) |
|
|
82
|
+
|
|
83
|
+
### Íconos
|
|
84
|
+
|
|
85
|
+
| prop | cuándo | fuente |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| `rightIcon` (`arrow-right-s-line`) | Cuando el link lleva a otra pantalla: «Ver la carta», «Mi billetera». | canon (aprobado por el dueño, 03-10-2026) |
|
|
88
|
+
| `leftIcon` | Cuando el ícono dice la acción: descargar, editar, agregar, ver. «Descargar la app», «Agregar nota para el conductor». | propuesta |
|
|
89
|
+
| los dos a la vez | No: con dos íconos el link deja de leerse como texto. | propuesta |
|
|
90
|
+
|
|
91
|
+
Los íconos son nombres RemixIcon sin el prefijo `ri-`. Miden 20 px en `large` y `medium`, y 16 px en `small`.
|
|
92
|
+
|
|
93
|
+
### `disabled`
|
|
94
|
+
|
|
95
|
+
| disabled | cuándo | fuente |
|
|
96
|
+
|---|---|---|
|
|
97
|
+
| `true` | La acción existe pero ahora no se puede: mientras se guarda, mientras se procesa otra acción. Mejor que esconderla si la persona la espera en ese lugar. | cómo se ve: según la guía del DS · cuándo: propuesta |
|
|
98
|
+
|
|
99
|
+
Ejemplos: `components/add-product-modal/add-product-modal.html:330` («Vista previa» mientras guarda),
|
|
100
|
+
`pages/orders/orders.html:232`.
|
|
101
|
+
|
|
102
|
+
### `href`, `target`, `rel`, `type`, `ariaLabel`
|
|
103
|
+
|
|
104
|
+
| prop | cuándo | fuente |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| `href` | Navegar, sin otra acción: el componente pinta un `<a>` real. Las rutas internas (`/cliente/…`) navegan con el Router, sin recargar. | propuesta |
|
|
107
|
+
| `target="_blank"` | Solo para destinos externos: la descarga, un documento, WhatsApp. **Pon también `rel="noopener noreferrer"`**: aquí el default de `rel` es `null`. | propuesta |
|
|
108
|
+
| `type="submit"` | Solo dentro de un `<form>`. El resto, `button` (default). | propuesta (mismo criterio que `sui-button`) |
|
|
109
|
+
| `ariaLabel` | Cuando el texto visible no basta fuera de contexto: «Descargar la app» → «Descargar la app de Master Pedidos». | propuesta |
|
|
110
|
+
|
|
111
|
+
## Tamaño en mobile y en web
|
|
112
|
+
|
|
113
|
+
En mobile se toca con el dedo: el área táctil tiene que medir **44 px o más**. En web, con mouse,
|
|
114
|
+
va un tamaño más chico. La app ya lo resuelve con `BreakpointsService`
|
|
115
|
+
(`src/app/services/breakpoints.service.ts`, mobile = hasta 767 px):
|
|
116
|
+
`[size]="bp.isMobile() ? 'large' : 'small'"`, 27 usos hoy en `master-pedidos` (16 `large`/`small`,
|
|
117
|
+
9 `large`/`medium`, 2 `medium`/`xsmall`). Regla del dueño, 03-10-2026.
|
|
118
|
+
|
|
119
|
+
| size | alto | texto | ícono |
|
|
120
|
+
|---|---|---|---|
|
|
121
|
+
| `large` | 24 px | `label-md` 16/24 | 20 |
|
|
122
|
+
| `medium` (default) | 20 px | `label-sm` 14/20 | 20 |
|
|
123
|
+
| `small` | 16 px | `label-xs` 12/16 | 16 |
|
|
124
|
+
|
|
125
|
+
`large` es extensión SUI (03-10-2026); Figma trae `medium` y `small`. El ícono de `large` es 20
|
|
126
|
+
(como el `sui-button` large), no 24: con 24 el chevron pesa más que el texto.
|
|
127
|
+
|
|
128
|
+
| uso | mobile | web | fuente |
|
|
129
|
+
|---|---|---|---|
|
|
130
|
+
| link suelto (cabecera de sección, «Omitir», «Ver todas») | `large` (24) | `medium` (20) | web: canon (aprobado por el dueño, 03-10-2026) · mobile `large`: propuesta: el tamaño es extensión SUI aprobada (03-10-2026); el «cuándo» falta aprobarlo (antes era `medium`) |
|
|
131
|
+
| junto a un dato en una fila («Cambiar», «Mi billetera») | `medium` (20) | `small` (16) | canon (aprobado por el dueño, 03-10-2026) |
|
|
132
|
+
| dentro de un párrafo | el del texto que lo rodea | el del texto que lo rodea | propuesta |
|
|
133
|
+
|
|
134
|
+
```html
|
|
135
|
+
<sui-link-button variant="primary" [size]="bp.isMobile() ? 'large' : 'medium'" rightIcon="arrow-right-s-line">Ver todas</sui-link-button>
|
|
136
|
+
<sui-link-button variant="gray" [size]="bp.isMobile() ? 'medium' : 'small'" rightIcon="arrow-right-s-line">Mi billetera</sui-link-button>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**Ningún tamaño llega a 44 px**: el link mide 16–24 de alto y no tiene padding. En mobile el área
|
|
140
|
+
táctil la pone el contenedor: la fila o el bloque donde vive tiene que medir 44 px o más de alto, o
|
|
141
|
+
dejar aire alrededor del link. `small` (16) no va en mobile: hoy hay 6 links `small` fijos
|
|
142
|
+
(`pages/driver/driver-profile/driver-profile.html:258`, `:264`, `pages/driver/driver-dashboard/driver-dashboard.html:1089`,
|
|
143
|
+
`pages/mi-negocio/mi-negocio.html:472`, `pages/customer/order-history/order-history.html:413`,
|
|
144
|
+
`components/add-product-modal/add-product-modal.html:330`); los 4 de repartidor y cliente se usan
|
|
145
|
+
sí o sí en el teléfono → `[size]="bp.isMobile() ? 'medium' : 'small'"`.
|
|
146
|
+
|
|
147
|
+
## «No usar»: por qué no hoy y cuándo sí
|
|
148
|
+
|
|
149
|
+
Ningún valor del link-button está en «no usar»: los cinco colores, los tres tamaños y el
|
|
150
|
+
subrayado tienen un caso. `black` y `error` hoy no tienen un uso correcto en la app, pero la regla
|
|
151
|
+
de arriba dice dónde van.
|
|
152
|
+
|
|
153
|
+
## API
|
|
154
|
+
|
|
155
|
+
<!-- api:inicio -->
|
|
156
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
157
|
+
|
|
158
|
+
| input | tipo | default |
|
|
159
|
+
|---|---|---|
|
|
160
|
+
| `variant` | `'gray' \| 'black' \| 'primary' \| 'error' \| 'modifiable'` | `'gray'` |
|
|
161
|
+
| `size` | `'large' \| 'medium' \| 'small'` | `'medium'` |
|
|
162
|
+
| `underline` | `boolean` | `false` |
|
|
163
|
+
| `disabled` | `boolean` | `false` |
|
|
164
|
+
| `leftIcon` | `string \| null` | `null` |
|
|
165
|
+
| `rightIcon` | `string \| null` | `null` |
|
|
166
|
+
| `href` | `string \| null` | `null` |
|
|
167
|
+
| `target` | `string \| null` | `null` |
|
|
168
|
+
| `rel` | `string \| null` | `null` |
|
|
169
|
+
| `type` | `'button' \| 'submit' \| 'reset'` | `'button'` |
|
|
170
|
+
| `ariaLabel` | `string \| null` | `null` |
|
|
171
|
+
|
|
172
|
+
| output | payload |
|
|
173
|
+
|---|---|
|
|
174
|
+
| `clicked` | `MouseEvent` |
|
|
175
|
+
<!-- api:fin -->
|
|
176
|
+
|
|
177
|
+
Slots: `<ng-content>` (el texto).
|
|
178
|
+
|
|
179
|
+
## Trampas
|
|
180
|
+
|
|
181
|
+
- **El output es `(clicked)`**, no `(click)` como en `sui-button`. `(click)` sobre el host igual
|
|
182
|
+
funciona porque el clic burbujea, pero hoy hay 6 usos así (`components/subscription-banner/subscription-banner.html:10`,
|
|
183
|
+
`pages/super-admin/master-approvals/master-approvals.html:90`, `pages/central/central-gastos/central-gastos.html:101`,
|
|
184
|
+
`pages/account-suspended/account-suspended.html:66` y `:70`, `pages/customer/viaje/viaje.html:215`).
|
|
185
|
+
Usa `(clicked)`, que ya respeta `disabled`.
|
|
186
|
+
- **`rel` arranca en `null`**, a diferencia de compact, fancy y social, que traen
|
|
187
|
+
`'noopener noreferrer'`. Con `target="_blank"` hay que ponerlo a mano.
|
|
188
|
+
- **`disabled` le gana a `href`**: deshabilitado, el componente pinta un `<button>` y el link desaparece.
|
|
189
|
+
- `modifiable` sin un `color` en el contenedor hereda el color del texto que lo rodea: sobre una
|
|
190
|
+
superficie blanca sale gris oscuro, no naranja.
|
|
191
|
+
- En hover, `primary` y `error` se oscurecen (`primary-dark`, `red-700`); con foco mantienen el
|
|
192
|
+
color base y solo se subrayan.
|
|
193
|
+
- El subrayado va solo bajo el texto, no bajo los íconos.
|
|
194
|
+
- Es `display: inline-flex` alineado a la base del texto: fluye dentro de un párrafo como un link
|
|
195
|
+
normal. Para posicionarlo suelto, lo ubica quien lo usa.
|
|
196
|
+
- En `master-pedidos` hay una **copia local** en `src/app/components/sui/sui-link-button/` (la usa el
|
|
197
|
+
toast local). No es la del paquete: un arreglo en el DS no le llega.
|
|
198
|
+
- Ya trae el arreglo de iOS para el `:active` pegado: no lo agregues.
|
|
199
|
+
|
|
200
|
+
## Ejemplo
|
|
201
|
+
|
|
202
|
+
```html
|
|
203
|
+
<!-- Link principal de una sección -->
|
|
204
|
+
<sui-link-button variant="primary" (clicked)="verTodas()">Ver todas</sui-link-button>
|
|
205
|
+
|
|
206
|
+
<!-- Junto a un dato, lleva a otra pantalla -->
|
|
207
|
+
<sui-link-button variant="gray" size="small" rightIcon="arrow-right-s-line" (clicked)="irABilletera()">
|
|
208
|
+
Mi billetera
|
|
209
|
+
</sui-link-button>
|
|
210
|
+
|
|
211
|
+
<!-- Link dentro de un párrafo -->
|
|
212
|
+
<p>Al continuar aceptas la
|
|
213
|
+
<sui-link-button variant="black" [underline]="true" href="/privacidad">Política de privacidad</sui-link-button>.
|
|
214
|
+
</p>
|
|
215
|
+
|
|
216
|
+
<!-- Externo -->
|
|
217
|
+
<sui-link-button variant="primary" leftIcon="download-2-line" href="https://master-pedidos.com/descargar"
|
|
218
|
+
target="_blank" rel="noopener noreferrer" ariaLabel="Descargar la app de Master Pedidos">
|
|
219
|
+
Descargar la app
|
|
220
|
+
</sui-link-button>
|
|
221
|
+
```
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sui-logo
|
|
3
|
+
selector: sui-logo
|
|
4
|
+
resumen: El logo de Master Pedidos (la M y la palabra), dibujado en SVG y coloreable
|
|
5
|
+
alternativas: [sui-brand-logo (logos de OTRAS marcas: WhatsApp, Google, Apple…), sui-avatar (el logo de un local, que es una foto)]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# sui-logo
|
|
9
|
+
|
|
10
|
+
Story: [Atoms/Logo](https://sui-design-system.web.app/?path=/docs/atoms-logo--docs)
|
|
11
|
+
|
|
12
|
+
## Cuándo usarlo / cuándo no
|
|
13
|
+
|
|
14
|
+
**Úsalo** siempre que aparezca la marca Master Pedidos: barras, login, «Acerca de», la pantalla
|
|
15
|
+
de actualización, las páginas públicas.
|
|
16
|
+
|
|
17
|
+
**No lo uses** para:
|
|
18
|
+
|
|
19
|
+
- El logo de un local: es una foto, va en `sui-avatar`.
|
|
20
|
+
- Logos de terceros: `sui-brand-logo`.
|
|
21
|
+
- El splash nativo (`index.html`): se pinta antes de que arranque Angular, así que es una copia a
|
|
22
|
+
mano en SVG. Si se cambia el logo, hay que tocar las dos.
|
|
23
|
+
|
|
24
|
+
**Nunca un PNG o un SVG suelto del logo**: con `sui-logo` el color sigue al tema y el dibujo es
|
|
25
|
+
uno solo.
|
|
26
|
+
|
|
27
|
+
## Qué variante usar
|
|
28
|
+
|
|
29
|
+
> **La guía del DS no tiene este componente**: es propio de SUI, porque es la marca de la app.
|
|
30
|
+
> Todo lo de abajo es **propuesta, falta aprobación**; los ejemplos salen de cómo se usa hoy.
|
|
31
|
+
>
|
|
32
|
+
> Uso medido el 03-10-2026 en `master-pedidos/src/app`: 10 logos en 8 archivos, sin contar
|
|
33
|
+
> prototipos ni vitrinas. 4 `horizontal`, 3 `stacked`, 3 `markOnly`; 7 con `[height]` y 3 con `size`.
|
|
34
|
+
|
|
35
|
+
### `orientation` y `markOnly`
|
|
36
|
+
|
|
37
|
+
| valor | cuándo | ejemplo real de la app | fuente |
|
|
38
|
+
|---|---|---|---|
|
|
39
|
+
| `horizontal` (default) | Barras y cabeceras: la M a la izquierda y la palabra en dos líneas. | `layouts/public/public-layout.html:4` · `pages/public/pedido-en-vivo/pedido-en-vivo.html:72` · `pages/role-selector/role-selector.html:10` | propuesta |
|
|
40
|
+
| `stacked` | Pantallas de marca centradas: la M arriba y la palabra abajo. | `pages/empresa/about/about.html:12` · `components/ota-update/ota-update.html:118` | propuesta |
|
|
41
|
+
| `[markOnly]="true"` | Donde la palabra no entra o ya está escrita al lado: nav mobile, login. | `layouts/public/public-layout.html:6` · `pages/auth/login/login.html:3` | propuesta |
|
|
42
|
+
|
|
43
|
+
No existe la versión de una sola línea («Master Pedidos» en un renglón): es otro dibujo.
|
|
44
|
+
|
|
45
|
+
### `size` y `height`
|
|
46
|
+
|
|
47
|
+
`size` fija el **alto**; el ancho sale solo.
|
|
48
|
+
|
|
49
|
+
| valor | alto | cuándo | fuente |
|
|
50
|
+
|---|---|---|---|
|
|
51
|
+
| `xs` / `sm` | 16 / 20 | No usar hoy: la palabra no se lee (con `markOnly` sí sirve). | propuesta |
|
|
52
|
+
| `md` (default) | 24 | Barra de una página pública. | propuesta |
|
|
53
|
+
| `lg` | 32 | Nav pública, login. | propuesta |
|
|
54
|
+
| `xl` | 40 | Pantalla de actualización. | propuesta |
|
|
55
|
+
| `2xl` | 48 | Selector de rol. | propuesta |
|
|
56
|
+
| `height` | libre | **Solo para más de 48 px**: el apilado de 120 en «Acerca de» y en la actualización. | propuesta |
|
|
57
|
+
|
|
58
|
+
**Usos de hoy que romperían la propuesta: 4 `[height]` que van a la escala.**
|
|
59
|
+
`components/ota-update/ota-update.html:17` (`40` → `size="xl"`),
|
|
60
|
+
`pages/public/pedido-en-vivo/pedido-en-vivo.html:72` (`22` → `md`),
|
|
61
|
+
`layouts/public/public-layout.html:6` (`28` → `lg`), `pages/customer/about/about.html:19` (`44` → `xl` o `2xl`).
|
|
62
|
+
|
|
63
|
+
### `markColor` y `textColor`
|
|
64
|
+
|
|
65
|
+
| combinación | cuándo | fuente |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| de marca (default): M `--sui-primary-base` + palabra `--sui-text-strong-950` | Sobre fondo claro. **No hace falta pasar los colores**: ya son el default. | propuesta |
|
|
68
|
+
| monocromo: todo `--sui-text-strong-950` | Login y nav pública, donde el naranja ya está en el botón principal. | propuesta |
|
|
69
|
+
| blanco: todo `--sui-static-white` | Sobre naranja o sobre foto. `static-white` no cambia con el tema. | propuesta |
|
|
70
|
+
| cualquier otro color | No usar. | propuesta |
|
|
71
|
+
|
|
72
|
+
**Usos de hoy redundantes: 6** pasan a mano los colores que ya son el default (no rompen nada,
|
|
73
|
+
sobran): `components/ota-update/ota-update.html:17`, `pages/role-selector/role-selector.html:10`,
|
|
74
|
+
`pages/empresa/about/about.html:12`.
|
|
75
|
+
|
|
76
|
+
**Logo que no pasa por el componente: 1.** `components/landing-footer/landing-footer.html:7` usa
|
|
77
|
+
`assets/landing/logo-blanco.png` → `sui-logo` con los dos colores en `--sui-static-white`.
|
|
78
|
+
|
|
79
|
+
### `decorative` y `ariaLabel`
|
|
80
|
+
|
|
81
|
+
| input | cuándo | fuente |
|
|
82
|
+
|---|---|---|
|
|
83
|
+
| `[decorative]="true"` | Cuando al lado ya está escrito «Master Pedidos» (el título de «Acerca de»): así el lector de pantalla no lo dice dos veces. | propuesta |
|
|
84
|
+
| `ariaLabel` | No tocar: ya dice «Master Pedidos». | propuesta |
|
|
85
|
+
|
|
86
|
+
## Tamaño en mobile y en web
|
|
87
|
+
|
|
88
|
+
En mobile se lee y se toca con el dedo, así que va más grande; en web, más chico. En las
|
|
89
|
+
pantallas que se usan en los dos (panel del local, super admin) se elige con el servicio de
|
|
90
|
+
breakpoints de la app (`bp`, en `services/breakpoints.service.ts`); en las que solo existen en
|
|
91
|
+
el celular (cliente, repartidor) va directo el valor de mobile. Todo es **propuesta**.
|
|
92
|
+
|
|
93
|
+
| uso | mobile | web |
|
|
94
|
+
|---|---|---|
|
|
95
|
+
| barra | `[markOnly]="true"` `size="lg"` | `horizontal` `size="lg"` |
|
|
96
|
+
| pantalla de entrada (selector de rol, login) | `2xl` (48) | `xl` (40) |
|
|
97
|
+
| pantalla de marca («Acerca de», actualización) | `stacked` `[height]="120"` | igual |
|
|
98
|
+
|
|
99
|
+
```html
|
|
100
|
+
<sui-logo size="lg" [markOnly]="bp.isMobile()" />
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
En la barra no cambia el alto, cambia la forma: en mobile no entra la palabra. Es lo que ya hace
|
|
104
|
+
`layouts/public/public-layout.html:4`–`:6`, con dos logos y CSS.
|
|
105
|
+
|
|
106
|
+
## «No usar»: por qué no hoy y cuándo sí
|
|
107
|
+
|
|
108
|
+
| qué | por qué no hoy | cuándo sí, en un flujo nuevo |
|
|
109
|
+
|---|---|---|
|
|
110
|
+
| `size` `xs`, `sm` con palabra | la palabra no se lee | con `markOnly`: el ícono chico en una firma o un pie de página |
|
|
111
|
+
| un color fuera de los tres | la marca es naranja, negra o blanca | ninguno previsto |
|
|
112
|
+
|
|
113
|
+
## API
|
|
114
|
+
|
|
115
|
+
<!-- api:inicio -->
|
|
116
|
+
<!-- generada: no editar a mano — `npm run docs` -->
|
|
117
|
+
|
|
118
|
+
| input | tipo | default |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| `orientation` | `'horizontal' \| 'stacked'` | `'horizontal'` |
|
|
121
|
+
| `markOnly` | `boolean` | `false` |
|
|
122
|
+
| `size` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl' \| '2xl'` | `'md'` |
|
|
123
|
+
| `height` | `number \| string \| null` | `null` |
|
|
124
|
+
| `markColor` | `string` | `'var(--sui-primary-base)'` |
|
|
125
|
+
| `textColor` | `string` | `'var(--sui-text-strong-950)'` |
|
|
126
|
+
| `decorative` | `boolean` | `false` |
|
|
127
|
+
| `ariaLabel` | `string` | `'Master Pedidos'` |
|
|
128
|
+
|
|
129
|
+
Outputs: ninguno.
|
|
130
|
+
<!-- api:fin -->
|
|
131
|
+
|
|
132
|
+
## Trampas
|
|
133
|
+
|
|
134
|
+
- **`height` gana sobre `size`.** Un número son px; un string es cualquier valor CSS (`'60%'`).
|
|
135
|
+
- **Los colores van por custom property**: `markColor="var(--sui-primary-base)"` funciona; un
|
|
136
|
+
`fill` puesto desde afuera, no.
|
|
137
|
+
- **Con `markOnly`, `orientation` no hace nada.**
|
|
138
|
+
- **No trae padding**: el `viewBox` es justo el dibujo. El aire lo pone quien lo usa.
|
|
139
|
+
- **No es `sui-brand-logo`**: ese sirve logos de otras marcas como imágenes que no se pueden teñir.
|
|
140
|
+
|
|
141
|
+
## Ejemplo
|
|
142
|
+
|
|
143
|
+
```html
|
|
144
|
+
<!-- Barra de una página pública -->
|
|
145
|
+
<sui-logo size="md" />
|
|
146
|
+
|
|
147
|
+
<!-- «Acerca de»: el título ya dice el nombre -->
|
|
148
|
+
<sui-logo orientation="stacked" [height]="120" [decorative]="true" />
|
|
149
|
+
|
|
150
|
+
<!-- Sobre el fondo naranja -->
|
|
151
|
+
<sui-logo [markOnly]="true" size="2xl" markColor="var(--sui-static-white)" />
|
|
152
|
+
```
|