Mason Capital Group — Downtown Bentonville Explore Map
https://unpkg.com/leaflet@1.9.4/dist/leaflet.css
https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.css
Eat
Drink
Shop
Public Art
Attractions
Mason Capital Group · Downtown Map
// Mason brand tints for categories (visual match to DBI Explore filters)
const BRAND = '#b80003';
const TINTS = { attractions:'#ffc1c3', eat:'#ffe9ea', drink:'#ffe1e2', shop:'#ffd5d6', art:'#ffcbcd' };
// Build map
const map = L.map('map', { scrollWheelZoom:false });
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{
maxZoom:19,
attribution:'© OpenStreetMap contributors | Curated by Mason Capital Group'
}).addTo(map);
// Layer groups w/ clustering
const groups = {
attractions: L.markerClusterGroup({ spiderfyOnMaxZoom:true }),
eat: L.markerClusterGroup({ spiderfyOnMaxZoom:true }),
drink: L.markerClusterGroup({ spiderfyOnMaxZoom:true }),
shop: L.markerClusterGroup({ spiderfyOnMaxZoom:true }),
art: L.markerClusterGroup({ spiderfyOnMaxZoom:true })
};
// Helpers
const iconStyle = (t)=>({ radius:8, weight:2, color:BRAND, fillColor:t, fillOpacity:.9 });
function addPOI(p, layerName){
if (!p.lat || !p.lng) return;
const m = L.circleMarker([p.lat, p.lng], iconStyle(TINTS[layerName]));
const link = p.url ? ` ${p.url}Details →` : '';
m.bindPopup(`
${p.name}
${p.address||''}
${link}
`);
groups[layerName].addLayer(m);
return m.getLatLng();
}
// Load data
const DATA = JSON.parse(document.getElementById('MASON_DATA').textContent);
const bounds = L.latLngBounds();
// Add each category
['eat','drink','shop','art','attractions'].forEach(layer=>{
(DATA[layer]||[]).forEach(p=>{
const ll = addPOI(p, layer);
if (ll) bounds.extend(ll);
});
groups[layer].addTo(map);
});
// Fit to markers (fallback to Square)
if (bounds.isValid()) map.fitBounds(bounds.pad(0.15));
else map.setView([36.37246, -94.20867], 16);
// Chip toggles (like DBI Explore)
document.getElementById('chipbar').addEventListener('click', (e)=>{
const chip = e.target.closest('.chip'); if (!chip) return;
chip.classList.toggle('active');
const key = chip.dataset.layer;
if (chip.classList.contains('active')) groups[key].addTo(map);
else map.removeLayer(groups[key]);
});