import { Path } from 'leaflet'; import { parseAttributeValue } from './utils.ts'; // The set of HTML attribute names that map to Leaflet Path style options. // These are handled especially because Leaflet exposes them through // setStyle() rather than individual setter methods, and they are shared // across many vector components (polyline, polygon, circle, rectangle). const PATH_STYLE_ATTRS = new Set([ 'color', 'weight', 'opacity', 'fill', 'fill-color', 'fill-opacity', 'stroke', 'dash-array', 'dash-offset', 'line-cap', 'line-join', 'fill-rule', ]); // Quick check for whether an attribute name is a path-style attribute. // Used in attributeChangedCallback to decide whether to route through // setLayerAttr or updatePathStyle. export function isPathStyleAttr(name: string): boolean { return PATH_STYLE_ATTRS.has(name); } // Applies a single style change to a Leaflet Path by converting the // kebab-case attribute name to camelCase and calling setStyle() with // the parsed value. This is called instead of the generic setLayerAttr // dispatcher because Path.setStyle is a bulk-update method that merges // into the existing style object rather than replacing it. export function updatePathStyle(obj: Path, name: string, value: string | null) { const key = name.replace(/-([a-z])/g, (g) => g[1].toUpperCase()); obj.setStyle({ [key]: parseAttributeValue(value) }); }