{"version":3,"file":"MultiPointMap.zyvqBxot.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/9tW93jsppTiU2TATuzg3/IN2Qb4lSp0CZPHXx338Q/MultiPointMap.js"],"sourcesContent":["// OpenStreetMap avec Clustering Automatique + Cache\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef,useState}from\"react\";import{addPropertyControls,ControlType}from\"framer\";// Cache en mémoire partagé (persiste pendant toute la session)\nconst geocodeMemoryCache={};// Détection Mac\nconst isMac=typeof navigator!==\"undefined\"&&/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent);/**\n * OpenStreetMap with Address Geocoding & Clustering\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function MultiPointMap(props){const{locations,zoom,centerMap,defaultMarkerImage,markerSize,showLabels,enableClustering,clusterColor,style}=props;const mapRef=useRef(null);const mapInstance=useRef(null);const markersRef=useRef([]);const clusterGroupRef=useRef(null);const[isLoaded,setIsLoaded]=useState(false);const[isClusteringLoaded,setIsClusteringLoaded]=useState(false);const[isGeocoding,setIsGeocoding]=useState(false);const[geocodedLocations,setGeocodedLocations]=useState([]);const[showScrollHint,setShowScrollHint]=useState(false);const hintTimeoutRef=useRef(null);// Charger Leaflet + Clustering\nuseEffect(()=>{const win=window;if(win.L&&win.L.markerClusterGroup){setIsLoaded(true);setIsClusteringLoaded(true);return;}const cssLink=document.createElement(\"link\");cssLink.rel=\"stylesheet\";cssLink.href=\"https://unpkg.com/leaflet@1.9.4/dist/leaflet.css\";document.head.appendChild(cssLink);const clusterCSS=document.createElement(\"link\");clusterCSS.rel=\"stylesheet\";clusterCSS.href=\"https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.css\";document.head.appendChild(clusterCSS);const clusterDefaultCSS=document.createElement(\"link\");clusterDefaultCSS.rel=\"stylesheet\";clusterDefaultCSS.href=\"https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.Default.css\";document.head.appendChild(clusterDefaultCSS);const script=document.createElement(\"script\");script.src=\"https://unpkg.com/leaflet@1.9.4/dist/leaflet.js\";script.async=true;script.onload=()=>{setIsLoaded(true);const clusterScript=document.createElement(\"script\");clusterScript.src=\"https://unpkg.com/leaflet.markercluster@1.5.3/dist/leaflet.markercluster.js\";clusterScript.async=true;clusterScript.onload=()=>setIsClusteringLoaded(true);document.body.appendChild(clusterScript);};document.body.appendChild(script);},[]);// Géocoder les adresses avec cache\nuseEffect(()=>{if(!locations?.length)return;const CACHE_KEY=\"framer_geocode_cache_v1\";const loadPersistentCache=()=>{try{const stored=localStorage.getItem(CACHE_KEY);if(stored){Object.assign(geocodeMemoryCache,JSON.parse(stored));}}catch{}};const savePersistentCache=()=>{try{localStorage.setItem(CACHE_KEY,JSON.stringify(geocodeMemoryCache));}catch{}};const geocodeAddresses=async()=>{loadPersistentCache();setIsGeocoding(true);const totalAddresses=locations.length;const cachedCount=locations.filter(l=>geocodeMemoryCache[l.address.toLowerCase().trim()]).length;console.group(\"🗺️ MultiPointMap — D\\xe9marrage g\\xe9ocodage\");console.log(`📍 Total adresses : ${totalAddresses}`);console.log(`⚡ En cache : ${cachedCount} (0 requ\\xeate API)`);console.log(`🌐 \\xc0 g\\xe9ocoder : ${totalAddresses-cachedCount} (requ\\xeates API)`);console.groupEnd();const results=[];let successCount=0;let failCount=0;let cacheHitCount=0;for(const location of locations){const cacheKey=location.address.toLowerCase().trim();if(geocodeMemoryCache[cacheKey]){cacheHitCount++;console.log(`✅ [CACHE] ${location.address}`,{lat:geocodeMemoryCache[cacheKey].lat,lng:geocodeMemoryCache[cacheKey].lng});results.push({lat:geocodeMemoryCache[cacheKey].lat,lng:geocodeMemoryCache[cacheKey].lng,label:location.label||location.address,address:location.address,image:location.image,planityUrl:location.planityUrl});continue;}console.log(`🌐 [API] G\\xe9ocodage en cours : \"${location.address}\"...`);try{const response=await fetch(`https://nominatim.openstreetmap.org/search?format=json&q=${encodeURIComponent(location.address)}&limit=1`,{headers:{\"User-Agent\":\"FramerMapComponent/1.0\"}});if(response.status===429){console.warn(`⏸️ [RATE LIMIT] Nominatim surcharg\\xe9 — pause 3s puis skip : \"${location.address}\"`);failCount++;await new Promise(r=>setTimeout(r,3e3));continue;}const data=await response.json();if(data?.length>0){const coords={lat:parseFloat(data[0].lat),lng:parseFloat(data[0].lon)};geocodeMemoryCache[cacheKey]=coords;successCount++;console.log(`✅ [API OK] \"${location.address}\"`,coords);results.push({...coords,label:location.label||location.address,address:location.address,image:location.image,planityUrl:location.planityUrl});}else{failCount++;console.warn(`❌ [INTROUVABLE] Adresse non reconnue par Nominatim : \"${location.address}\"`);}}catch(error){failCount++;console.error(`💥 [ERREUR R\\xc9SEAU] Impossible de g\\xe9ocoder : \"${location.address}\"`,error);}await new Promise(r=>setTimeout(r,1200));}savePersistentCache();setGeocodedLocations(results);setIsGeocoding(false);console.group(\"🏁 MultiPointMap — R\\xe9sultat final\");console.log(`✅ Markers affich\\xe9s : ${results.length} / ${totalAddresses}`);console.log(`⚡ Depuis le cache : ${cacheHitCount}`);console.log(`🌐 Nouvelles requ\\xeates API : ${successCount}`);if(failCount>0){console.warn(`❌ \\xc9checs : ${failCount} (adresses introuvables ou rate limit)`);}else{console.log(`🎉 Aucun \\xe9chec !`);}console.groupEnd();};geocodeAddresses();},[locations]);// Initialiser et mettre à jour la carte\nuseEffect(()=>{if(!isLoaded||!isClusteringLoaded||!mapRef.current||!geocodedLocations?.length)return;const win=window;if(!win.L)return;if(!mapInstance.current){const center=geocodedLocations[0]||{lat:48.8584,lng:2.2945};mapInstance.current=win.L.map(mapRef.current,{center:[center.lat,center.lng],zoom:zoom,zoomControl:true,scrollWheelZoom:false});// Zoom molette uniquement avec Ctrl (Windows/Linux) ou Cmd (Mac)\nmapRef.current.addEventListener(\"wheel\",e=>{if(e.ctrlKey||e.metaKey){mapInstance.current.scrollWheelZoom.enable();}else{mapInstance.current.scrollWheelZoom.disable();setShowScrollHint(true);clearTimeout(hintTimeoutRef.current);hintTimeoutRef.current=setTimeout(()=>setShowScrollHint(false),2e3);}},{passive:true});win.L.tileLayer(\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\",{attribution:'&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a>',maxZoom:19}).addTo(mapInstance.current);}else{mapInstance.current.setZoom(zoom);}if(clusterGroupRef.current){mapInstance.current.removeLayer(clusterGroupRef.current);}markersRef.current.forEach(marker=>mapInstance.current.removeLayer(marker));markersRef.current=[];if(enableClustering&&win.L.markerClusterGroup){clusterGroupRef.current=win.L.markerClusterGroup({iconCreateFunction:function(cluster){const count=cluster.getChildCount();return win.L.divIcon({html:`\n                            <div style=\"\n                                width: 50px;\n                                height: 50px;\n                                background: ${clusterColor};\n                                border: 4px solid white;\n                                border-radius: 50%;\n                                display: flex;\n                                align-items: center;\n                                justify-content: center;\n                                font-weight: bold;\n                                color: white;\n                                font-size: 16px;\n                                box-shadow: 0 4px 12px rgba(0,0,0,0.3);\n                                font-family: sans-serif;\n                            \">\n                                ${count}\n                            </div>\n                        `,className:\"custom-cluster-icon\",iconSize:win.L.point(50,50)});},spiderfyOnMaxZoom:true,showCoverageOnHover:false,zoomToBoundsOnClick:true,maxClusterRadius:80});}const bounds=win.L.latLngBounds();geocodedLocations.forEach(loc=>{const imageUrl=loc.image||defaultMarkerImage;const markerIcon=win.L.divIcon({className:\"custom-image-marker\",html:`\n                    <div style=\"\n                        position: relative;\n                        width: ${markerSize}px;\n                        height: ${markerSize}px;\n                    \">\n                        <div style=\"\n                            width: 100%;\n                            height: 100%;\n                            background-image: url('${imageUrl}');\n                            background-size: cover;\n                            background-position: center;\n                            border: 3px solid white;\n                            border-radius: 50%;\n                            box-shadow: 0 4px 12px rgba(0,0,0,0.3);\n                        \"></div>\n                        <div style=\"\n                            position: absolute;\n                            bottom: -8px;\n                            left: 50%;\n                            transform: translateX(-50%);\n                            width: 0;\n                            height: 0;\n                            border-left: 8px solid transparent;\n                            border-right: 8px solid transparent;\n                            border-top: 12px solid white;\n                            filter: drop-shadow(0 2px 4px rgba(0,0,0,0.2));\n                        \"></div>\n                    </div>\n                `,iconSize:[markerSize,markerSize+12],iconAnchor:[markerSize/2,markerSize+12]});const marker=win.L.marker([loc.lat,loc.lng],{icon:markerIcon});if(showLabels){marker.bindPopup(`\n                    <div style=\"text-align: center; font-family: sans-serif; min-width: 140px;\">\n                        ${imageUrl?`<img src=\"${imageUrl}\" alt=\"${loc.label}\" style=\"width: 80px; height: 80px; object-fit: cover; border-radius: 8px; margin-bottom: 8px;\" />`:\"\"}\n                        <div style=\"font-weight: bold; font-size: 14px; margin-bottom: 6px;\">${loc.label}</div>\n                        <p style=\"font-size: 12px; color: #6b7280; margin: 0 0 ${loc.planityUrl?\"10px\":\"0\"} 0; line-height: 1.4;\">${loc.address}</p>\n                        ${loc.planityUrl?`\n                        <a href=\"${loc.planityUrl}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"\n                            display: inline-flex;\n                            align-items: center;\n                            gap: 6px;\n                            background: #000;\n                            color: white;\n                            text-decoration: none;\n                            padding: 8px 14px;\n                            border-radius: 8px;\n                            font-size: 13px;\n                            font-weight: 600;\n                            font-family: sans-serif;\n                            cursor: pointer;\n                            transition: opacity 0.2s;\n                        \" onmouseover=\"this.style.opacity='0.8'\" onmouseout=\"this.style.opacity='1'\">\n                            <img src=\"https://www.planity.com/favicon.ico\" width=\"16\" height=\"16\" style=\"border-radius: 3px;\" onerror=\"this.style.display='none'\" />\n                            Prendre RDV\n                        </a>`:\"\"}\n                    </div>\n                `,{maxWidth:200});}if(enableClustering&&clusterGroupRef.current){clusterGroupRef.current.addLayer(marker);}else{marker.addTo(mapInstance.current);markersRef.current.push(marker);}bounds.extend([loc.lat,loc.lng]);});if(enableClustering&&clusterGroupRef.current){mapInstance.current.addLayer(clusterGroupRef.current);}if(centerMap&&geocodedLocations.length>1){mapInstance.current.fitBounds(bounds,{padding:[50,50]});}else if(centerMap&&geocodedLocations.length===1){mapInstance.current.setView([geocodedLocations[0].lat,geocodedLocations[0].lng],zoom);}},[isLoaded,isClusteringLoaded,geocodedLocations,zoom,centerMap,defaultMarkerImage,markerSize,showLabels,enableClustering,clusterColor]);// Cleanup\nuseEffect(()=>{return()=>{if(mapInstance.current){mapInstance.current.remove();mapInstance.current=null;}clearTimeout(hintTimeoutRef.current);};},[]);if(!isLoaded||!isClusteringLoaded||isGeocoding){return /*#__PURE__*/_jsxs(\"div\",{style:{width:\"100%\",height:\"100%\",display:\"flex\",flexDirection:\"column\",alignItems:\"center\",justifyContent:\"center\",backgroundColor:\"#f3f4f6\",borderRadius:8,gap:12,...style},children:[/*#__PURE__*/_jsx(\"div\",{style:{width:40,height:40,border:\"4px solid #e5e7eb\",borderTop:\"4px solid #3b82f6\",borderRadius:\"50%\",animation:\"spin 1s linear infinite\"}}),isGeocoding&&/*#__PURE__*/_jsx(\"div\",{style:{fontSize:14,color:\"#6b7280\",fontFamily:\"sans-serif\"},children:\"G\\xe9olocalisation des adresses...\"}),/*#__PURE__*/_jsx(\"style\",{children:`@keyframes spin { to { transform: rotate(360deg); } }`})]});}// Touche modificatrice adaptée à l'OS détecté\nconst modifierKey=isMac?\"⌘ Cmd\":\"Ctrl\";return /*#__PURE__*/_jsxs(\"div\",{style:{position:\"relative\",width:\"100%\",height:\"100%\",borderRadius:8,overflow:\"hidden\",...style},children:[/*#__PURE__*/_jsx(\"div\",{ref:mapRef,style:{width:\"100%\",height:\"100%\"},\"aria-label\":\"Map with multiple locations\",role:\"region\"}),showScrollHint&&/*#__PURE__*/_jsxs(\"div\",{style:{position:\"absolute\",top:\"50%\",left:\"50%\",transform:\"translate(-50%, -50%)\",background:\"rgba(0, 0, 0, 0.72)\",color:\"white\",padding:\"12px 20px\",borderRadius:12,fontFamily:\"sans-serif\",fontSize:14,fontWeight:500,pointerEvents:\"none\",zIndex:1e3,backdropFilter:\"blur(6px)\",whiteSpace:\"nowrap\",display:\"flex\",alignItems:\"center\",gap:8,boxShadow:\"0 4px 20px rgba(0,0,0,0.3)\"},children:[\"🖱️ Utilisez\",/*#__PURE__*/_jsx(\"span\",{style:{background:\"rgba(255,255,255,0.2)\",padding:\"2px 8px\",borderRadius:6,fontFamily:\"monospace\",fontSize:13,border:\"1px solid rgba(255,255,255,0.3)\"},children:modifierKey}),\"+\",/*#__PURE__*/_jsx(\"span\",{style:{background:\"rgba(255,255,255,0.2)\",padding:\"2px 8px\",borderRadius:6,fontFamily:\"monospace\",fontSize:13,border:\"1px solid rgba(255,255,255,0.3)\"},children:\"molette\"}),\"pour zoomer\"]})]});}addPropertyControls(MultiPointMap,{locations:{type:ControlType.Array,title:\"Locations\",control:{type:ControlType.Object,controls:{address:{type:ControlType.String,title:\"Adresse\",defaultValue:\"Tour Eiffel, Paris, France\",placeholder:\"Ex: 12 rue Example, Paris\",description:\"Adresse compl\\xe8te (rue, ville, pays)\"},label:{type:ControlType.String,title:\"Label\",defaultValue:\"Paris\",description:\"Nom affich\\xe9 sur le marker\"},image:{type:ControlType.Image,title:\"Image (optionnel)\",description:\"Image sp\\xe9cifique pour ce marker\"},planityUrl:{type:ControlType.String,title:\"Lien Planity\",placeholder:\"https://www.planity.com/...\",description:\"URL de r\\xe9servation Planity pour ce salon\"}}},defaultValue:[{address:\"Tour Eiffel, Paris, France\",label:\"Paris\",image:\"https://images.unsplash.com/photo-1502602898657-3e91760cbb34?w=100\"},{address:\"Place du Capitole, Toulouse, France\",label:\"Toulouse\",image:\"https://images.unsplash.com/photo-1555881675-4e94e5c36f5e?w=100\"},{address:\"Place Bellecour, Lyon, France\",label:\"Lyon\",image:\"https://images.unsplash.com/photo-1524396309943-e03f5249f002?w=100\"}],maxCount:100},enableClustering:{type:ControlType.Boolean,title:\"🔢 Enable Clustering\",defaultValue:true,description:\"Regroupe les markers proches avec compteur\"},clusterColor:{type:ControlType.Color,title:\"Cluster Color\",defaultValue:\"#FF6B35\",hidden:props=>!props.enableClustering},defaultMarkerImage:{type:ControlType.Image,title:\"Default Marker Image\",description:\"Image par d\\xe9faut si aucune image n'est d\\xe9finie\"},markerSize:{type:ControlType.Number,title:\"Marker Size\",defaultValue:50,min:30,max:100,step:5,displayStepper:true,unit:\"px\"},zoom:{type:ControlType.Number,title:\"Zoom\",defaultValue:6,min:1,max:18,step:1,displayStepper:true},centerMap:{type:ControlType.Boolean,title:\"Auto Center\",defaultValue:true,description:\"Centrer automatiquement sur tous les markers\"},showLabels:{type:ControlType.Boolean,title:\"Show Labels\",defaultValue:true,description:\"Afficher les labels au clic\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"MultiPointMap\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./MultiPointMap.map"],"mappings":"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"}