@lit-roa/custom-header 0.1.4 → 0.2.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/README.md +61 -5
- package/dist/custom-header.d.ts +102 -2
- package/dist/custom-header.d.ts.map +1 -1
- package/dist/custom-header.js +744 -35
- package/dist/custom-header.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/package.json +8 -4
- package/src/custom-header.ts +743 -34
- package/src/index.ts +1 -0
package/README.md
CHANGED
|
@@ -1,19 +1,75 @@
|
|
|
1
1
|
# @lit-roa/custom-header
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Encabezado de la tienda: logo, ligas con submenús o mega menú, buscador,
|
|
4
|
+
cuenta y carrito. En pantallas angostas cambia a menú lateral, y puede
|
|
5
|
+
quedarse pegado arriba y hacerse más bajo al hacer scroll.
|
|
6
|
+
|
|
7
|
+
Las ligas, el logo, la cuenta y el carrito no navegan solos: emiten eventos
|
|
8
|
+
y el sitio decide qué hacer (ctrl/cmd + clic sí abre la liga en otra pestaña).
|
|
4
9
|
|
|
5
10
|
```bash
|
|
6
11
|
npm install @lit-roa/custom-header
|
|
7
12
|
```
|
|
8
13
|
|
|
9
|
-
```
|
|
10
|
-
|
|
14
|
+
```html
|
|
15
|
+
<lr-custom-header nombre="Café Roa" logo="/logo.svg" piezas="3" pegajoso ocultar-al-bajar>
|
|
16
|
+
<lr-barra-anuncio slot="anuncio" texto="Envío gratis desde $999"></lr-barra-anuncio>
|
|
17
|
+
</lr-custom-header>
|
|
11
18
|
```
|
|
12
19
|
|
|
13
|
-
```
|
|
14
|
-
|
|
20
|
+
```ts
|
|
21
|
+
header.ligas = [
|
|
22
|
+
{ texto: 'Inicio', href: '/' },
|
|
23
|
+
{
|
|
24
|
+
texto: 'Café',
|
|
25
|
+
href: '/cafe',
|
|
26
|
+
columnas: [
|
|
27
|
+
{ titulo: 'Por tipo', ligas: [{ texto: 'Grano entero', href: '/cafe/grano' }] },
|
|
28
|
+
{ titulo: 'Por origen', ligas: [{ texto: 'Chiapas', href: '/cafe/chiapas' }] },
|
|
29
|
+
],
|
|
30
|
+
promo: { titulo: 'Nueva cosecha', texto: 'Tueste medio', imagen: '/img/promo.jpg', href: '/cafe/chiapas' },
|
|
31
|
+
},
|
|
32
|
+
{ texto: 'Accesorios', hijos: [{ texto: 'Molinos', href: '/accesorios/molinos' }] },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
header.addEventListener('navegar', (e) => router.navigateByUrl(e.detail.liga.href));
|
|
36
|
+
header.addEventListener('abrir-carrito', () => abrirCarrito());
|
|
37
|
+
header.addEventListener('abrir-cuenta', () => router.navigateByUrl('/cuenta'));
|
|
38
|
+
header.addEventListener('buscar-texto', async (e) => (header.sugerencias = await buscar(e.detail.texto)));
|
|
15
39
|
```
|
|
16
40
|
|
|
41
|
+
Cada liga puede tener `hijos` (submenú sencillo) o `columnas` (mega menú, con
|
|
42
|
+
`promo` opcional). En celular ambos se muestran como acordeón.
|
|
43
|
+
|
|
44
|
+
| Atributo | Tipo | Por omisión |
|
|
45
|
+
| --- | --- | --- |
|
|
46
|
+
| `logo` · `nombre` | `string` | `''` |
|
|
47
|
+
| `href-inicio` | `string` | `'/'` |
|
|
48
|
+
| `ligas` | `LigaHeader[]` (JSON) | `[]` |
|
|
49
|
+
| `piezas` | `number` (globito del carrito) | `0` |
|
|
50
|
+
| `usuario` | `string` (vacío = "Entrar") | `''` |
|
|
51
|
+
| `texto-entrar` · `texto-cuenta` | `string` | `'Entrar'` · `'Mi cuenta y pedidos'` |
|
|
52
|
+
| `sin-buscador` | `boolean` | `false` |
|
|
53
|
+
| `placeholder-buscador` | `string` | `'Buscar en la tienda'` |
|
|
54
|
+
| `sugerencias` | `Sugerencia[]` (ver `lr-buscador`) | `[]` |
|
|
55
|
+
| `buscando` | `boolean` | `false` |
|
|
56
|
+
| `pegajoso` | `boolean` (pegado arriba; se hace más bajo al bajar) | `false` |
|
|
57
|
+
| `ocultar-al-bajar` | `boolean` (con `pegajoso`) | `false` |
|
|
58
|
+
| `ancho-celular` | `number` (px; debajo usa la vista de celular) | `900` |
|
|
59
|
+
|
|
60
|
+
Eventos: `navegar` con `{ liga }`, `abrir-carrito`, `abrir-cuenta`, y los del
|
|
61
|
+
buscador: `buscar-texto`, `buscar` y `elegir-sugerencia`.
|
|
62
|
+
|
|
63
|
+
Métodos: `abrirMenu()` y `cerrarMenu()`.
|
|
64
|
+
|
|
65
|
+
Slots: `anuncio` (arriba de todo), `carrito` (reemplaza el botón, por ejemplo
|
|
66
|
+
con `<lr-mini-carrito>`) y `menu-pie` (abajo del menú de celular).
|
|
67
|
+
|
|
68
|
+
Estilos: `--lr-header-fondo`, `--lr-header-texto`, `--lr-header-alto`,
|
|
69
|
+
`--lr-header-alto-compacto`, `--lr-header-ancho`, `--lr-header-globo`,
|
|
70
|
+
`--lr-header-avatar`, `--lr-header-promo-fondo`, `--lr-header-capa`,
|
|
71
|
+
`::part(header)`, `::part(logo)`.
|
|
72
|
+
|
|
17
73
|
## Desarrollo
|
|
18
74
|
|
|
19
75
|
```bash
|
package/dist/custom-header.d.ts
CHANGED
|
@@ -1,11 +1,111 @@
|
|
|
1
1
|
import { LitElement } from 'lit';
|
|
2
|
+
import '@lit-roa/buscador';
|
|
3
|
+
import type { Sugerencia } from '@lit-roa/buscador';
|
|
4
|
+
export interface LigaHeader {
|
|
5
|
+
texto: string;
|
|
6
|
+
href?: string;
|
|
7
|
+
id?: string;
|
|
8
|
+
/** Submenú sencillo. */
|
|
9
|
+
hijos?: LigaHeader[];
|
|
10
|
+
/** Mega menú: columnas con título. Si hay `columnas` se ignoran `hijos`. */
|
|
11
|
+
columnas?: {
|
|
12
|
+
titulo: string;
|
|
13
|
+
ligas: LigaHeader[];
|
|
14
|
+
}[];
|
|
15
|
+
/** Tarjeta destacada a la derecha del mega menú. */
|
|
16
|
+
promo?: {
|
|
17
|
+
titulo: string;
|
|
18
|
+
texto?: string;
|
|
19
|
+
imagen?: string;
|
|
20
|
+
href?: string;
|
|
21
|
+
id?: string;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export interface DetalleNavegar {
|
|
25
|
+
liga: LigaHeader;
|
|
26
|
+
}
|
|
2
27
|
/**
|
|
3
|
-
*
|
|
28
|
+
* Encabezado de la tienda: logo, ligas con submenús o mega menú, buscador,
|
|
29
|
+
* cuenta y carrito. En pantallas angostas muestra un menú lateral. Puede
|
|
30
|
+
* quedarse pegado arriba y hacerse más bajo al hacer scroll.
|
|
31
|
+
*
|
|
32
|
+
* Las ligas no navegan solas: el sitio escucha `navegar` y decide.
|
|
33
|
+
*
|
|
34
|
+
* @fires navegar - Al tocar una liga, el logo o una promoción. `detail`: `{ liga }`.
|
|
35
|
+
* @fires abrir-carrito - Al tocar el carrito.
|
|
36
|
+
* @fires abrir-cuenta - Al tocar "Entrar" o el nombre de la persona.
|
|
37
|
+
* @fires buscar-texto - (del buscador) Al escribir. `detail`: `{ texto }`.
|
|
38
|
+
* @fires buscar - (del buscador) Al presionar Enter. `detail`: `{ texto }`.
|
|
39
|
+
* @fires elegir-sugerencia - (del buscador) `detail`: `{ sugerencia }`.
|
|
40
|
+
* @slot anuncio - Arriba de todo, por ejemplo `<lr-barra-anuncio>`.
|
|
41
|
+
* @slot carrito - Reemplaza el botón del carrito (por ejemplo con `<lr-mini-carrito>`).
|
|
42
|
+
* @slot menu-pie - Contenido extra abajo del menú de celular.
|
|
4
43
|
*/
|
|
5
44
|
export declare class LrCustomHeader extends LitElement {
|
|
6
45
|
static styles: import("lit").CSSResult[];
|
|
7
|
-
|
|
46
|
+
/** URL de la imagen del logo. */
|
|
47
|
+
logo: string;
|
|
48
|
+
/** Nombre de la tienda (texto junto al logo y texto alternativo). */
|
|
49
|
+
nombre: string;
|
|
50
|
+
/** Liga del logo. */
|
|
51
|
+
hrefInicio: string;
|
|
52
|
+
/** Ligas del menú. Como atributo, en JSON. */
|
|
53
|
+
ligas: LigaHeader[];
|
|
54
|
+
/** Piezas en el carrito (globito). */
|
|
55
|
+
piezas: number;
|
|
56
|
+
/** Nombre de la persona con sesión iniciada; vacío muestra "Entrar". */
|
|
57
|
+
usuario: string;
|
|
58
|
+
textoEntrar: string;
|
|
59
|
+
textoCuenta: string;
|
|
60
|
+
/** Oculta el buscador. */
|
|
61
|
+
sinBuscador: boolean;
|
|
62
|
+
placeholderBuscador: string;
|
|
63
|
+
/** Sugerencias para el buscador (ver `lr-buscador`). */
|
|
64
|
+
sugerencias: Sugerencia[];
|
|
65
|
+
buscando: boolean;
|
|
66
|
+
/** Se queda pegado arriba y se hace más bajo al hacer scroll. */
|
|
67
|
+
pegajoso: boolean;
|
|
68
|
+
/** Con `pegajoso`, se esconde al bajar y aparece al subir. */
|
|
69
|
+
ocultarAlBajar: boolean;
|
|
70
|
+
/** Ancho (px) del header debajo del cual se usa la vista de celular. */
|
|
71
|
+
anchoCelular: number;
|
|
72
|
+
compacto: boolean;
|
|
73
|
+
escondido: boolean;
|
|
74
|
+
private celular;
|
|
75
|
+
private abierta;
|
|
76
|
+
private abiertasMenu;
|
|
77
|
+
private conAnuncio;
|
|
78
|
+
private dialogo;
|
|
79
|
+
private observador?;
|
|
80
|
+
private ultimoScroll;
|
|
81
|
+
connectedCallback(): void;
|
|
82
|
+
disconnectedCallback(): void;
|
|
8
83
|
render(): import("lit-html").TemplateResult<1>;
|
|
84
|
+
/** Abre el menú de celular. */
|
|
85
|
+
abrirMenu(): void;
|
|
86
|
+
/** Cierra el menú de celular y los submenús. */
|
|
87
|
+
cerrarMenu(): void;
|
|
88
|
+
private vistaEscritorio;
|
|
89
|
+
private vistaCelular;
|
|
90
|
+
private logoTpl;
|
|
91
|
+
private buscadorTpl;
|
|
92
|
+
private cuentaTpl;
|
|
93
|
+
private carritoTpl;
|
|
94
|
+
private ligaEscritorio;
|
|
95
|
+
private megaTpl;
|
|
96
|
+
private ligaCelular;
|
|
97
|
+
private alternarMenu;
|
|
98
|
+
private iniciales;
|
|
99
|
+
private alNavegar;
|
|
100
|
+
private alCuenta;
|
|
101
|
+
private alCarrito;
|
|
102
|
+
private alClicLiga;
|
|
103
|
+
private alSalirLiga;
|
|
104
|
+
private alCambiarAnuncio;
|
|
105
|
+
private alClicDialogo;
|
|
106
|
+
private alClicFuera;
|
|
107
|
+
private alEscape;
|
|
108
|
+
private alScroll;
|
|
9
109
|
}
|
|
10
110
|
declare global {
|
|
11
111
|
interface HTMLElementTagNameMap {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-header.d.ts","sourceRoot":"","sources":["../src/custom-header.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"custom-header.d.ts","sourceRoot":"","sources":["../src/custom-header.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAYrD,OAAO,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,wBAAwB;IACxB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,EAAE,CAAA;KAAE,EAAE,CAAC;IACrD,oDAAoD;IACpD,KAAK,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACzF;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBACa,cAAe,SAAQ,UAAU;IAC5C,OAAgB,MAAM,4BA4ZpB;IAEF,iCAAiC;IACrB,IAAI,SAAM;IAEtB,qEAAqE;IACzD,MAAM,SAAM;IAExB,qBAAqB;IACmB,UAAU,SAAO;IAEzD,8CAA8C;IACnB,KAAK,EAAE,UAAU,EAAE,CAAM;IAEpD,sCAAsC;IACV,MAAM,SAAK;IAEvC,wEAAwE;IAC5D,OAAO,SAAM;IAEgB,WAAW,SAAY;IAEvB,WAAW,SAAyB;IAE7E,0BAA0B;IAC8B,WAAW,UAAS;IAE3B,mBAAmB,SAAyB;IAE7F,wDAAwD;IAC7B,WAAW,EAAE,UAAU,EAAE,CAAM;IAEN,QAAQ,UAAS;IAErE,iEAAiE;IACrB,QAAQ,UAAS;IAE7D,8DAA8D;IACF,cAAc,UAAS;IAEnF,wEAAwE;IAChB,YAAY,SAAO;IAE/B,QAAQ,UAAS;IACjB,SAAS,UAAS;IAErD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,UAAU,CAAS;IAEnB,OAAO,CAAC,OAAO,CAAqB;IAErD,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,YAAY,CAAK;IAEhB,iBAAiB;IASjB,oBAAoB;IAQpB,MAAM;IASf,+BAA+B;IAC/B,SAAS;IAIT,gDAAgD;IAChD,UAAU;IAKV,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,YAAY;IA0BpB,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,OAAO;IA2Bf,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,QAAQ,CAGd;IAEF,OAAO,CAAC,SAAS,CAGf;IAEF,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,WAAW,CAEjB;IAEF,OAAO,CAAC,QAAQ,CAEd;IAEF,OAAO,CAAC,QAAQ,CAMd;CACH;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,cAAc,CAAC;KACpC;CACF"}
|