import stylegen from '@maplibre/maplibre-gl-inspect/lib/stylegen' import colors from '@maplibre/maplibre-gl-inspect/lib/colors' import type {FilterSpecification,LayerSpecification } from 'maplibre-gl' export type HighlightedLayer = LayerSpecification & {filter?: FilterSpecification}; function changeLayer(l: HighlightedLayer, layer: LayerSpecification) { if(l.type === 'circle') { l.paint!['circle-radius'] = 3 } else if(l.type === 'line') { l.paint!['line-width'] = 2 } if("filter" in layer) { l.filter = layer.filter } else { delete l['filter'] } l.id = l.id + '_highlight' return l } export function colorHighlightedLayer(layer?: LayerSpecification): HighlightedLayer | null { if(!layer || layer.type === 'background' || layer.type === 'raster') return null const sourceLayerId = layer['source-layer'] || '' const color = colors.brightColor(sourceLayerId, 1); if(layer.type === "fill" || layer.type === 'fill-extrusion') { return changeLayer(stylegen.polygonLayer(color, color, layer.source, layer['source-layer']), layer) } if(layer.type === "symbol" || layer.type === 'circle') { return changeLayer(stylegen.circleLayer(color, layer.source, layer['source-layer']), layer) } if(layer.type === 'line') { return changeLayer(stylegen.lineLayer(color, layer.source, layer['source-layer']), layer) } return null }