@moni-labs/moni-ui 0.3.1 → 0.3.2
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/custom-elements.json +5181 -1043
- package/dist/components/_base/moni-element.d.ts +16 -9
- package/dist/components/_base/moni-element.d.ts.map +1 -1
- package/dist/components/_base/moni-element.js +63 -9
- package/dist/components/index.js +2 -2
- package/dist/components/loading-shapes.d.ts +19 -0
- package/dist/components/loading-shapes.d.ts.map +1 -1
- package/dist/components/loading-shapes.js +19 -0
- package/dist/components/moni-app-bar.d.ts +72 -62
- package/dist/components/moni-app-bar.d.ts.map +1 -1
- package/dist/components/moni-app-bar.js +72 -62
- package/dist/components/moni-badge.d.ts +64 -65
- package/dist/components/moni-badge.d.ts.map +1 -1
- package/dist/components/moni-badge.js +64 -66
- package/dist/components/moni-bottom-sheet.d.ts +129 -61
- package/dist/components/moni-bottom-sheet.d.ts.map +1 -1
- package/dist/components/moni-bottom-sheet.js +217 -131
- package/dist/components/moni-button-group.d.ts +107 -29
- package/dist/components/moni-button-group.d.ts.map +1 -1
- package/dist/components/moni-button-group.js +107 -29
- package/dist/components/moni-button-segment.d.ts +53 -12
- package/dist/components/moni-button-segment.d.ts.map +1 -1
- package/dist/components/moni-button-segment.js +53 -12
- package/dist/components/moni-button.d.ts +116 -38
- package/dist/components/moni-button.d.ts.map +1 -1
- package/dist/components/moni-button.js +128 -38
- package/dist/components/moni-card.d.ts +68 -50
- package/dist/components/moni-card.d.ts.map +1 -1
- package/dist/components/moni-card.js +68 -50
- package/dist/components/moni-carousel.d.ts +471 -53
- package/dist/components/moni-carousel.d.ts.map +1 -1
- package/dist/components/moni-carousel.js +862 -264
- package/dist/components/moni-checkbox.d.ts +49 -46
- package/dist/components/moni-checkbox.d.ts.map +1 -1
- package/dist/components/moni-checkbox.js +55 -48
- package/dist/components/moni-chip.d.ts +100 -33
- package/dist/components/moni-chip.d.ts.map +1 -1
- package/dist/components/moni-chip.js +104 -34
- package/dist/components/moni-color-field.d.ts +99 -24
- package/dist/components/moni-color-field.d.ts.map +1 -1
- package/dist/components/moni-color-field.js +99 -24
- package/dist/components/moni-context-menu.d.ts +72 -26
- package/dist/components/moni-context-menu.d.ts.map +1 -1
- package/dist/components/moni-context-menu.js +76 -30
- package/dist/components/moni-dialog.d.ts +84 -59
- package/dist/components/moni-dialog.d.ts.map +1 -1
- package/dist/components/moni-dialog.js +105 -58
- package/dist/components/moni-divider.d.ts +39 -27
- package/dist/components/moni-divider.d.ts.map +1 -1
- package/dist/components/moni-divider.js +42 -30
- package/dist/components/moni-expansion.d.ts +32 -22
- package/dist/components/moni-expansion.d.ts.map +1 -1
- package/dist/components/moni-expansion.js +32 -22
- package/dist/components/moni-fab-menu.d.ts +61 -23
- package/dist/components/moni-fab-menu.d.ts.map +1 -1
- package/dist/components/moni-fab-menu.js +69 -31
- package/dist/components/moni-fab.d.ts +86 -28
- package/dist/components/moni-fab.d.ts.map +1 -1
- package/dist/components/moni-fab.js +92 -34
- package/dist/components/moni-file-field.d.ts +118 -30
- package/dist/components/moni-file-field.d.ts.map +1 -1
- package/dist/components/moni-file-field.js +118 -30
- package/dist/components/moni-icon.d.ts +40 -35
- package/dist/components/moni-icon.d.ts.map +1 -1
- package/dist/components/moni-icon.js +43 -38
- package/dist/components/moni-list-item.d.ts +46 -33
- package/dist/components/moni-list-item.d.ts.map +1 -1
- package/dist/components/moni-list-item.js +61 -41
- package/dist/components/moni-list.d.ts +30 -20
- package/dist/components/moni-list.d.ts.map +1 -1
- package/dist/components/moni-list.js +36 -21
- package/dist/components/moni-loading-indicator.d.ts +54 -22
- package/dist/components/moni-loading-indicator.d.ts.map +1 -1
- package/dist/components/moni-loading-indicator.js +54 -22
- package/dist/components/moni-menu-item.d.ts +23 -16
- package/dist/components/moni-menu-item.d.ts.map +1 -1
- package/dist/components/moni-menu-item.js +23 -16
- package/dist/components/moni-menu.d.ts +81 -28
- package/dist/components/moni-menu.d.ts.map +1 -1
- package/dist/components/moni-menu.js +81 -30
- package/dist/components/moni-morph-modal.d.ts +141 -0
- package/dist/components/moni-morph-modal.d.ts.map +1 -1
- package/dist/components/moni-morph-modal.js +295 -58
- package/dist/components/moni-nav-item.d.ts +59 -29
- package/dist/components/moni-nav-item.d.ts.map +1 -1
- package/dist/components/moni-nav-item.js +59 -29
- package/dist/components/moni-nav.d.ts +94 -35
- package/dist/components/moni-nav.d.ts.map +1 -1
- package/dist/components/moni-nav.js +94 -35
- package/dist/components/moni-progress.d.ts +99 -55
- package/dist/components/moni-progress.d.ts.map +1 -1
- package/dist/components/moni-progress.js +99 -55
- package/dist/components/moni-radio.d.ts +62 -50
- package/dist/components/moni-radio.d.ts.map +1 -1
- package/dist/components/moni-radio.js +65 -52
- package/dist/components/moni-ripple.d.ts +74 -59
- package/dist/components/moni-ripple.d.ts.map +1 -1
- package/dist/components/moni-ripple.js +74 -59
- package/dist/components/moni-segmented-button.d.ts +91 -16
- package/dist/components/moni-segmented-button.d.ts.map +1 -1
- package/dist/components/moni-segmented-button.js +94 -17
- package/dist/components/moni-select-option.d.ts +30 -23
- package/dist/components/moni-select-option.d.ts.map +1 -1
- package/dist/components/moni-select-option.js +30 -23
- package/dist/components/moni-select.d.ts +300 -35
- package/dist/components/moni-select.d.ts.map +1 -1
- package/dist/components/moni-select.js +323 -39
- package/dist/components/moni-side-sheet.d.ts +94 -32
- package/dist/components/moni-side-sheet.d.ts.map +1 -1
- package/dist/components/moni-side-sheet.js +94 -32
- package/dist/components/moni-slider.d.ts +152 -41
- package/dist/components/moni-slider.d.ts.map +1 -1
- package/dist/components/moni-slider.js +154 -42
- package/dist/components/moni-snackbar.d.ts +53 -43
- package/dist/components/moni-snackbar.d.ts.map +1 -1
- package/dist/components/moni-snackbar.js +53 -43
- package/dist/components/moni-split-button.d.ts +63 -18
- package/dist/components/moni-split-button.d.ts.map +1 -1
- package/dist/components/moni-split-button.js +63 -18
- package/dist/components/moni-step.d.ts +36 -24
- package/dist/components/moni-step.d.ts.map +1 -1
- package/dist/components/moni-step.js +41 -29
- package/dist/components/moni-stepper.d.ts +64 -27
- package/dist/components/moni-stepper.d.ts.map +1 -1
- package/dist/components/moni-stepper.js +72 -34
- package/dist/components/moni-switch.d.ts +57 -46
- package/dist/components/moni-switch.d.ts.map +1 -1
- package/dist/components/moni-switch.js +59 -47
- package/dist/components/moni-tab.d.ts +26 -18
- package/dist/components/moni-tab.d.ts.map +1 -1
- package/dist/components/moni-tab.js +29 -21
- package/dist/components/moni-tabs.d.ts +34 -28
- package/dist/components/moni-tabs.d.ts.map +1 -1
- package/dist/components/moni-tabs.js +34 -28
- package/dist/components/moni-text-field.d.ts +139 -29
- package/dist/components/moni-text-field.d.ts.map +1 -1
- package/dist/components/moni-text-field.js +157 -31
- package/dist/components/moni-textarea.d.ts +127 -29
- package/dist/components/moni-textarea.d.ts.map +1 -1
- package/dist/components/moni-textarea.js +131 -32
- package/dist/components/moni-time-picker.d.ts +114 -24
- package/dist/components/moni-time-picker.d.ts.map +1 -1
- package/dist/components/moni-time-picker.js +127 -33
- package/dist/components/moni-toolbar.d.ts +37 -23
- package/dist/components/moni-toolbar.d.ts.map +1 -1
- package/dist/components/moni-toolbar.js +37 -23
- package/dist/components/moni-tooltip.d.ts +100 -36
- package/dist/components/moni-tooltip.d.ts.map +1 -1
- package/dist/components/moni-tooltip.js +104 -40
- package/dist/components/moni-typography.d.ts +68 -30
- package/dist/components/moni-typography.d.ts.map +1 -1
- package/dist/components/moni-typography.js +70 -32
- package/dist/styles/tokens.css +7 -7
- package/dist/types/events.d.ts +17 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +1 -0
- package/dist/utils/event-emitter.d.ts +13 -0
- package/dist/utils/event-emitter.d.ts.map +1 -0
- package/dist/utils/event-emitter.js +13 -0
- package/package.json +2 -1
- package/src/components/_base/moni-element.ts +73 -9
- package/src/components/index.ts +2 -2
- package/src/components/loading-shapes.ts +19 -0
- package/src/components/moni-app-bar.test.ts +10 -10
- package/src/components/moni-app-bar.ts +72 -62
- package/src/components/moni-badge.ts +64 -66
- package/src/components/moni-bottom-sheet.test.ts +39 -45
- package/src/components/moni-bottom-sheet.ts +222 -131
- package/src/components/moni-button-group.test.ts +14 -14
- package/src/components/moni-button-group.ts +107 -29
- package/src/components/moni-button-segment.ts +53 -12
- package/src/components/moni-button.test.ts +28 -26
- package/src/components/moni-button.ts +139 -39
- package/src/components/moni-card.test.ts +6 -6
- package/src/components/moni-card.ts +70 -50
- package/src/components/moni-carousel.test.ts +12 -12
- package/src/components/moni-carousel.ts +953 -290
- package/src/components/moni-checkbox.test.ts +7 -7
- package/src/components/moni-checkbox.ts +62 -48
- package/src/components/moni-chip.test.ts +17 -17
- package/src/components/moni-chip.ts +112 -34
- package/src/components/moni-color-field.test.ts +5 -5
- package/src/components/moni-color-field.ts +108 -24
- package/src/components/moni-context-menu.test.ts +11 -11
- package/src/components/moni-context-menu.ts +76 -30
- package/src/components/moni-dialog.ts +108 -59
- package/src/components/moni-divider.test.ts +4 -4
- package/src/components/moni-divider.ts +42 -30
- package/src/components/moni-expansion.ts +32 -22
- package/src/components/moni-fab-menu.test.ts +11 -11
- package/src/components/moni-fab-menu.ts +69 -31
- package/src/components/moni-fab.test.ts +16 -16
- package/src/components/moni-fab.ts +100 -34
- package/src/components/moni-file-field.test.ts +8 -8
- package/src/components/moni-file-field.ts +132 -30
- package/src/components/moni-icon.test.ts +11 -11
- package/src/components/moni-icon.ts +43 -38
- package/src/components/moni-list-item.test.ts +10 -10
- package/src/components/moni-list-item.ts +61 -41
- package/src/components/moni-list.ts +37 -21
- package/src/components/moni-loading-indicator.test.ts +3 -3
- package/src/components/moni-loading-indicator.ts +54 -22
- package/src/components/moni-menu-item.ts +23 -16
- package/src/components/moni-menu.test.ts +7 -7
- package/src/components/moni-menu.ts +87 -30
- package/src/components/moni-morph-modal.test.ts +18 -17
- package/src/components/moni-morph-modal.ts +327 -60
- package/src/components/moni-nav-item.ts +59 -29
- package/src/components/moni-nav.test.ts +11 -11
- package/src/components/moni-nav.ts +94 -35
- package/src/components/moni-progress.test.ts +9 -9
- package/src/components/moni-progress.ts +100 -56
- package/src/components/moni-radio.test.ts +8 -8
- package/src/components/moni-radio.ts +71 -51
- package/src/components/moni-ripple.ts +74 -59
- package/src/components/moni-segmented-button.test.ts +4 -4
- package/src/components/moni-segmented-button.ts +94 -17
- package/src/components/moni-select-option.ts +30 -23
- package/src/components/moni-select.test.ts +11 -11
- package/src/components/moni-select.ts +361 -50
- package/src/components/moni-side-sheet.test.ts +7 -7
- package/src/components/moni-side-sheet.ts +94 -32
- package/src/components/moni-slider.test.ts +7 -7
- package/src/components/moni-slider.ts +165 -42
- package/src/components/moni-snackbar.test.ts +8 -8
- package/src/components/moni-snackbar.ts +53 -43
- package/src/components/moni-split-button.ts +63 -18
- package/src/components/moni-step.test.ts +7 -7
- package/src/components/moni-step.ts +41 -29
- package/src/components/moni-stepper.test.ts +7 -7
- package/src/components/moni-stepper.ts +72 -34
- package/src/components/moni-switch.test.ts +12 -12
- package/src/components/moni-switch.ts +66 -47
- package/src/components/moni-tab.test.ts +5 -5
- package/src/components/moni-tab.ts +29 -21
- package/src/components/moni-tabs.ts +34 -28
- package/src/components/moni-text-field.test.ts +13 -13
- package/src/components/moni-text-field.ts +181 -30
- package/src/components/moni-textarea.test.ts +17 -17
- package/src/components/moni-textarea.ts +155 -31
- package/src/components/moni-time-picker.test.ts +5 -5
- package/src/components/moni-time-picker.ts +128 -33
- package/src/components/moni-toolbar.test.ts +8 -8
- package/src/components/moni-toolbar.ts +37 -23
- package/src/components/moni-tooltip.test.ts +15 -15
- package/src/components/moni-tooltip.ts +107 -40
- package/src/components/moni-typography.test.ts +10 -10
- package/src/components/moni-typography.ts +73 -32
- package/src/styles/tokens.css +7 -7
- package/src/types/events.ts +17 -0
- package/src/utils/event-emitter.ts +26 -0
|
@@ -6,164 +6,582 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { MoniElement } from './_base/index.js';
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* Modelo de datos para un solo elemento en un `<moni-carousel>`.
|
|
10
10
|
*/
|
|
11
11
|
export interface CarouselItem {
|
|
12
|
-
/**
|
|
12
|
+
/** Título a mostrar sobre el elemento. */
|
|
13
13
|
title: string;
|
|
14
|
-
/** URL
|
|
14
|
+
/** URL o ruta a la imagen de fondo. */
|
|
15
15
|
img: string;
|
|
16
|
-
/**
|
|
16
|
+
/** Objetivo de enlace opcional. Si se proporciona, el elemento se renderiza como un `<a>`. */
|
|
17
17
|
href?: string;
|
|
18
|
-
/**
|
|
18
|
+
/** Atributo target del enlace (ej. `'_blank'`). Solo se aplica si se establece `href`. */
|
|
19
19
|
target?: string;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
* Material Design 3 Expressive Carousel
|
|
22
|
+
* Componente Material Design 3 Expressive Carousel.
|
|
23
23
|
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
24
|
+
* Los carruseles muestran una colección de elementos relacionados en una lista horizontal desplazable.
|
|
25
|
+
* Permiten a los usuarios navegar rápidamente a través de elementos como imágenes, tarjetas, o productos.
|
|
26
26
|
*
|
|
27
|
-
* **
|
|
27
|
+
* **Referencia de la especificación M3:** `m3-docs/components/carousel/specs.md`
|
|
28
28
|
*
|
|
29
|
-
* **
|
|
30
|
-
* - `multi-browse` (
|
|
31
|
-
*
|
|
32
|
-
* - `hero` —
|
|
33
|
-
*
|
|
34
|
-
* - `uncontained` —
|
|
35
|
-
*
|
|
29
|
+
* **Variantes de diseño:**
|
|
30
|
+
* - `multi-browse` (por defecto) — Muestra una mezcla de elementos grandes, medianos y pequeños (asomando).
|
|
31
|
+
* Mejor para explorar un gran número de elementos.
|
|
32
|
+
* - `hero` — Se enfoca en un elemento primario grande mientras muestra una fracción del
|
|
33
|
+
* siguiente elemento. Mejor para destacar contenido importante.
|
|
34
|
+
* - `uncontained` — Diseño estándar donde todos los elementos tienen el mismo ancho y
|
|
35
|
+
* se desbordan por los bordes del contenedor.
|
|
36
36
|
*
|
|
37
|
-
* **
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
37
|
+
* **Animación y Gestos:**
|
|
38
|
+
* Este componente usa GSAP para animaciones suaves de arrastre, deslizamiento y ajuste,
|
|
39
|
+
* reflejando las especificaciones de movimiento de alta fidelidad de M3 Expressive. Maneja
|
|
40
|
+
* gestos táctiles para móviles y arrastre del ratón para escritorio.
|
|
41
41
|
*
|
|
42
|
-
* **Auto-
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
42
|
+
* **Auto-tamaño (modo `auto`):**
|
|
43
|
+
* Cuando `auto=true` (por defecto), el carrusel mide su propio ancho y
|
|
44
|
+
* calcula dinámicamente los tamaños óptimos para los elementos grandes, medianos y pequeños
|
|
45
|
+
* basados en el `layout` activo para asegurar que encajen perfectamente sin huecos incómodos
|
|
46
|
+
* ni recortes en los bordes.
|
|
47
47
|
*
|
|
48
48
|
* @example
|
|
49
49
|
* ```html
|
|
50
|
-
* <!--
|
|
50
|
+
* <!-- Uso declarativo a través de propiedades DOM (recomendado) -->
|
|
51
51
|
* <moni-carousel layout="hero"></moni-carousel>
|
|
52
52
|
* <script>
|
|
53
53
|
* const carousel = document.querySelector('moni-carousel');
|
|
54
54
|
* carousel.items = [
|
|
55
|
-
* { title: '
|
|
56
|
-
* { title: '
|
|
55
|
+
* { title: 'Elemento 1', img: '/img1.jpg', href: '/link1' },
|
|
56
|
+
* { title: 'Elemento 2', img: '/img2.jpg' }
|
|
57
57
|
* ];
|
|
58
58
|
* </script>
|
|
59
59
|
*
|
|
60
|
-
* <!--
|
|
60
|
+
* <!-- Uso basado en slots (para SSR o contenido estático simple) -->
|
|
61
61
|
* <moni-carousel layout="uncontained">
|
|
62
62
|
* <div slot="item">
|
|
63
63
|
* <img src="/img1.jpg" />
|
|
64
|
-
* <h3>
|
|
64
|
+
* <h3>Elemento Estático</h3>
|
|
65
65
|
* </div>
|
|
66
66
|
* </moni-carousel>
|
|
67
67
|
* ```
|
|
68
68
|
*
|
|
69
|
-
* @slot item -
|
|
70
|
-
*
|
|
69
|
+
* @slot item - Alternativa a la propiedad `items`. Inserta elementos HTML individuales
|
|
70
|
+
* en lugar de pasar objetos de datos.
|
|
71
71
|
*
|
|
72
|
-
* @csspart carousel -
|
|
73
|
-
* @csspart track -
|
|
74
|
-
* @csspart item -
|
|
75
|
-
* @csspart img -
|
|
76
|
-
* @csspart title -
|
|
72
|
+
* @csspart carousel - El envoltorio exterior.
|
|
73
|
+
* @csspart track - El elemento de la pista desplazable.
|
|
74
|
+
* @csspart item - Contenedores de elementos del carrusel individuales.
|
|
75
|
+
* @csspart img - Los elementos de imagen dentro de los elementos.
|
|
76
|
+
* @csspart title - Los elementos de texto de título dentro de los elementos.
|
|
77
77
|
*/
|
|
78
78
|
export declare class MoniCarousel extends MoniElement {
|
|
79
|
+
/**
|
|
80
|
+
* Array de elementos a mostrar en el carrusel.
|
|
81
|
+
* Cada elemento requiere al menos `title` e `img`. El opcional `href` renderiza la tarjeta como un enlace.
|
|
82
|
+
* @default []
|
|
83
|
+
*/
|
|
79
84
|
items: CarouselItem[];
|
|
85
|
+
/**
|
|
86
|
+
* Variante de diseño visual. Determina cuántos elementos son visibles y cómo escalan.
|
|
87
|
+
* - `'multi-browse'` (por defecto) — Elementos grandes + medianos + pequeños (asomando).
|
|
88
|
+
* - `'hero'` — Uno o más elementos grandes + elemento pequeño asomando.
|
|
89
|
+
* - `'uncontained'` — Elementos de igual ancho que se desbordan por el borde.
|
|
90
|
+
* @default 'multi-browse'
|
|
91
|
+
*/
|
|
80
92
|
layout: 'multi-browse' | 'hero' | 'uncontained';
|
|
93
|
+
/**
|
|
94
|
+
* Cuando es `true`, el carrusel calcula los tamaños óptimos de los elementos automáticamente
|
|
95
|
+
* basado en el ancho del contenedor y la variante de `layout` activa.
|
|
96
|
+
* Cuando es `false`, usa los valores explícitos `largeWidth`, `mediumWidth`, `smallWidth`.
|
|
97
|
+
* @default true
|
|
98
|
+
*/
|
|
81
99
|
auto: boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Ancho en píxeles para el elemento grande (enfoque principal) del carrusel.
|
|
102
|
+
* Solo se usa cuando `auto=false`.
|
|
103
|
+
* @default 220
|
|
104
|
+
*/
|
|
82
105
|
largeWidth: number;
|
|
106
|
+
/**
|
|
107
|
+
* Ancho en píxeles para el elemento de tamaño mediano (secundario) del carrusel.
|
|
108
|
+
* Solo se usa cuando `auto=false` y `layout='multi-browse'`.
|
|
109
|
+
* @default 96
|
|
110
|
+
*/
|
|
83
111
|
mediumWidth: number;
|
|
112
|
+
/**
|
|
113
|
+
* Ancho en píxeles para el elemento pequeño (asomando) del carrusel.
|
|
114
|
+
* Solo se usa cuando `auto=false`.
|
|
115
|
+
* @default 48
|
|
116
|
+
*/
|
|
84
117
|
smallWidth: number;
|
|
118
|
+
/**
|
|
119
|
+
* Espacio en píxeles entre los elementos del carrusel.
|
|
120
|
+
* @default 8
|
|
121
|
+
*/
|
|
85
122
|
gap: number;
|
|
123
|
+
/**
|
|
124
|
+
* Relleno horizontal en píxeles aplicado al inicio de la pista del carrusel.
|
|
125
|
+
* @default 16
|
|
126
|
+
*/
|
|
86
127
|
padding: number;
|
|
128
|
+
/**
|
|
129
|
+
* Radio del borde en píxeles aplicado a cada tarjeta.
|
|
130
|
+
* @default 28
|
|
131
|
+
*/
|
|
87
132
|
borderRadius: number;
|
|
133
|
+
/**
|
|
134
|
+
* Cuando es `true`, renderiza un enlace "Mostrar todo" en el encabezado.
|
|
135
|
+
* @default false
|
|
136
|
+
*/
|
|
88
137
|
showAll: boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Texto de etiqueta para el enlace "Mostrar todo".
|
|
140
|
+
* @default 'Show all'
|
|
141
|
+
*/
|
|
89
142
|
showAllText: string;
|
|
143
|
+
/**
|
|
144
|
+
* Encabezado de sección opcional renderizado sobre la pista del carrusel.
|
|
145
|
+
* @default ''
|
|
146
|
+
*/
|
|
90
147
|
headerText: string;
|
|
148
|
+
/**
|
|
149
|
+
* Cuando es `true`, oculta los botones de flecha de navegación anterior/siguiente.
|
|
150
|
+
* @default false
|
|
151
|
+
*/
|
|
91
152
|
hideNav: boolean;
|
|
153
|
+
/**
|
|
154
|
+
* Cuando es `true`, habilita el bucle infinito sin interrupciones clonando la lista de elementos
|
|
155
|
+
* a través de un búfer de desplazamiento virtual grande, luego reposicionando silenciosamente
|
|
156
|
+
* el desplazamiento cuando el usuario se acerca a cualquier borde.
|
|
157
|
+
* @default false
|
|
158
|
+
*/
|
|
92
159
|
infinite: boolean;
|
|
160
|
+
/**
|
|
161
|
+
* Cuando es `true`, avanza automáticamente el carrusel en el intervalo definido
|
|
162
|
+
* por `autoplayInterval`. La reproducción automática se detiene durante las interacciones de arrastre activas.
|
|
163
|
+
* @default false
|
|
164
|
+
*/
|
|
93
165
|
autoplay: boolean;
|
|
166
|
+
/**
|
|
167
|
+
* Milisegundos entre los avances automáticos de diapositivas cuando `autoplay=true`.
|
|
168
|
+
* @default 3000
|
|
169
|
+
*/
|
|
94
170
|
autoplayInterval: number;
|
|
171
|
+
/**
|
|
172
|
+
* Ancho medido del elemento host del carrusel en píxeles.
|
|
173
|
+
* Actualizado por el `ResizeObserver` en cada redimensionamiento del contenedor y usado por
|
|
174
|
+
* `computedLayout` para calcular cuántos elementos caben en la pantalla.
|
|
175
|
+
*/
|
|
95
176
|
private _containerWidth;
|
|
177
|
+
/**
|
|
178
|
+
* Elementos analizados desde el slot Light DOM (uso declarativo).
|
|
179
|
+
* Poblado por `_handleSlotChange` cuando los usuarios insertan elementos `<img>` o `<a><img></a>`.
|
|
180
|
+
*/
|
|
96
181
|
private _slottedItems;
|
|
182
|
+
/**
|
|
183
|
+
* Si el slot `show-all` contiene contenido proyectado por el usuario.
|
|
184
|
+
* Controla si se renderiza el área "Mostrar todo" del encabezado.
|
|
185
|
+
*/
|
|
97
186
|
private _hasSlottedShowAll;
|
|
187
|
+
/**
|
|
188
|
+
* Devuelve la fuente del elemento activo.
|
|
189
|
+
* La propiedad programática `items` tiene prioridad sobre los hijos Light DOM en slots.
|
|
190
|
+
* Recurre a `_slottedItems` cuando no se proporcionan elementos programáticos.
|
|
191
|
+
*/
|
|
98
192
|
get effectiveItems(): CarouselItem[];
|
|
193
|
+
/**
|
|
194
|
+
* Referencia directa al div contenedor de desplazamiento.
|
|
195
|
+
* Usado para leer `scrollLeft`, modificar `scrollBehavior`, y calcular `scrollWidth`.
|
|
196
|
+
*/
|
|
99
197
|
private _scrollContainer;
|
|
198
|
+
/**
|
|
199
|
+
* NodeList en vivo de todos los elementos de tarjeta renderizados.
|
|
200
|
+
* Usado por el motor de diseño para aplicar actualizaciones de transform/width por cuadro a través de GSAP quickSetters.
|
|
201
|
+
*/
|
|
100
202
|
private _cards;
|
|
203
|
+
/** Instancia ResizeObserver que observa las dimensiones del elemento host. */
|
|
101
204
|
private _resizeObserver;
|
|
102
|
-
|
|
103
|
-
private
|
|
104
|
-
|
|
105
|
-
private
|
|
106
|
-
|
|
107
|
-
private
|
|
108
|
-
|
|
109
|
-
private
|
|
205
|
+
/** Estado interno de visibilidad (por índice lógico) para evitar falsos eventos al ciclar el scroll infinito */
|
|
206
|
+
private _logicalItemInViewport;
|
|
207
|
+
/** `true` mientras el usuario arrastra activamente (ratón o toque presionado). */
|
|
208
|
+
private _isDragging;
|
|
209
|
+
/** Coordenada X en el inicio del gesto de arrastre actual (relativa al contenedor de desplazamiento). */
|
|
210
|
+
private _dragStartX;
|
|
211
|
+
/** Valor `scrollLeft` del contenedor en el momento en que comenzó el arrastre. */
|
|
212
|
+
private _scrollLeftAtDragStart;
|
|
213
|
+
/**
|
|
214
|
+
* Velocidad del puntero en píxeles por milisegundo.
|
|
215
|
+
* Calculada gradualmente durante el arrastre y usada para el impulso/inercia al soltar.
|
|
216
|
+
*/
|
|
217
|
+
private _pointerVelocity;
|
|
218
|
+
/** Marca de tiempo (de `performance.now()`) del último evento de movimiento del puntero/toque. */
|
|
219
|
+
private _lastPointerTime;
|
|
220
|
+
/** Coordenada X del puntero en el cuadro del evento de movimiento anterior. */
|
|
221
|
+
private _lastPointerX;
|
|
222
|
+
/**
|
|
223
|
+
* Distancia horizontal absoluta acumulada (en píxeles) recorrida durante el arrastre actual.
|
|
224
|
+
* Usada para distinguir un deslizamiento intencional de un clic accidental (umbral: 8px).
|
|
225
|
+
*/
|
|
226
|
+
private _totalDraggedDistance;
|
|
227
|
+
/**
|
|
228
|
+
* ID de `requestAnimationFrame` activo del bucle de desplazamiento por inercia.
|
|
229
|
+
* Almacenado para que pueda cancelarse cuando el usuario inicia un nuevo arrastre.
|
|
230
|
+
*/
|
|
231
|
+
private _animationFrameId;
|
|
232
|
+
/** `true` cuando el ancho de la ventana gráfica coincide con el punto de ruptura móvil (`max-width: 600px`). */
|
|
110
233
|
private _isMobile;
|
|
234
|
+
/**
|
|
235
|
+
* La posición de desplazamiento hacia la que el ticker de GSAP está interpolando (lerping) **en cada cuadro**.
|
|
236
|
+
* Expresada en unidades de `itemSize` (no píxeles) para matemáticas independientes del diseño.
|
|
237
|
+
*/
|
|
111
238
|
private _tickerTarget;
|
|
239
|
+
/**
|
|
240
|
+
* La posición de desplazamiento interpolada actual usada para impulsar el diseño visual.
|
|
241
|
+
* Interpola hacia `_tickerTarget` en cada cuadro, creando el efecto de suavizado.
|
|
242
|
+
*/
|
|
112
243
|
private _tickerCurrent;
|
|
244
|
+
/**
|
|
245
|
+
* `true` mientras el callback del ticker de GSAP (`_tick`) está registrado y en ejecución.
|
|
246
|
+
* Evita añadir el callback del ticker múltiples veces en llamadas concurrentes.
|
|
247
|
+
*/
|
|
113
248
|
private _isTicking;
|
|
249
|
+
/**
|
|
250
|
+
* Protege la inicialización de una sola vez de la posición del búfer de desplazamiento infinito.
|
|
251
|
+
* Se establece en `true` una vez que el contenedor de desplazamiento se ha reposicionado
|
|
252
|
+
* silenciosamente al centro del búfer virtual después del primer renderizado.
|
|
253
|
+
*/
|
|
114
254
|
private _infiniteInitialized;
|
|
255
|
+
/** ID del temporizador devuelto por `setInterval()` para la función de reproducción automática. */
|
|
115
256
|
private _autoplayTimer;
|
|
257
|
+
/** Array de quickSetters de GSAP para el CSS `transform: translateX()` de cada tarjeta. */
|
|
116
258
|
private _cardSetX;
|
|
259
|
+
/** Array de quickSetters de GSAP para el `width` en línea de cada tarjeta. */
|
|
117
260
|
private _cardSetWidth;
|
|
261
|
+
/** Array de quickSetters de GSAP para el parallax `translateX` del `<img>` de cada tarjeta. */
|
|
118
262
|
private _imgSetX;
|
|
263
|
+
/** Array de quickSetters de GSAP para la `opacity` del elemento `.card-title` de cada tarjeta. */
|
|
119
264
|
private _titleSetOpacity;
|
|
120
265
|
static styles: import("lit").CSSResult[];
|
|
266
|
+
/**
|
|
267
|
+
* Hook del ciclo de vida (Lit).
|
|
268
|
+
* Inicializa el `ResizeObserver` para reaccionar a cambios en el tamaño del contenedor,
|
|
269
|
+
* lo que es crucial para recalcular el `computedLayout` (cuántas cards caben en el viewport).
|
|
270
|
+
* También añade listeners globales pasivos para eventos de redimensionamiento de ventana.
|
|
271
|
+
*/
|
|
121
272
|
connectedCallback(): void;
|
|
273
|
+
/**
|
|
274
|
+
* Hook del ciclo de vida (Lit).
|
|
275
|
+
* Limpia y desconecta el `ResizeObserver`, el `IntersectionObserver` y elimina
|
|
276
|
+
* los event listeners globales para evitar fugas de memoria (memory leaks).
|
|
277
|
+
*/
|
|
122
278
|
disconnectedCallback(): void;
|
|
279
|
+
/**
|
|
280
|
+
* Hook del ciclo de vida (Lit) ejecutado tras el primer render.
|
|
281
|
+
* Inspecciona el Shadow DOM para ubicar el slot por defecto y procesar
|
|
282
|
+
* las cards iniciales (`_handleSlotChange` invocado manualmente).
|
|
283
|
+
*/
|
|
123
284
|
firstUpdated(): void;
|
|
285
|
+
/**
|
|
286
|
+
* Hook del ciclo de vida (Lit). Se invoca tras cada actualización reactiva.
|
|
287
|
+
*
|
|
288
|
+
* Lógica principal:
|
|
289
|
+
* - Si cambian propiedades estructurales (`autoplay`, `infinite`, `gap`), reconstruye el
|
|
290
|
+
* layout y detiene/inicia el timer de autoplay.
|
|
291
|
+
* - Delega en `_checkInfiniteWrap()` para reposicionar el scroll si estamos cerca
|
|
292
|
+
* de los bordes del carrusel infinito.
|
|
293
|
+
*/
|
|
124
294
|
updated(changedProperties: Map<string, any>): void;
|
|
295
|
+
/**
|
|
296
|
+
* Motor de cálculo del Layout.
|
|
297
|
+
*
|
|
298
|
+
* Basado en las proporciones de Material 3 para carruseles:
|
|
299
|
+
* Calcula el ancho disponible (`W_c`) y determina el número de ítems grandes (`L`),
|
|
300
|
+
* medianos (`M`) y pequeños (`S`) que caben en pantalla, usando la fórmula de la
|
|
301
|
+
* especificación (multi-browse, hero o uncontained).
|
|
302
|
+
*
|
|
303
|
+
* Retorna `{ L, M, S, N }` donde `N` es el divisor base para calcular tamaños proporcionales.
|
|
304
|
+
*/
|
|
125
305
|
get computedLayout(): {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
306
|
+
largeItemWidth: number;
|
|
307
|
+
mediumItemWidth: number;
|
|
308
|
+
smallItemWidth: number;
|
|
309
|
+
largeItemCount: number;
|
|
130
310
|
};
|
|
311
|
+
/**
|
|
312
|
+
* Calcula el ancho total (incluyendo el gap) de un ítem de tamaño 'L' (Large).
|
|
313
|
+
* Este valor se utiliza como unidad de medida (step) para el Scroll Snapping
|
|
314
|
+
* y el cálculo de desplazamiento de páginas (sets).
|
|
315
|
+
*/
|
|
131
316
|
get itemSize(): number;
|
|
317
|
+
/**
|
|
318
|
+
* Algoritmo Central del Carrusel M3.
|
|
319
|
+
*
|
|
320
|
+
* Calcula el ancho visual, la posición horizontal y la opacidad para una sola tarjeta del carrusel
|
|
321
|
+
* basándose en su posición normalizada en relación con la ventana gráfica actualmente visible.
|
|
322
|
+
*
|
|
323
|
+
* Este es el corazón del efecto "Masked Carousel" de M3: a medida que una tarjeta transita de
|
|
324
|
+
* fuera de pantalla a en pantalla (posición -1 → 0 → N), su ancho se interpola de
|
|
325
|
+
* `smallItemWidth` → `largeItemWidth`, y su opacidad aumenta.
|
|
326
|
+
*
|
|
327
|
+
* Semántica de posición:
|
|
328
|
+
* - `normalizedPosition < -1` → tarjeta está fuera de pantalla a la izquierda (oculta)
|
|
329
|
+
* - `normalizedPosition = 0` → tarjeta está en la ranura grande más a la izquierda (enfoque principal)
|
|
330
|
+
* - `normalizedPosition = N-1` → tarjeta está en la ranura grande más a la derecha
|
|
331
|
+
* - `normalizedPosition > N` → tarjeta está fuera de pantalla a la derecha (oculta)
|
|
332
|
+
*
|
|
333
|
+
* @param normalizedPosition - El índice de posición fraccional de la tarjeta en relación con el progreso
|
|
334
|
+
* de desplazamiento actual. Un valor de `0` significa que la tarjeta está perfectamente alineada con la ranura
|
|
335
|
+
* grande inicial; los valores fraccionales representan transiciones parciales.
|
|
336
|
+
* @returns Objeto con `{ width, x, opacity }` para aplicar directamente al elemento de la tarjeta.
|
|
337
|
+
*/
|
|
132
338
|
private _getCardLayout;
|
|
133
339
|
/**
|
|
134
|
-
*
|
|
135
|
-
* quickSetter
|
|
340
|
+
* Reconstruye las cachés de quickSetter después de que cambian las tarjetas.
|
|
341
|
+
* quickSetter evita la sobrecarga de gsap.set() para las propiedades actualizadas en cada cuadro.
|
|
136
342
|
*/
|
|
137
343
|
private _buildQuickSetters;
|
|
138
344
|
/**
|
|
139
|
-
*
|
|
140
|
-
*
|
|
345
|
+
* Callback del Ticker de GSAP — el bucle de animación principal para el carrusel.
|
|
346
|
+
*
|
|
347
|
+
* Esta función está registrada con `gsap.ticker.add()` y se ejecuta en cada
|
|
348
|
+
* cuadro de animación (sincronizado con `requestAnimationFrame`). Implementa
|
|
349
|
+
* **interpolación exponencial (smoothstep)** para interpolar `_tickerCurrent` hacia
|
|
350
|
+
* `_tickerTarget`, creando una desaceleración de suavizado físicamente plausible.
|
|
351
|
+
*
|
|
352
|
+
* La fórmula de interpolación: `current += (target - current) × easeStrength × deltaTimeRatio`
|
|
353
|
+
*
|
|
354
|
+
* - `easeStrength = 0.08` en móvil: acoplamiento más estrecho para evitar que el carrusel
|
|
355
|
+
* se sienta "lento" o desincronizado con un dedo.
|
|
356
|
+
* - `easeStrength = 0.15` en escritorio: ligeramente más suelto para una sensación más cinematográfica.
|
|
357
|
+
* - `deltaTimeRatio` normaliza la velocidad de animación a través de diferentes velocidades de cuadro
|
|
358
|
+
* (60fps vs 120fps), manteniendo la atenuación percibida constante.
|
|
359
|
+
*
|
|
360
|
+
* Una vez que la diferencia entre el objetivo y el actual cae por debajo de 0.0005 (medio
|
|
361
|
+
* sub-píxel), la animación se considera completa y el ticker se elimina
|
|
362
|
+
* para conservar los recursos de CPU/GPU entre interacciones.
|
|
141
363
|
*/
|
|
142
364
|
private _tick;
|
|
365
|
+
/**
|
|
366
|
+
* Lee la posición real del scroll nativo y arranca el ticker de animación si no está corriendo.
|
|
367
|
+
* Esta separación es crucial para el rendimiento: leemos el DOM aquí (scrollLeft) pero
|
|
368
|
+
* escribimos los estilos en `_tick` -> `_applyLayout`.
|
|
369
|
+
*/
|
|
143
370
|
private _scheduleLayout;
|
|
371
|
+
/**
|
|
372
|
+
* Función principal de sincronización de estado.
|
|
373
|
+
* Refresca la lógica del scroll infinito y fuerza una recolección de los setters de GSAP
|
|
374
|
+
* si la cantidad de tarjetas cambió. Puede saltarse el ticker y ser instantánea (ej. al redimensionar la ventana).
|
|
375
|
+
*/
|
|
144
376
|
updateLayout: (instant?: boolean) => void;
|
|
377
|
+
/**
|
|
378
|
+
* Bucle de renderizado principal — aplica el diseño calculado a cada tarjeta en el DOM.
|
|
379
|
+
*
|
|
380
|
+
* Llamado en cada cuadro del ticker de GSAP a través de `_tick()`. Itera sobre todos los elementos físicos
|
|
381
|
+
* de las tarjetas y aplica ancho, posición, paralaje y opacidad del título
|
|
382
|
+
* usando quickSetters de GSAP pre-almacenados en caché para un rendimiento máximo de velocidad de fotogramas.
|
|
383
|
+
*
|
|
384
|
+
* **Bucle de desplazamiento infinito:**
|
|
385
|
+
* Cuando `infinite=true`, la posición normalizada se calcula usando aritmética
|
|
386
|
+
* modular para que las tarjetas se repitan sin problemas alrededor del centro virtual del búfer.
|
|
387
|
+
* Una corrección de envoltura asegura que cada tarjeta permanezca dentro de una distancia de medio ancho de búfer
|
|
388
|
+
* de la posición de desplazamiento actual.
|
|
389
|
+
*
|
|
390
|
+
* **Optimización fuera de pantalla:**
|
|
391
|
+
* Las tarjetas que están a más de 15 posiciones fuera de la pantalla se mueven a `x = -9999` y sus
|
|
392
|
+
* títulos se ocultan. Esto evita que el navegador gaste el presupuesto de composición
|
|
393
|
+
* en elementos invisibles.
|
|
394
|
+
*
|
|
395
|
+
* @param scrollProgress - La posición de desplazamiento interpolada actual en unidades de `itemSize`.
|
|
396
|
+
* Un valor de `1.0` significa que el contenedor de desplazamiento ha avanzado exactamente el ancho de un elemento + espacio.
|
|
397
|
+
*/
|
|
145
398
|
private _applyLayout;
|
|
399
|
+
/**
|
|
400
|
+
* Calcula el multiplicador necesario para rellenar visualmente el carrusel infinito.
|
|
401
|
+
* Si la lista original de ítems es corta (ej: 3 ítems) pero el viewport puede
|
|
402
|
+
* mostrar 5, necesitamos multiplicar la lista original para cubrir el ancho de
|
|
403
|
+
* la pantalla e interactuar de forma ininterrumpida (Infinity Wrap).
|
|
404
|
+
*/
|
|
146
405
|
private get _visualCardsMultiplier();
|
|
406
|
+
/**
|
|
407
|
+
* Calcula cuántos "sets" completos de las cards originales se deben clonar
|
|
408
|
+
* hacia los lados para habilitar el Infinite Scroll.
|
|
409
|
+
* Usualmente es de 3 a 5 "sets" multiplicados para crear un buffer circular
|
|
410
|
+
* invisible para el usuario final.
|
|
411
|
+
*/
|
|
147
412
|
private get _snapSetsCount();
|
|
413
|
+
/**
|
|
414
|
+
* Determina el conteo total físico de cards (`li`) que serán montados en el DOM.
|
|
415
|
+
* Es el producto de `effectiveItems.length` multiplicado por `_snapSetsCount`.
|
|
416
|
+
* Para carruseles finitos (no infinite), esto simplemente retorna la cantidad original.
|
|
417
|
+
*/
|
|
148
418
|
private get _snapItemsCount();
|
|
419
|
+
/**
|
|
420
|
+
* Lógica de Bucle Infinito (Infinite Wrap).
|
|
421
|
+
*
|
|
422
|
+
* Analiza el valor actual del `scrollLeft` del contenedor. Si el usuario se
|
|
423
|
+
* acerca demasiado al límite del buffer (físico izquierdo o derecho) de los ítems
|
|
424
|
+
* clonados, este método reposiciona instantáneamente (saltándose animaciones/scroll-behavior)
|
|
425
|
+
* el scrollLeft hacia el bloque central equivalente.
|
|
426
|
+
* El usuario nunca nota el salto visual porque los ítems en esas coordenadas lucen idénticos.
|
|
427
|
+
*/
|
|
149
428
|
private _checkInfiniteWrap;
|
|
429
|
+
/**
|
|
430
|
+
* Inicia el temporizador de reproducción automática (Autoplay).
|
|
431
|
+
* Evalúa si el usuario no está interactuando activamente (`_isDown`)
|
|
432
|
+
* antes de forzar el scroll hacia la siguiente vista.
|
|
433
|
+
*/
|
|
150
434
|
private _startAutoplay;
|
|
435
|
+
/**
|
|
436
|
+
* Detiene y limpia el temporizador de reproducción automática (Autoplay).
|
|
437
|
+
* Invocado durante interacciones del usuario (hover, drag) o al desmontar.
|
|
438
|
+
*/
|
|
151
439
|
private _stopAutoplay;
|
|
440
|
+
/**
|
|
441
|
+
* Manejador de evento: `mouseenter`.
|
|
442
|
+
* Expuesto por si se requiere pausar el autoplay al hacer hover (actualmente en desuso).
|
|
443
|
+
*/
|
|
152
444
|
private _handleMouseEnter;
|
|
445
|
+
/**
|
|
446
|
+
* Manejador de evento: `mouseleave`.
|
|
447
|
+
* Finaliza forzosamente cualquier secuencia de drag o interacción táctil en progreso
|
|
448
|
+
* si el puntero abandona el área de bounding box del carrusel.
|
|
449
|
+
*/
|
|
153
450
|
private _handleMouseLeave;
|
|
451
|
+
/**
|
|
452
|
+
* Inicia la secuencia de arrastre (Pointer/Mouse Down).
|
|
453
|
+
* - Elimina las animaciones GSAP en vuelo para evitar conflictos elásticos.
|
|
454
|
+
* - Captura la posición de inicio X y resetea el acumulador de fricción y velocidad.
|
|
455
|
+
* - Realiza una comprobación de Infinite Wrap preliminar por si el usuario
|
|
456
|
+
* comienza a arrastrar desde el límite del buffer.
|
|
457
|
+
*/
|
|
154
458
|
private _handleMouseDown;
|
|
459
|
+
/**
|
|
460
|
+
* Maneja el evento de movimiento del puntero durante un arrastre (Drag).
|
|
461
|
+
*
|
|
462
|
+
* @logic
|
|
463
|
+
* 1. Calcula el delta (`walk`) respecto a la posición original X.
|
|
464
|
+
* 2. Si excede el threshold de arrastre (3px), comienza a inyectar el scroll.
|
|
465
|
+
* 3. En carruseles finitos (no infinite), si el usuario sobrepasa el inicio o el final,
|
|
466
|
+
* aplica una fricción exponencial al `walk` para simular la "resistencia elástica" (Overscroll).
|
|
467
|
+
* 4. Captura la velocidad (`_velocity`) calculando el delta dividido por el lapso de tiempo.
|
|
468
|
+
*/
|
|
155
469
|
private _handleMouseMove;
|
|
470
|
+
/**
|
|
471
|
+
* Finaliza la secuencia de arrastre (Pointer/Mouse Up).
|
|
472
|
+
*
|
|
473
|
+
* @logic
|
|
474
|
+
* Restaura el "Scroll Snap" que fue desactivado durante el drag (para permitir un
|
|
475
|
+
* arrastre libre píxel por píxel). Adicionalmente, si el arrastre acumuló suficiente
|
|
476
|
+
* velocidad (Inercia), inyecta esa inercia desplazando imperativamente el contenedor.
|
|
477
|
+
*/
|
|
156
478
|
private _handleMouseUp;
|
|
479
|
+
/**
|
|
480
|
+
* Inicia la secuencia de arrastre táctil (Touch Start).
|
|
481
|
+
* Funciona análogamente a `_handleMouseDown`: detiene animaciones GSAP, evalúa el Infinite Wrap
|
|
482
|
+
* y captura las coordenadas táctiles iniciales (`e.touches[0]`).
|
|
483
|
+
*/
|
|
157
484
|
private _handleTouchStart;
|
|
485
|
+
/**
|
|
486
|
+
* Maneja el evento de movimiento táctil (Touch Move).
|
|
487
|
+
* Actualiza el `scrollLeft` del contenedor imperativamente según el delta de arrastre.
|
|
488
|
+
* Calcula la velocidad del dedo para la simulación de inercia posterior.
|
|
489
|
+
*/
|
|
158
490
|
private _handleTouchMove;
|
|
491
|
+
/**
|
|
492
|
+
* Finaliza la secuencia de arrastre táctil (Touch End).
|
|
493
|
+
* Delega en `_handleMouseUp()` para aplicar inercia y restaurar el Snap.
|
|
494
|
+
*/
|
|
159
495
|
private _handleTouchEnd;
|
|
496
|
+
/**
|
|
497
|
+
* Manejador del evento Scroll/Wheel.
|
|
498
|
+
*
|
|
499
|
+
* @logic
|
|
500
|
+
* 1. Filtra para procesar únicamente el scroll vertical (`deltaY > deltaX`), típico de ruedas de ratón.
|
|
501
|
+
* 2. Si el usuario está en los bordes extremos del carrusel, permite que el evento de scroll
|
|
502
|
+
* haga bubble hacia arriba para hacer scroll a la página completa, logrando una interacción fluida.
|
|
503
|
+
* 3. Si no, previene el scroll de la página (`e.preventDefault`) y lo convierte en scroll horizontal
|
|
504
|
+
* para el carrusel.
|
|
505
|
+
* 4. Desactiva temporalmente el "CSS Scroll Snap" para que el movimiento sea suave, restaurándolo
|
|
506
|
+
* tras 150ms de inactividad (`_wheelTimeout`).
|
|
507
|
+
*/
|
|
160
508
|
private _handleWheel;
|
|
509
|
+
/**
|
|
510
|
+
* Maneja los eventos de clic en las tarjetas individuales del carrusel.
|
|
511
|
+
*
|
|
512
|
+
* Distingue entre toques/clics genuinos y eventos accidentales de levantar el puntero
|
|
513
|
+
* que ocurrieron después de un gesto de arrastre. Si la distancia total arrastrada excede
|
|
514
|
+
* los 8px (el umbral mínimo de desplazamiento intencional de M3), el clic se suprime
|
|
515
|
+
* para evitar una navegación involuntaria o el disparo de acciones.
|
|
516
|
+
*
|
|
517
|
+
* Despacha `'item-click'` con `{ item, index }` para que los consumidores puedan
|
|
518
|
+
* responder a la selección de la tarjeta (ej. navegar a una página de detalles).
|
|
519
|
+
*
|
|
520
|
+
* @param e - El evento de clic del elemento de la tarjeta.
|
|
521
|
+
* @param item - Los datos `CarouselItem` asociados con la tarjeta clicada.
|
|
522
|
+
* @param cardDomIndex - El índice de la tarjeta en el DOM renderizado (puede diferir
|
|
523
|
+
* del índice lógico en modo infinito debido a la clonación de elementos).
|
|
524
|
+
*/
|
|
161
525
|
private _handleCardClick;
|
|
526
|
+
/**
|
|
527
|
+
* Acción Imperativa: Scroll hacia el elemento anterior.
|
|
528
|
+
* Desplaza el contenedor una distancia equivalente al tamaño exacto de un ítem `L` (Large) + gap.
|
|
529
|
+
* Restaura el comportamiento `smooth` de CSS nativo.
|
|
530
|
+
*/
|
|
162
531
|
private _scrollPrevious;
|
|
532
|
+
/**
|
|
533
|
+
* Acción Imperativa: Scroll hacia el elemento siguiente.
|
|
534
|
+
* Desplaza el contenedor una distancia equivalente al tamaño exacto de un ítem `L` (Large) + gap.
|
|
535
|
+
*/
|
|
163
536
|
private _scrollNext;
|
|
537
|
+
/**
|
|
538
|
+
* Manejador del botón o enlace "Mostrar Todo" (Show All).
|
|
539
|
+
* Intercepta clics en enlaces nulos (`#`) y despacha el evento CustomEvent `show-all-click`.
|
|
540
|
+
*/
|
|
164
541
|
private _handleShowAllClick;
|
|
542
|
+
/**
|
|
543
|
+
* Hook invocado por Lit cuando el contenido del slot `"show-all"` muta en el Light DOM.
|
|
544
|
+
* Detecta si hay contenido proyectado para ocultar/mostrar la interfaz correspondiente,
|
|
545
|
+
* proveyendo un fallback manual para entornos DOM limitados (como JSDOM en test unitarios).
|
|
546
|
+
*/
|
|
165
547
|
private _handleShowAllSlotChange;
|
|
548
|
+
/**
|
|
549
|
+
* Hook invocado por Lit cuando los hijos directos proyectados en el `<slot>` por defecto cambian.
|
|
550
|
+
*
|
|
551
|
+
* @logic
|
|
552
|
+
* Parsea el Light DOM proporcionado por el usuario (ej: lista de `<img>` o `<a><img></a>`).
|
|
553
|
+
* Extrae los atributos `src`, `title`, y `href` de esos nodos nativos y los convierte en
|
|
554
|
+
* un array estructurado interno de objetos `CarouselItem`, que el componente usará
|
|
555
|
+
* subsecuentemente para renderizar su propio DOM Shadow infinito.
|
|
556
|
+
*/
|
|
166
557
|
private _handleSlotChange;
|
|
558
|
+
/**
|
|
559
|
+
* Ensambla la estructura del Shadow DOM del carrusel para cada ciclo de renderizado de Lit.
|
|
560
|
+
*
|
|
561
|
+
* **Extracción de `computedLayout`:**
|
|
562
|
+
* `largeItemWidth`, `mediumItemWidth` y `smallItemWidth` se desestructuran
|
|
563
|
+
* del getter `computedLayout` (que devuelve tamaños según la especificación M3 basados en
|
|
564
|
+
* el ancho del contenedor a través de `_containerWidth`). Se inyectan como propiedades personalizadas
|
|
565
|
+
* CSS en la pista para que el CSS de tamaño de ranura pueda referenciarlos.
|
|
566
|
+
*
|
|
567
|
+
* **Puerta `showHeader`:**
|
|
568
|
+
* El elemento `.header` solo se renderiza cuando hay algo que mostrar:
|
|
569
|
+
* un `headerText`, un atributo `showAll`, o un elemento `[slot="show-all"]`.
|
|
570
|
+
* Esto evita un espaciador de encabezado vacío cuando el carrusel no tiene fila de título.
|
|
571
|
+
*
|
|
572
|
+
* **Cálculo de `rightPadding`:**
|
|
573
|
+
* Asegura que la última tarjeta pueda desplazarse a ras de la posición focal del elemento grande:
|
|
574
|
+
* - Diseño `hero`: sin relleno adicional (el elemento derecho que asoma proporciona espacio natural).
|
|
575
|
+
* - Diseños de ancho completo / lista: también relleno mínimo.
|
|
576
|
+
* - Todos los demás diseños: `128px` (≈ ancho de la tarjeta pequeña) para que la última tarjeta pueda
|
|
577
|
+
* alcanzar la ranura de enfoque principal sin que el usuario se desplace demasiado.
|
|
578
|
+
*
|
|
579
|
+
* **Ciclo de vida del ticker de GSAP:**
|
|
580
|
+
* El ticker de GSAP (`gsap.ticker.add(_tick)`) se inicia en `firstUpdated()`
|
|
581
|
+
* y se detiene en `disconnectedCallback()`. Este método de renderizado NO
|
|
582
|
+
* interactúa con el ticker; el ticker impulsa las actualizaciones de posición por cuadro
|
|
583
|
+
* independientemente del ciclo de actualización reactiva de Lit.
|
|
584
|
+
*/
|
|
167
585
|
render(): import("lit").TemplateResult<1>;
|
|
168
586
|
}
|
|
169
587
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moni-carousel.d.ts","sourceRoot":"","sources":["../../src/components/moni-carousel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"moni-carousel.d.ts","sourceRoot":"","sources":["../../src/components/moni-carousel.ts"],"names":[],"mappings":"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"}
|