@rsltda/components 1.0.16 → 1.0.17

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @rsltda/components
2
2
 
3
- Web Components construidos con Vite + TypeScript. El paquete expone principalmente `<rs-map>`, listo para integrarse en cualquier sitio mediante Web Components.
3
+ Web Components construidos con Vite + TypeScript. El paquete expone principalmente `<rs-map>` y `<rs-whatsapp>`, listos para integrarse en cualquier sitio mediante Web Components.
4
4
 
5
5
  ## Alcance de uso
6
6
 
@@ -24,6 +24,8 @@ import "@rsltda/components/rs-components.es.js";
24
24
 
25
25
  ### Usarlo en HTML
26
26
 
27
+ #### `<rs-map>`
28
+
27
29
  ```html
28
30
  <rs-map
29
31
  marca="ktm"
@@ -34,6 +36,32 @@ import "@rsltda/components/rs-components.es.js";
34
36
  ></rs-map>
35
37
  ```
36
38
 
39
+ #### `<rs-whatsapp>`
40
+
41
+ ```html
42
+ <rs-whatsapp
43
+ marca="ktm"
44
+ position="bottom-right"
45
+ time-zone="America/Santiago"
46
+ >
47
+ <rs-whatsapp-schedule dias="lun-vie" desde="09:00" hasta="18:00"></rs-whatsapp-schedule>
48
+ <rs-whatsapp-schedule dias="sab" desde="10:00" hasta="14:00"></rs-whatsapp-schedule>
49
+
50
+ <rs-whatsapp-option
51
+ label="compra de motos"
52
+ telefono="569XXXXXXXX"
53
+ mensaje="Hola, quiero informacion sobre compra de motos"
54
+ icon="motorcycle"
55
+ ></rs-whatsapp-option>
56
+ <rs-whatsapp-option
57
+ label="repuestos"
58
+ telefono="569XXXXXXXX"
59
+ mensaje="Hola, quiero informacion sobre repuestos"
60
+ icon="motorcycle"
61
+ ></rs-whatsapp-option>
62
+ </rs-whatsapp>
63
+ ```
64
+
37
65
  ### Via jsDelivr
38
66
 
39
67
  ```html
@@ -53,6 +81,47 @@ import "@rsltda/components/rs-components.es.js";
53
81
  | `marker-icon-base` | URL base opcional para iconos por marca. |
54
82
  | `marker-icon-default` | Icono de respaldo si no se quiere usar icono por marca. |
55
83
 
84
+ ## Configuracion de `<rs-whatsapp>`
85
+
86
+ | Atributo | Descripcion |
87
+ | --- | --- |
88
+ | `telefono` | Numero de destino con codigo de pais. Se permiten espacios, simbolos y guiones. |
89
+ | `mensaje` | Mensaje inicial opcional para el enlace de WhatsApp. |
90
+ | `label` | Texto visible cuando se usa `show-label`. Por defecto `WhatsApp`. |
91
+ | `menu-label` | Texto de la accion por defecto dentro del menu. Por defecto `compra de motos`. |
92
+ | `aria-label` | Etiqueta accesible del boton. Por defecto `Contactar por WhatsApp`. |
93
+ | `position` | Posicion flotante: `bottom-right`, `bottom-left`, `top-right` o `top-left`. |
94
+ | `show-label` | Muestra el texto junto al icono. |
95
+ | `target` | Target del enlace. Por defecto `_blank`. |
96
+ | `marca` | Variante visual para elementos internos como el icono de moto: `ktm`, `hqv`, `gasgas`, `voge` o `rs`. El boton principal mantiene el verde de WhatsApp. |
97
+ | `icon` | Icono por defecto para opciones generadas. Usa el nombre de un SVG en `src/ws` sin extension, por ejemplo `motorcycle`. Usa `none` para ocultarlo. |
98
+ | `horario` | Horario de atencion opcional en formato compacto. Ejemplo: `lun-vie 09:00-18:00; sab 10:00-14:00`. |
99
+ | `fuera-horario` | Fuerza el estado fuera de horario manualmente. |
100
+ | `mensaje-fuera-horario` | Mensaje mostrado cuando el componente esta fuera de horario. Si hay horario configurado, el componente agrega el resumen del horario. |
101
+ | `time-zone` | Zona horaria IANA opcional para evaluar `horario`, por ejemplo `America/Santiago`. Si no se define, usa la zona horaria del navegador. |
102
+
103
+ Si `<rs-whatsapp>` contiene uno o mas `<rs-whatsapp-option>`, el menu se genera desde esas opciones. Las opciones sin `telefono` no se muestran. Si no contiene opciones, usa `telefono`, `mensaje` y `menu-label` del componente padre como opcion unica.
104
+
105
+ Para evitar texto largo en atributos, usa `<rs-whatsapp-schedule>` para los bloques de horario. El mensaje fuera de horario tiene un texto por defecto y agrega el horario configurado; si necesitas reemplazarlo por completo, usa `slot="fuera-horario"`.
106
+
107
+ ## Configuracion de `<rs-whatsapp-option>`
108
+
109
+ | Atributo | Descripcion |
110
+ | --- | --- |
111
+ | `label` | Texto visible de la opcion. |
112
+ | `telefono` | Numero de destino con codigo de pais. |
113
+ | `mensaje` | Mensaje inicial opcional para esta opcion. |
114
+ | `target` | Target del enlace. Si no se define, hereda el target de `<rs-whatsapp>`. |
115
+ | `icon` | Icono de esta opcion. Usa el nombre de un SVG en `src/ws` sin extension, por ejemplo `motorcycle`. Usa `none` para ocultarlo. |
116
+
117
+ ## Configuracion de `<rs-whatsapp-schedule>`
118
+
119
+ | Atributo | Descripcion |
120
+ | --- | --- |
121
+ | `dias` | Dias del bloque, por ejemplo `lun-vie`, `sab` o `todos`. |
122
+ | `desde` | Hora de inicio en formato `HH:mm`. |
123
+ | `hasta` | Hora de termino en formato `HH:mm`. |
124
+
56
125
  ## Defaults importantes
57
126
 
58
127
  - `points-api-url`: valor interno por defecto
@@ -73,4 +142,4 @@ El paquete incluye:
73
142
  - `dist/index.d.ts`
74
143
  - `custom-elements.json`
75
144
 
76
- Eso ayuda con autocompletado en tooling compatible y tipado de `<rs-map>`.
145
+ Eso ayuda con autocompletado en tooling compatible y tipado de los custom elements.
@@ -49,6 +49,127 @@
49
49
  ]
50
50
  }
51
51
  ]
52
+ },
53
+ {
54
+ "kind": "javascript-module",
55
+ "path": "src/components/rs-whatsapp.ts",
56
+ "declarations": [
57
+ {
58
+ "kind": "class",
59
+ "name": "RsWhatsapp",
60
+ "tagName": "rs-whatsapp",
61
+ "customElement": true,
62
+ "description": "Web component para mostrar un boton flotante de WhatsApp con menu configurable.",
63
+ "attributes": [
64
+ {
65
+ "name": "telefono",
66
+ "description": "Numero de destino con codigo de pais. El componente elimina espacios, simbolos y guiones."
67
+ },
68
+ {
69
+ "name": "mensaje",
70
+ "description": "Mensaje inicial opcional que se codifica en el enlace de WhatsApp."
71
+ },
72
+ {
73
+ "name": "label",
74
+ "description": "Texto visible cuando se usa el atributo show-label."
75
+ },
76
+ {
77
+ "name": "menu-label",
78
+ "description": "Texto de la accion por defecto dentro del menu. Por defecto compra de motos."
79
+ },
80
+ {
81
+ "name": "aria-label",
82
+ "description": "Etiqueta accesible del boton. Por defecto Contactar por WhatsApp."
83
+ },
84
+ {
85
+ "name": "position",
86
+ "description": "Posicion flotante: bottom-right, bottom-left, top-right o top-left. Por defecto bottom-right."
87
+ },
88
+ {
89
+ "name": "show-label",
90
+ "description": "Muestra el texto del atributo label junto al icono."
91
+ },
92
+ {
93
+ "name": "target",
94
+ "description": "Target del enlace. Por defecto _blank."
95
+ },
96
+ {
97
+ "name": "marca",
98
+ "description": "Variante visual para elementos internos como el icono de moto. Colores: ktm #ff6600, hqv #002550, gasgas #cb0d25, voge #000000, rs #000000. El boton principal mantiene el verde de WhatsApp."
99
+ },
100
+ {
101
+ "name": "icon",
102
+ "description": "Icono por defecto para opciones generadas. Usa el nombre de un SVG en src/ws sin extension, por ejemplo motorcycle. Usa none para ocultarlo."
103
+ },
104
+ {
105
+ "name": "horario",
106
+ "description": "Horario de atencion opcional. Formato ejemplo: lun-vie 09:00-18:00; sab 10:00-14:00. Si la hora actual queda fuera, se ocultan las opciones."
107
+ },
108
+ {
109
+ "name": "fuera-horario",
110
+ "description": "Fuerza el estado fuera de horario y muestra solo el mensaje."
111
+ },
112
+ {
113
+ "name": "mensaje-fuera-horario",
114
+ "description": "Mensaje mostrado cuando el componente esta fuera de horario. Si hay horario configurado, el componente agrega el resumen del horario."
115
+ },
116
+ {
117
+ "name": "time-zone",
118
+ "description": "Zona horaria IANA opcional para evaluar horario, por ejemplo America/Santiago. Si no se define, usa la zona horaria del navegador."
119
+ }
120
+ ]
121
+ },
122
+ {
123
+ "kind": "class",
124
+ "name": "RsWhatsappOption",
125
+ "tagName": "rs-whatsapp-option",
126
+ "customElement": true,
127
+ "description": "Opcion de destino para el menu de rs-whatsapp.",
128
+ "attributes": [
129
+ {
130
+ "name": "label",
131
+ "description": "Texto visible de la opcion."
132
+ },
133
+ {
134
+ "name": "telefono",
135
+ "description": "Numero de destino con codigo de pais."
136
+ },
137
+ {
138
+ "name": "mensaje",
139
+ "description": "Mensaje inicial opcional para esta opcion."
140
+ },
141
+ {
142
+ "name": "target",
143
+ "description": "Target del enlace de esta opcion. Si no se define, hereda el target de rs-whatsapp."
144
+ },
145
+ {
146
+ "name": "icon",
147
+ "description": "Icono de esta opcion. Usa el nombre de un SVG en src/ws sin extension, por ejemplo motorcycle. Usa none para ocultarlo."
148
+ }
149
+ ]
150
+ },
151
+ {
152
+ "kind": "class",
153
+ "name": "RsWhatsappSchedule",
154
+ "tagName": "rs-whatsapp-schedule",
155
+ "customElement": true,
156
+ "description": "Bloque legible de horario para rs-whatsapp.",
157
+ "attributes": [
158
+ {
159
+ "name": "dias",
160
+ "description": "Dias del bloque, por ejemplo lun-vie, sab o todos."
161
+ },
162
+ {
163
+ "name": "desde",
164
+ "description": "Hora de inicio en formato HH:mm."
165
+ },
166
+ {
167
+ "name": "hasta",
168
+ "description": "Hora de termino en formato HH:mm."
169
+ }
170
+ ]
171
+ }
172
+ ]
52
173
  }
53
174
  ]
54
175
  }
@@ -0,0 +1,49 @@
1
+ export declare class RsWhatsapp extends HTMLElement {
2
+ static tag: string;
3
+ private root;
4
+ private buttonEl;
5
+ private menuEl;
6
+ private generatedOptionsEl;
7
+ private customMenuSlotEl;
8
+ private closedMessageEl;
9
+ private closedMessageTextEl;
10
+ private labelEl;
11
+ private childrenObserver?;
12
+ static get observedAttributes(): string[];
13
+ constructor();
14
+ connectedCallback(): void;
15
+ disconnectedCallback(): void;
16
+ attributeChangedCallback(): void;
17
+ private syncAttributesToState;
18
+ private buildWhatsappUrl;
19
+ private sanitizePhone;
20
+ private syncBrandVariant;
21
+ private normalizeBrandKey;
22
+ private renderMenuOptions;
23
+ private getWhatsappOptions;
24
+ private createMenuLink;
25
+ private createOptionIcon;
26
+ private getClosedMessage;
27
+ private isOutsideBusinessHours;
28
+ private getScheduleSegments;
29
+ private getScheduleSummary;
30
+ private isWithinBusinessHours;
31
+ private getCurrentTimeParts;
32
+ private isScheduleSegmentActive;
33
+ private parseScheduleDays;
34
+ private parseScheduleDay;
35
+ private parseScheduleTime;
36
+ private setMenuOpen;
37
+ private handleButtonClick;
38
+ private handleMenuClick;
39
+ private handleCustomMenuSlotChange;
40
+ private handleChildrenMutation;
41
+ private handleDocumentClick;
42
+ private handleDocumentKeydown;
43
+ }
44
+ export declare class RsWhatsappOption extends HTMLElement {
45
+ static tag: string;
46
+ }
47
+ export declare class RsWhatsappSchedule extends HTMLElement {
48
+ static tag: string;
49
+ }
package/dist/index.d.ts CHANGED
@@ -1,8 +1,12 @@
1
1
  import { safeDefine } from './utils/define';
2
2
  import { RsMap } from './components/rs-map';
3
- export { RsMap, safeDefine };
3
+ import { RsWhatsapp, RsWhatsappOption, RsWhatsappSchedule } from './components/rs-whatsapp';
4
+ export { RsMap, RsWhatsapp, RsWhatsappOption, RsWhatsappSchedule, safeDefine };
4
5
  declare global {
5
6
  interface HTMLElementTagNameMap {
6
7
  'rs-map': RsMap;
8
+ 'rs-whatsapp': RsWhatsapp;
9
+ 'rs-whatsapp-option': RsWhatsappOption;
10
+ 'rs-whatsapp-schedule': RsWhatsappSchedule;
7
11
  }
8
12
  }