Releases: georgyfr/woo-total-menu
Release list
v1.7.0 — Menus conditionnels + Analytics simple
🎯 v1.7.0 — Menus conditionnels + Analytics simple
Cette version finalise la roadmap initiale du plugin en livrant les deux dernières fonctionnalités majeures attendues.
✨ Nouveautés
1. Menus conditionnels
- 10 types de règles :
page_type,post_id,post_type,taxonomy,user_state,user_role,device,date_range,url_param,language - Logique ET/OU avec court-circuit
- Méta
_wtm_conditionssur le CPTwtm_menu(copiée dans les révisions WordPress) - 4 routes REST sous
/wtm/v1/menus/{id}/conditions(GET/PUT/DELETE/test) - Panneau Builder React avec testeur live (évalue les conditions contre la requête courante)
- Intégration native dans
Location_InterceptoretHeader_Footer_Injector: si les conditions ne matchent pas, le menu/header/footer ne s'affiche pas
2. Analytics simple (privacy-friendly)
- Aucune donnée personnelle collectée (pas d'IP, pas d'user ID, pas de cookie) — conforme RGPD/CCPA sans bannière de consentement
- Compteurs agrégés par jour stockés dans des options WordPress
- 3 types d'événements :
view,click,hover - 2 routes REST :
POST /wtm/v1/analytics/track(public, nonce-gated) +GET /wtm/v1/analytics/stats(admin-only) - Tracking JS frontend via
navigator.sendBeaconpour les clics (survit à la navigation) - Page dashboard
/wp-admin/admin.php?page=wtm-analyticsavec chart HTML/CSS pur (pas de dépendance JS)
🔧 Hooks développeur
wtm_condition_result(filter) — surcharge du résultat final d'évaluationwtm_condition_rule_{type}(filter) — évaluation de types de règles customwtm_analytics_recorded(action) — déclenché après chaque événement enregistré
📦 Détails
- 6 nouveaux fichiers PHP (~1270 lignes)
- 1 nouveau composant React (~280 lignes)
- 85 lignes ajoutées au JS frontend
- Build webpack recompilé (
build/index.js158 KiB) - 6 nouvelles routes REST
- Compatible PHP 7.4+ et WordPress 6.4+
Voir versions/v1.7.0.md pour la documentation complète.
v1.6.0 — Phase Polish
Phase Polish
- Rôles personnalisés :
Roles_Manager+ 5 routes REST/wtm/v1/roles(création/maj/suppression de rôles WTM custom, protection des 5 rôles core). - 3 blocs Gutenberg :
wtm/menu,wtm/header,wtm/footerserver-rendered viaregister_block_type. - Intégration Elementor : widget custom "Woo Total Menu" (lazy-loaded si Elementor actif).
- Intégration Bricks : élément custom
wtm-menu(lazy-loaded si Bricks actif). - Intégration Oxygen : 3 shortcodes
[wtm_header],[wtm_footer],[wtm_oxygen_menu]+ helper PHP. - Multisite :
Multisite_Manager(activation réseau + hookwpmu_new_blog+ stats réseau). - 8 hooks développeur :
wtm_role_created/updated/deleted,wtm_activated/deactivated,wtm_network_activated,wtm_multisite_blog_setup/cleanup.
Tests backend : 30/30 PASS.
Voir versions/v1.6.0.md pour la documentation complète.
v1.5.0 — Système de templates intégrés
🎯 Système de templates intégrés
12 templates prêts à l'emploi (4 menus + 4 headers + 4 footers) répartis en 5 catégories métier (ecommerce, blog, corporate, minimal, electronics).
✨ Nouveautés
- Backend PHP —
Template_Registry(~840 lignes) +Templates_Controller(~330 lignes, 3 routes REST :GET /templates,GET /templates/{id},POST /templates/{id}/apply). - Builder React — Galerie de templates avec toolbar (tabs Tous/Menus/Headers/Footers), recherche plein-texte, filtre par catégorie, mini-aperçus CSS synthétiques (10 variants), bouton "Appliquer" avec confirmation.
- Store Redux
wtm/templates— cache du catalogue, filtres, états d'application, action asyncapplyTemplate(id). - 2 hooks/filters développeur —
wtm_templates_catalog(filter) +wtm_template_applied(action).
📦 Catalogue (12 templates)
Menus : Menu horizontal simple, Méga menu boutique de mode, Méga menu électronique, Menu vertical sidebar.
Headers : Header e-commerce classique, Header minimaliste, Header promotionnel, Header sticky centré.
Footers : Footer e-commerce 4 colonnes, Footer minimaliste, Footer corporate 4 colonnes, Footer sombre accessible WCAG AA.
✅ Tests
- 14/14 backend PASS (REST endpoints, apply, mode mismatch, filtre).
- 5/5 browser PASS (UI galerie, filtres, apply).
- 0 régression.
📊 Statistiques
- 6 nouveaux fichiers, 13 modifiés.
- ~3486 lignes ajoutées.
- Bundle JS : 150 Ko (35 Ko gzip).
- Bundle CSS : 35 Ko.
ZIP : https://github.com/georgyfr/woo-total-menu/releases/download/v1.5.0/woo-total-menu-1.5.0.zip
Documentation : https://github.com/georgyfr/woo-total-menu/blob/main/versions/v1.5.0.md
v1.4.0 — Header & Footer Builder
🎯 Nouvelle phase : Header & Footer Builder
La v1.4.0 finalise la promesse initiale du plugin : un outil unifié pour gérer les menus, headers et footers d'un site WooCommerce en quelques clics.
✨ Nouveautés principales
Builder visuel Header & Footer
- 3 tabs Menu / Header / Footer dans le Builder React
- Layout mode-aware : ModulePalette + LayoutCanvas + ModuleProperties en mode header/footer
- Grille visuelle rows → columns → modules avec resize (largeur 1-12)
- Drag-and-drop HTML5 des modules depuis la palette
- Déplacement des modules entre colonnes
- 9 types de modules : logo, menu, search, cart, button, html, social, newsletter, text
Backend PHP
Header_Footer_Renderer(~838 lignes) — walker PHP pur rows→columns→modules, HTML sémantique<header>/<footer>, réutilise les renderers widgets v1.3Header_Footer_Injector(~288 lignes) — hookswp_body_open+wp_footerpour injection globale automatiqueSchema_Validator::validate_layout()— validation stricte (MODULE_TYPES, width 1-12, ids string requis)- REST API étendue : GET/POST acceptent
header_configetfooter_config - 2 meta
_wtm_header_config+_wtm_footer_configversionnées dans les révisions WordPress
Settings & Hooks
- Section
header_footerdans Réglages → Woo Total Menu (5 champs) - 5 hooks/filters développeur :
wtm_header_inject_hook,wtm_footer_inject_hook,wtm_before_header,wtm_before_footer,wtm_layout_module_html
🐛 Bugs corrigés
render_module_search(): attributsdata-wtm-live-searchetdata-min-charsmanquantsrender_module_newsletter(): attributsdata-provider,data-list-id,data-wtm-newsletter-message,<script data-wtm-newsletter-config>manquants
🧪 Tests
- 53/53 PASS (28 backend + 12 frontend + 8 Builder + 5 non-régression)
- Bundle : 138 Ko JS Builder (35 Ko gzip) + 14 Ko JS frontend + 23 Ko CSS frontend
- 18 fichiers modifiés, +4584/-132 lignes
📦 Téléchargement
- ZIP de release :
woo-total-menu-1.4.0.zip(344 Ko, 86 fichiers) - Documentation détaillée :
versions/v1.4.0.md
🧭 Prochaine version
v1.5.x — Templates Library : bibliothèque de templates prêts à l'emploi importables en un clic, mode Démo, export/import JSON.
v1.3.0 — Widgets WooCommerce avancés
Objectif
La v1.3.0 enrichit la bibliotheque de widgets avec 4 nouveaux types orientes e-commerce et marketing, et upgrade 2 widgets existants.
Nouveautes
4 nouveaux widgets
- recent_posts : articles WordPress en grille (image, titre, date, extrait) avec tri + transient cache filtrable.
- social_icons : icones reseaux sociaux avec glyphes SVG inline (CSS mask) pour 7 reseaux + couleurs hover par reseau.
- newsletter : formulaire abonnement email avec layout inline/stacked, providers internal/mailchimp/none, AJAX submit avec nonce, IP anonymisee GDPR.
- filters : filtres WooCommerce layered nav (categories, prix min/max, attributs en checkboxes).
2 widgets upgraded
- mini_cart : nouveau mode display_mode: drawer qui ouvre un panneau lateral AJAX avec contenu du panier + refresh auto.
- search : nouvelle option live_suggestions qui active un dropdown de suggestions produits en AJAX (debounce 250 ms) + navigation clavier.
2 routes REST publiques
- GET /wtm/v1/search-suggest?s=...&limit=5
- GET /wtm/v1/mini-cart-contents
1 admin-ajax handler
- wtm_newsletter_subscribe (nonce + IP anonymisee GDPR + hooks pour Mailchimp)
Builder React
- Widget subtype picker avec 12 sous-types
- Inspecteurs PropertiesPanel pour les 7 nouveaux widgets
Tests
25/25 tests PASS. 1 bug pre-existant v1.2.0 corrige (widget_settings vs settings dans Menu_Renderer).
v1.2.0 — Rendu frontend complet
🎯 Nouvelle phase : Rendu Frontend
Jusqu'à v1.1.5 le plugin savait stocker et prévisualiser les menus dans le Builder. À partir de v1.2.0, il peut les afficher côté visiteur pour les 4 types de menus :
- Horizontal (méga menu — spec §5.4)
- Vertical (sidebar — spec §5.5)
- Off-canvas (panneau mobile — spec §5.6)
- Footer (multi-colonnes — spec §5.7)
✨ Nouveautés
4 nouveaux services PHP (src/Frontend/)
| Classe | Rôle | Spec |
|---|---|---|
Menu_Renderer |
Walker PHP pur qui parcourt l'arbre JSON _wtm_config et produit du HTML sémantique <nav><ul> pour 6 types d'items + 7 types de widgets |
§2.4 |
Location_Interceptor |
Hook wp_nav_menu_args qui remplace les locations wtm_* par le rendu WTM |
§7.5 |
Dynamic_CSS |
Compile un CSS unique (couleurs, typo, breakpoint) sauvegardé dans uploads/wtm-cache/ avec cache-busting |
§2.4.3 |
Shortcode |
[wtm_menu id="123"] ou [wtm_menu location="primary"] |
§2.8.2 |
Assets_Loader |
Enqueue conditionnel des CSS/JS uniquement si un menu est rendu sur la page | §2.6.1 |
Assets frontend
assets/front/wtm-frontend.css(~15 Ko) — styles pour 4 types de menus + méga panel + widgets + responsive + reduced-motionassets/front/wtm-frontend.js(~6 Ko, vanilla JS, pas de jQuery) — off-canvas (focus trap, ESC, overlay), click-trigger mega containers, mobile accordion, footer accordion, sync mini-cart WooCommerce
4 widgets WooCommerce rendus
product_grid— grille de produits (image/nom/prix/bouton Ajouter) viawc_get_products(). Cache transient 12h filtrable.category_grid— grille de catégories avec thumbnailmini_cart— lien vers/cartavec compteur + total synchronisés WCsearch— formulaire de recherche produits WC
8 hooks filters pour développeurs (spec §2.8.4)
wtm_menu_config, wtm_render_item, wtm_menu_classes, wtm_dynamic_css, wtm_map_theme_location, wtm_product_grid_query, wtm_widget_cache_duration, wtm_force_enqueue_assets, + action wtm_rendered_location.
🔒 Sécurité
- Tout le HTML rendu échappé (
esc_url,esc_html,wp_kses_post) - Couleurs validées via regex whitelist (hex / rgb)
- Répertoire de cache protégé par
.htaccess+index.php
🧪 Tests
22/22 PASS (10 backend + 9 browser + 3 non-régression) :
- Shortcode par ID et par location
- Méga menu complet avec 3 colonnes + 4 widgets WC + badge + separator
- Off-canvas : ouverture, focus trap Tab/Shift+Tab, Escape ferme
- Mega click trigger + outside click + Escape ferme
- Mobile 375px responsive + footer accordion collapse
- Enter key sur mega trigger (clavier)
- Dynamic CSS purge sur
save_post_wtm_menu+ régénération - Non-régression Builder React (8 items arbre)
- 0 erreur console, 0 warning React
Rapport complet : download/dnd-tests/Rapport-Tests-v1.2.0.md
📦 Installation
- Téléchargez le ZIP ci-dessous
- Remplacez
wp-content/plugins/woo-total-menu/par le contenu du ZIP - Aucune migration de données — le schéma JSON
_wtm_configest inchangé
🔗 Liens
v1.1.5 — Historique des révisions WordPress + restauration
🎯 v1.1.5 — Historique des révisions WordPress + restauration
Cette version ajoute la gestion historique des révisions WordPress au Builder. Chaque sauvegarde crée désormais une révision du CPT wtm_menu, capturant à la fois les champs du post ET les 6 métadonnées WTM (_wtm_config, _wtm_menu_type, _wtm_location, _wtm_header_config, _wtm_footer_config, _wtm_version).
L'utilisateur peut lister, prévisualiser et restaurer n'importe quelle révision passée depuis un nouveau modal « Historique » dans le Builder.
✨ Nouveautés
- 3 nouvelles routes REST :
GET /wtm/v1/menus/{id}/revisions,GET .../{revision_id},POST .../{revision_id}/restore - Filtre
wtm_max_revisions(défaut 10, spec §7.6) viawp_revisions_to_keep - 6 méta WTM versionnées dans les révisions (
revisions_enabled => true+ filtre_wp_post_revision_meta_keys) - Modal Historique (
HistoryPanel.js) avec overlay, liste scrollable, avatars Gravatar, dates relatives, compteur d'items - Prévisualisation de révision dans l'iframe de preview (pill jaune « Révision #N »)
- Restauration avec confirmation inline (bannière jaune « Restaurer cette révision ? »)
- Hook
wp_restore_post_revisionpour restaurer les méta WTM après une restauration WP core
🐛 Bugs corrigés pendant le développement
3 bugs bloquants ont été découverts et corrigés avant la release :
-
Meta_Boxesseulement instancié en admin →register_post_meta()et le filtre_wp_post_revision_meta_keysn'étaient pas actifs en contexte REST. Les révisions étaient créées mais leur méta était vide. Fix :Bootstrap.phpinstancieMeta_Boxessur toutes les requêtes. -
sanitize_jsonwp_slashait sa valeur de retour → double-wp_slashing au stockage,json_decodeéchouait à la lecture. Ce bug était silencieux en v1.1.4 (parce que le Bug 1 empêchait lesanitize_callbackde s'exécuter en REST). Fix : retirerwp_slashdu retour desanitize_json(). -
Route args avec
defaultcausaient un wipe silencieux du config → un PUT avec{"title":"..."}(pas deconfig) resetait silencieusement le config à la valeur par défaut{"version":1,"items":[]}. Fix : utiliser$request->get_json_params()+isset()pour vérifier le body JSON brut, au lieu deget_param()/has_param()qui incluent les defaults.
🔧 Modifications techniques
Menu_Controller::update_menu()écrit une signature dérivée du config danspost_contentpour garantir qu'une révision est créée à chaque save (WP ne crée pas de révision sur changements meta-only)- Les meta sont mises à jour avant
wp_update_postpour que la révision capture le nouvel état (pas l'ancien) - Bump
Requires at least6.3 → 6.4 (nécessaire pourrevisions_enabledarg deregister_post_meta, aligné avec spec §7.6) - Bump version 1.1.4 → 1.1.5
📊 Métriques
| Métrique | v1.1.4 | v1.1.5 | Delta |
|---|---|---|---|
| Bundle JS (compressé) | 87,2 Ko | 95,2 Ko | +8,0 Ko |
| Bundle CSS | 15,1 Ko | 20,4 Ko | +5,3 Ko |
| Routes REST | 8 | 11 | +3 |
| Composants React | 7 | 8 | +1 |
| Fichiers PHP | 14 | 15 | +1 |
| Hooks WordPress | 18 | 22 | +4 |
✅ Tests
- 22/22 tests PASS (4 backend + 8 UI v1.1.5 + 10 non-régression)
- 8 captures d'écran :
/home/z/my-project/download/dnd-tests/ - Rapport détaillé :
Rapport-Tests-v1.1.5.md
📦 Installation
Téléchargez le ZIP ci-dessous et uploadez-le via WordPress admin → Extensions → Ajouter → Téléverser une extension.
Requires WordPress 6.4+ (changement par rapport à v1.1.4 qui nécessitait 6.3).
v1.1.4 — Live preview via iframe + postMessage
🎯 Objectif
Cette version transforme le panneau central du Builder en véritable aperçu live : ce n'est plus un placeholder statique comme en v1.1.0, mais un iframe qui restitue en direct la configuration du menu, à chaque modification.
🚀 Nouveautés
1. Endpoint admin-ajax.php?action=wtm_preview_frame
Fichier : src/Frontend/Preview_Controller.php (nouveau, 540 lignes)
Ce controller hook wp_ajax_wtm_preview_frame et sert un document HTML auto-contenu (CSS + JS inline, ~10 Ko). Ce document :
- Charge dans un iframe côté Builder
- Écoute les
postMessagereçus du parent (vérificationevent.source === window.parent) - Sur réception d'un message
{ type: 'wtm-render', config, device }, met à jour lebody.classNameavec le device et re-render le menu - Émet un signal
wtm-preview-readyau parent au chargement
Pourquoi admin-ajax et pas REST ? Un <iframe src> ne peut envoyer que des cookies, pas le header X-WP-Nonce requis par WP REST pour cookie auth. admin-ajax.php authentifie via cookie seul pour les utilisateurs connectés — exactement ce qu'il faut.
2. Composant PreviewPanel.js réécrit
Le nouveau composant :
- Charge l'iframe avec
src={previewFrameUrl} - Attend le signal
wtm-preview-readyavant d'envoyer des messages - Sur changement de
menuoudevice, envoie unpostMessagedebounce 250 ms (spec §6.6) - Sur changement de
deviceseul, envoie immédiatement (pas de debounce)
3. Modes responsive (desktop / tablet / mobile)
desktop: 100% (pleine largeur)tablet: 768px, bordure sombre 6px, border-radius 12pxmobile: 375px, bordure sombre 8px, border-radius 24px (look smartphone)
À l'intérieur de l'iframe, le body reçoit wtm-pv-device--{device} qui ajuste le layout du menu (passage en colonne en mobile, etc.).
4. Types d'items et widgets supportés
Le renderer JS de l'iframe sait afficher :
- 6 types d'items : link, mega_container, column, widget, title, separator
- 7 types de widgets : html, banner, product_grid, category_grid, mini_cart, search, custom_link
🔒 Sécurité
| Mesure | Description |
|---|---|
| Permission | current_user_can('wtm_manage_menus') obligatoire |
| X-Frame-Options | SAMEORIGIN — iframe limitée au même domaine |
| sandbox iframe | allow-same-origin allow-scripts — pas de forms, pas de top-nav |
| Origin check | event.source !== window.parent côté iframe |
| postMessage target | window.location.origin côté parent (pas '*') |
✅ Tests
Nouveaux tests spécifiques v1.1.4 (tous passent) :
- ✅ Iframe se charge avec
readyState=complete - ✅ Signal
wtm-preview-readyémis au chargement - ✅ postMessage parent → iframe fonctionne
- ✅ Debounce 250 ms respecté
- ✅ Changement de device immédiat
- ✅ 6 types d'items + 7 types de widgets rendus correctement
- ✅ Save + reload : preview se recharge avec l'état persisté
- ✅ Sécurité : X-Frame-Options, sandbox, permission_callback
Tests de non-régression : 23/23 (DnD, undo/redo, ARIA, persistance).
Rapport complet : download/dnd-tests/RApport-Tests-v1.1.4.md
📊 Métriques
| Métrique | Avant (v1.1.3) | Après (v1.1.4) |
|---|---|---|
| Taille bundle JS | 86,3 Ko | 87,2 Ko |
| Taille bundle CSS | 14,3 Ko | 15,1 Ko |
| Preview panel | Placeholder statique | iframe live + postMessage |
| Refresh preview | Manuel (F5) | Automatique (250 ms debounce) |
| Modes responsive | 3 largeurs CSS | 3 frames visuelles |
| Fichiers PHP | 16 | 17 (+1) |
🔗 Liens
- Tag : https://github.com/georgyfr/woo-total-menu/releases/tag/v1.1.4
- Changelog détaillé :
versions/v1.1.4.md - Rapport de tests :
download/dnd-tests/RApport-Tests-v1.1.4.md - Commit : 0b25b99
v1.1.3 — Fixes UX : indicateur drop temps réel + React 18 + ARIA unique
🎯 Objectif
Cette version est une release de polish qui corrige les 3 bugs résiduels non-bloquants identifiés lors des tests approfondis en navigateur de la v1.1.2.
🐛 Fixes
1. Indicateur de drop temps réel (spec §6.3.2)
Pendant un drag, quand le curseur se déplaçait verticalement à l'intérieur d'un même item, l'indicateur visuel (before/after/inside) ne se mettait pas à jour. Il fallait sortir de l'item et y revenir pour rafraîchir l'indicateur.
Cause racine : le useEffect de SortableTreeItem.js utilisait sortable.activatorEvent.clientY — le Y du pointerdown initial, qui ne change jamais pendant le drag.
Correctif : ajout d'un listener pointermove global qui met à jour cursorPosRef.current et incrémente cursorTick. Le useEffect de calcul dépend maintenant de cursorTick, donc se re-déclenche à chaque mouvement du curseur.
2. Migration React 18 — createRoot (spec §9.2)
Remplacement de ReactDOM.render() (déprécié) par createRoot() depuis @wordpress/element. Corrige le warning React et active les fonctionnalités concurrentes.
3. Annonce ARIA unique en français (spec §6.7)
Après chaque drop, les utilisateurs de lecteur d'écran entendaient deux annonces : l'anglaise par défaut de @dnd-kit et la française du plugin.
Correctif : encapsulation du prop announcements dans accessibility (accessibility={{ announcements: {...} }}) avec toutes les callbacks retournant une chaîne vide.
Note technique : en @dnd-kit/core v6, announcements ne peut PAS être passé au premier niveau du <DndContext> — il atterrit dans ...props et est silencieusement ignoré. Il doit être encapsulé dans accessibility.
✅ Tests
Les 20 tests DnD de la v1.1.2 ont été rejoués sur la v1.1.3 en navigateur headless (Chromium via agent-browser). Tous passent.
Nouveaux tests spécifiques v1.1.3 :
- ✅ L'indicateur visuel passe de
drop-beforeàdrop-afterquand le curseur descend dans un même item - ✅ Aucun warning React n'est émis dans la console au chargement
- ✅ Une seule annonce ARIA est lue par les lecteurs d'écran après un drop
Rapport complet : download/dnd-tests/RApport-Tests-DnD-v1.1.3.md
📊 Métriques
| Métrique | Avant (v1.1.2) | Après (v1.1.3) |
|---|---|---|
| Taille bundle JS | 85,7 Ko | 86,3 Ko |
| Taille bundle CSS | 14,3 Ko | 14,3 Ko |
| Warnings console au load | 2 | 0 |
| Annonces ARIA par drop | 2 (FR + EN) | 1 (FR) |
| Refresh indicateur drag | Non (figé) | Oui (temps réel) |
🔗 Liens
- Tag : https://github.com/georgyfr/woo-total-menu/releases/tag/v1.1.3
- Changelog détaillé :
versions/v1.1.3.md - Rapport de tests :
download/dnd-tests/RApport-Tests-DnD-v1.1.3.md - Commit : 4f737a7
v1.1.2 — Drag & Drop arborescent + Undo/Redo
🎯 Objectif
Cette version rend le builder pleinement interactif en ajoutant le glisser-déposer arborescent complet sur la liste des items, ainsi que l'Undo/Redo et les raccourcis clavier pour une accessibilité WCAG AA.
✅ Nouveautés
Drag & Drop via @dnd-kit (spec §6.3)
- DndContext + PointerSensor + KeyboardSensor
- 3 actions : réordonnancement, cross-level moves, nesting
- Indicateurs visuels : ligne bleue before/after, bordure pointillée inside
- Drag handle (⠿) + DragOverlay ghost
- Auto-expand des containers repliés après 500ms
- Validation des règles de nesting en temps réel
Undo/Redo (spec §9.9)
- Stacks past/future (max 50 snapshots) dans le store wtm/menu
- Boutons Annuler/Rétablir dans le Header
- Raccourcis : Ctrl+Z, Ctrl+Shift+Z, Ctrl+Y
- clearHistory() après chaque saveMenu()
Raccourcis clavier (spec §6.3.5)
- Ctrl+↑/↓ : réordonner parmi les frères
- Ctrl+→ : indenter (enfant du frère précédent)
- Ctrl+← : outdenter (frère du parent)
Accessibilité (spec §6.7)
- aria-live='polite' après chaque déplacement
- aria-grabbed sur les drag handles
- Messages : « déplacé en position dans . »
🔧 Corrections
- 🚨 Bug critique mapItems() : const newItem réassignée → TypeError sur toute opération d'arbre non-root. Corrigé en let newItem.
- moveItem reducer : réécrit avec insertItemAtIndex()
- About.php roadmap : versions marquées 'done' correctement
- package.json version synchronisée (1.1.0 → 1.1.2)
📦 Build
- index.js : 28.6 Ko → 85.7 Ko (+57.1 Ko pour @dnd-kit)
- style-index.css : 11.9 Ko → 14.3 Ko (+2.4 Ko)
🧪 Tests
- ✅ npm run build réussit
- ✅ Plugin activé sur WordPress 6.7.1 + WooCommerce 9.7.1 + SQLite
- ✅ Builder accessible (HTTP 200)
- ✅ Bundle JS contient DndContext, DragOverlay, ADD_ITEM, MOVE_ITEM, UNDO, REDO
- ✅ WTM_VERSION = 1.1.2
📋 Périmètre exclus (non réalisable selon analyse du cahier des charges)
- ❌ Assistant IA copilote complet (Ch. 12) — à rescoper en v2.0
- ❌ Auto-adaptation ML temps réel
- ❌ Heatmaps intégrées
- ❌ WebLLM embarqué
- ❌ Support vocal
- ❌ Promesse 'zéro impact performance'
- ❌ Compatibilité universelle
🔗 Liens
🚀 Prochaines étapes
| Version | Contenu |
|---|---|
| v1.1.3 | Live preview via iframe + postMessage |
| v1.1.4 | Undo/Redo révisions WordPress + historique |
| v1.2.0 | Rendu frontend : Menu_Walker, méga menu, off-canvas mobile |