Skip to content

Changelog

All notable changes to @geoleaf/core are documented here.

Format: Keep a ChangelogSemantic Versioning.


[Unreleased]

Added

  • Geocoding : 31ème export nommé ESM. Module de recherche d'adresse lazy-loadé (_loadModule("geocoding")), API GeoLeaf.Geocoding. Quatre fournisseurs intégrés : addok, nominatim, photon, URL personnalisée.
  • geoleaf:geocoding:result : nouvel événement émis lors de la sélection d'un résultat de géocodage — payload { label, lat, lng, bounds? }.
  • GeocodingConfig dans ui.json ou geoleaf.config.json : paramètres enabled, provider, position, placeholder, minChars, resultLimit, debounceMs, flyToZoom.

[2.0.0] - 2026-03-22

First public release on npm. See the full release notes for complete details.

⚠️ Breaking Changes

  • Leaflet → MapLibre GL JS v5 : moteur de rendu remplacé. Supprimer leaflet / leaflet.markercluster, ajouter maplibre-gl@^5.0.0 en peer dependency.
  • Convention coordonnées : [lat, lng] (Leaflet) → [lng, lat] (GeoJSON/MapLibre standard).
  • Scope npm renommé : geoleaf@geoleaf/core.
  • UMD supprimé : distribution ESM-only. Remplacer <script src="geoleaf.umd.js"> par <script type="module">.
  • container:mapId: : clé d'initialisation du conteneur carte renommée.
  • applyTheme(theme)applyTheme(layerId, themeId) : signature changée.
  • CSS : classes .leaflet-*.maplibregl-* (MapLibre) + .gl-* (GeoLeaf interne).

Added

  • MaplibreAdapter : implémentation complète de IMapAdapter (33 méthodes) — rendu WebGL, clustering GPU natif, MVT/PBF vector tiles.
  • @geoleaf/connector v1.0.0 (MIT, npm public) : intercepteur fetch universel pour sources géospatiales authentifiées (GeoJSON, WFS, vector tiles, PMTiles).
  • Basemaps : CARTO Positron / Dark Matter / Voyager, ESRI Street, support pmtiles://.
  • Performance marks : window.__GEOLEAF_PERF__ = true active 8 paires de marks (TTI, boot, modules...).
  • Architecture TypeScript : lazy-module-loader.ts, loader-types.ts (13 interfaces service locator), contracts enrichis (api.contract.ts, ui-controls.contract.ts, map-adapter.contract.ts).
  • Sécurité : module CSRF complet (csrf-token.ts), DOMSecurity.setSafeHTML() systématique, CSS.escape() sur POI IDs.
  • Accessibilité : prefers-reduced-motion, :focus-visible, aria-label + role="img" sur markers MapLibre.
  • Documentation : site VitePress geoleaf.dev/docs/, TypeDoc dual entries, 273 fichiers déployés.

Changed

  • Build : UMD supprimé — 3 sorties ESM (bundle full chunked, preserveModules, lite sans table/labels/route/search).
  • Tests : migration complète Jest → Vitest 3 + Istanbul — 323 suites, 8 317 tests, couverture branches 77,97 %.
  • TypeScript strict : 30 @ts-nocheck supprimés, 0 erreur tsc --noEmit --strict.
  • Dead code : 7 fichiers orphelins et 172 exports morts supprimés (Knip).
  • Filtres GeoJSON : nouveau chemin MapLibre via updateLayerData() sans corruption du dataset source.

Fixed

  • Basemap raster s'affichait au-dessus de toutes les couches GeoJSON/POI/route.
  • Style selector niveau racine — wrapper non déroulé avant normalizeToFlat().
  • Clustering natif MapLibre — options cluster/clusterRadius/clusterMaxZoom non propagées à la source.
  • Side panel vide — objets imbriqués sérialisés en JSON string par MapLibre lors des clics.
  • Échelle graphique invisible — classes CSS .gl-scale-graphic absentes.
  • Labels glyphs 404 — _resolveMapFontStack() avec fallback dynamique.
  • Visibilité zoom ignorée après changement de thème.
  • StyleRules data-driven inopérantes — préfixe "properties." incorrect dans les expressions MapLibre.

Performance

Métriquev1.x (Leaflet)v2.0.0 (MapLibre)
10 000 markers4 FPS (DOM)60 FPS (GPU)
10 000 GeoJSON572 ms< 100 ms WebGL
ESM bundle gzip35 KB~35 KB
UMD bundle196 KB gzip❌ supprimé

Migration

Released under the MIT License.