# CHANGELOG — Module Floating Toolbar

## [1.5.0] — 2026-05-13 — Option destination bouton email (mailto: ou page contact)

### Ajouté
- Nouvelles options `email_link_type` ('mailto' | 'page') et `email_page_url` dans les defaults.
- Admin UI — Radio "Email direct (mailto:)" / "Page contact (URL)" dans la section ✉ Email, avec champ URL conditionnel (toggle JS).
- `build_actions()` — En mode 'page', génère `type='contact'` au lieu de `type='email'` : bypass de la logique Email Encoder (encodage base64 `data-nxt-email`) et utilisation directe de l'URL configurée.

### Corrigé
- En mode 'page', le module Infos Contact n'est plus consulté pour ce CTA (évite une dépendance inutile).

---

## [1.4.0] — 2026-05-05

### Ajouté
- **Tracking GA4 / dataLayer** des CTA via le nouveau module `analytics` (Toolkit). Les events poussés sont :
  - `nxt_cta_click` à chaque clic sur une action (téléphone, email, WhatsApp, sommaire) — payload : `{ cta_type, cta_label, cta_position, cta_module: 'floating-toolbar' }`
  - `nxt_menu_open` à l'ouverture du panneau desktop (`cta_type: 'toolbar_trigger'`)
  - `nxt_menu_open` à l'ouverture du bottom sheet mobile (`cta_type: 'bottom_sheet'`, `cta_position: 'mobile'`)
- Listener en **capture phase** sur `.nxt-toolbar` pour garantir le push avant les `preventDefault()` et les navigations natives (`tel:`, `mailto:`).
- Helper interne `isTrackingEnabled()` : vérifie présence de `window.nxtAnalytics` ET que le module `floating-toolbar` est tracé dans la config admin Analytics.

### Comportement quand le module Analytics est désactivé
- `window.nxtAnalytics` est `undefined` → tous les appels de tracking sont des **no-op silencieux**. Aucun warning console, aucune dégradation. La toolbar fonctionne identiquement.

### Modifié
- [floating-toolbar.js](../../assets/js/floating-toolbar.js) : ajout du bloc « Tracking helpers » + appels `track()` aux trois endroits clés (clic CTA, ouverture toolbar desktop, ouverture bottom sheet mobile).
- Header de version JS : v1.1 → v1.2.

---

## [1.3.0] — 2026-04-16

### Ajouté
- **Compatibilité plugins d'obfuscation d'emails** (Email Address Encoder, Spam Destroyer, etc.) : l'action email ne sort plus avec `href="mailto:..."` en clair, mais avec `href="#"` + `data-nxt-email="<base64(email)>"`. Un handler JS au clic décode et ouvre `mailto:`. Résout le cas où ces plugins **vidaient entièrement le contenu** du bouton (icône + label + sublabel devenaient invisibles).

### Modifié
- [floating-toolbar.js](../../assets/js/floating-toolbar.js) : nouveau bloc qui décode les `data-nxt-email` et construit le `mailto:` au clic.

---

## [1.2.0] — 2026-04-16

### Ajouté
- **Icône trigger changée en éclair** (Heroicons bolt solid, 20×20) — signalement visuel clair que des fonctionnalités se cachent derrière le bouton.
- **Icône SVG native WhatsApp** (`svg-whatsapp`) avec le vrai logo, indépendant de la police Entypo. Nouveau défaut pour `icon_whatsapp`.
- **Icône éclair** aussi disponible dans le picker (`svg-bolt`) pour d'autres boutons.

### Modifié
- `e8c4` renommée « chat (bulle) » — l'ancien label « whatsapp » prêtait à confusion (l'icône Entypo rendait une bulle de chat générique, pas le vrai logo WA).
- Rotation 45° du trigger à l'ouverture remplacée par un léger `scale(1.1)` — la rotation n'avait plus de sens pour un éclair.

### Corrigé
- **Items décalés verticalement après clic** : `:focus-visible` utilisait `outline + outline-offset` qui poussait les items voisins. Remplacé par `box-shadow: inset` — accessibilité clavier préservée, géométrie intacte.
- **Toolbar qui se fermait au clic « Sommaire »** : retiré l'appel à `closeToolbar()` dans le handler TOC — la toolbar reste ouverte pour un feedback visuel cohérent.
- **Sublabel email qui poussait l'icône au-dessus** : `min-width: 0` sur le label + `overflow: hidden; text-overflow: ellipsis; white-space: nowrap` sur le sublabel. Les emails longs sont tronqués avec `…` au lieu de wrapper.

---

## [1.1.0] — 2026-04-16

### Ajouté
- **Catalogue d'icônes unifié** via `get_icon_catalog()` (méthode statique publique) : source de vérité partagée entre picker admin et rendu front. Chaque entrée a un `type: 'font' | 'svg'`.
- **Icônes SVG natives** (rendu identique admin/front, indépendant d'Entypo) :
  - `svg-list-bullets` — liste avec puces carrées (demandée spécifiquement par l'utilisateur)
- **Catalogue exposé en JS** via `window.NXT_ICON_CATALOG` pour le preview live admin.
- Champ code icône étendu à 24 caractères (`maxlength`) pour accepter les identifiants `svg-*`.

### Modifié
- `make_icon($code)` détecte le type et émet soit un `<i>` Entypo (font) soit un `<span class="nxt-toolbar__action-svg">` (SVG inline).
- Picker admin boucle sur `get_icon_catalog()` au lieu d'un tableau inline local.
- Aperçu live admin : fonction `renderPreview()` qui bascule entre `font-family: entypo-fontello` et `font-family: inherit` selon le type.

### CSS
- Nouvelle règle `.nxt-toolbar__action-svg { display: contents }` — le wrapper devient transparent au flex parent.

---

## [1.0.0] — 2026-04-16

### Ajouté
- Module initial Floating Toolbar — barre flottante droite desktop, bottom sheet mobile.
- Actions : Sommaire, Téléphone, Email, WhatsApp (configurable via `Nexxis_Module_Contact_Info`).
- Picker d'icônes admin avec 27 icônes Entypo + SVG preview.
- Réglages : libellés, icônes, couleur primaire, exclusions de pages, minimum H2 pour le Sommaire.
- Intégration avec le module Sommaire (ouverture du panneau latéral via le bouton TOC).
