/** * Author: Simon-Pierre Boucher * Contact: contact@spboucher.ai * Project: Groupe Ka / Ka Maps * * Fond de carte Ka Maps : Mapbox Standard, configuré pour l'immobilier. * Le style Standard apporte les bâtiments 3D photoréalistes, les repères * et l'éclairage dynamique. Chaque produit choisit son niveau de réalisme * via KaBasemapOptions (thème pleine couleur ou « faded », préréglage de * lumière, repères 3D) — le jour/nuit bascule via lightPreset (Ka Light / * Ka Dark) sans recharger le style. */ import type { Map as MapboxMap } from "mapbox-gl"; import type { KaMapMode, KaMapTheme } from "../theming/tokens.js"; /** Style Mapbox Standard — 3D natif, repères, éclairage. */ export const KA_STYLE_URL = "mapbox://styles/mapbox/standard"; export const KA_ATTRIBUTION = "© Mapbox © OpenStreetMap"; /** Réglages produit du fond Mapbox Standard. */ export interface KaBasemapOptions { /** "default" = pleine couleur réaliste ; "faded" = atténué (les prix * dominent) ; "monochrome" = neutre. Défaut : "faded". */ theme?: "default" | "faded" | "monochrome"; /** Préréglage lumière du mode clair (le mode sombre force "dusk"). * "day" à midi, "dawn" pour une lumière rasante plus sculpturale. */ lightPreset?: "dawn" | "day" | "dusk" | "night"; /** Repères 3D emblématiques (stades, ponts, églises…). Défaut : true. */ showLandmarks?: boolean; /** Étiquettes de commerces/POI. Défaut : false (la carte montre des * propriétés, pas des commerces). */ showPointOfInterestLabels?: boolean; /** Couleur du bâtiment « sélectionné » (état select du featureset * buildings) — utilisée par KaMap.focusBuilding. */ colorBuildingSelect?: string; /** Couleur du bâtiment « survolé » (état highlight). */ colorBuildingHighlight?: string; } /** * Retourne l'URL de style pour un mode/thème. (Signature conservée : le * jour/nuit et les réglages passent par applyKaBasemapConfig, pas par un * style différent.) */ export function buildKaStyle(_mode: KaMapMode, _theme: KaMapTheme): string { return KA_STYLE_URL; } /** * Applique les réglages du fond Standard — à appeler après style.load et à * chaque changement de mode. Les propriétés absentes d'une future version * du style sont ignorées (non bloquant). */ export function applyKaBasemapConfig( map: MapboxMap, mode: KaMapMode, basemap?: KaBasemapOptions, ): void { const set = (key: string, value: unknown) => { try { map.setConfigProperty("basemap", key, value); } catch { // propriété absente sur une future version du style : non bloquant } }; set("theme", basemap?.theme ?? "faded"); set( "lightPreset", mode === "dark" ? "dusk" : basemap?.lightPreset ?? "day", ); set("showPointOfInterestLabels", basemap?.showPointOfInterestLabels ?? false); set("showTransitLabels", false); set("showPedestrianRoads", true); set("show3dObjects", true); set("showLandmarkIcons", basemap?.showLandmarks ?? true); if (basemap?.colorBuildingSelect) set("colorBuildingSelect", basemap.colorBuildingSelect); if (basemap?.colorBuildingHighlight) set("colorBuildingHighlight", basemap.colorBuildingHighlight); }