+ // modules/osm/tags.js
+ function osmIsInterestingTag(key) {
+ return key !== "attribution" && key !== "created_by" && key !== "source" && key !== "odbl" && key.indexOf("source:") !== 0 && key.indexOf("source_ref") !== 0 && // purposely exclude colon
+ key.indexOf("tiger:") !== 0;
+ }
+ var osmLifecyclePrefixes = {
+ // nonexistent, might be built
+ proposed: true,
+ planned: true,
+ // under maintenance or between groundbreaking and opening
+ construction: true,
+ // existent but not functional
+ disused: true,
+ // dilapidated to nonexistent
+ abandoned: true,
+ was: true,
+ // nonexistent, still may appear in imagery
+ dismantled: true,
+ razed: true,
+ demolished: true,
+ destroyed: true,
+ removed: true,
+ obliterated: true,
+ // existent occasionally, e.g. stormwater drainage basin
+ intermittent: true
+ };
+ function osmRemoveLifecyclePrefix(key) {
+ const keySegments = key.split(":");
+ if (keySegments.length === 1) return key;
+ if (keySegments[0] in osmLifecyclePrefixes) {
+ return key.slice(keySegments[0].length + 1);
+ }
+ return key;
+ }
+ var osmAreaKeys = {};
+ function osmSetAreaKeys(value) {
+ osmAreaKeys = value;
+ }
+ var osmAreaKeysExceptions = {
+ highway: {
+ elevator: true,
+ rest_area: true,
+ services: true
+ },
+ public_transport: {
+ platform: true
+ },
+ railway: {
+ platform: true,
+ roundhouse: true,
+ station: true,
+ traverser: true,
+ turntable: true,
+ wash: true,
+ ventilation_shaft: true
+ },
+ waterway: {
+ dam: true
+ },
+ amenity: {
+ bicycle_parking: true
+ }
+ };
+ function osmTagSuggestingArea(tags) {
+ if (tags.area === "yes") return { area: "yes" };
+ if (tags.area === "no") return null;
+ var returnTags = {};
+ for (var realKey in tags) {
+ const key = osmRemoveLifecyclePrefix(realKey);
+ if (key in osmAreaKeys && !(tags[realKey] in osmAreaKeys[key])) {
+ returnTags[realKey] = tags[realKey];
+ return returnTags;
+ }
+ if (key in osmAreaKeysExceptions && tags[realKey] in osmAreaKeysExceptions[key]) {
+ returnTags[realKey] = tags[realKey];
+ return returnTags;
+ }
+ }
+ return null;
+ }
+ var osmLineTags = {};
+ function osmSetLineTags(value) {
+ osmLineTags = value;
+ }
+ var osmPointTags = {};
+ function osmSetPointTags(value) {
+ osmPointTags = value;
+ }
+ var osmVertexTags = {};
+ function osmSetVertexTags(value) {
+ osmVertexTags = value;
+ }
+ function osmNodeGeometriesForTags(nodeTags) {
+ var geometries = {};
+ for (var key in nodeTags) {
+ if (osmPointTags[key] && (osmPointTags[key]["*"] || osmPointTags[key][nodeTags[key]])) {
+ geometries.point = true;
+ }
+ if (osmVertexTags[key] && (osmVertexTags[key]["*"] || osmVertexTags[key][nodeTags[key]])) {
+ geometries.vertex = true;
+ }
+ if (geometries.point && geometries.vertex) break;
+ }
+ return geometries;
+ }
+ var osmOneWayForwardTags = {
+ "aerialway": {
+ "chair_lift": true,
+ "drag_lift": true,
+ "j-bar": true,
+ "magic_carpet": true,
+ "mixed_lift": true,
+ "platter": true,
+ "rope_tow": true,
+ "t-bar": true,
+ "zip_line": true
+ },
+ "conveying": {
+ "forward": true
+ },
+ "highway": {
+ "motorway": true
+ },
+ "junction": {
+ "circular": true,
+ "roundabout": true
+ },
+ "man_made": {
+ "goods_conveyor": true,
+ "piste:halfpipe": true
+ },
+ "oneway": {
+ "yes": true
+ },
+ "piste:type": {
+ "downhill": true,
+ "sled": true,
+ "yes": true
+ },
+ "seamark:type": {
+ "two-way_route": true,
+ "recommended_traffic_lane": true,
+ "separation_lane": true,
+ "separation_roundabout": true
+ },
+ "waterway": {
+ "canal": true,
+ "ditch": true,
+ "drain": true,
+ "fish_pass": true,
+ "flowline": true,
+ "pressurised": true,
+ "river": true,
+ "spillway": true,
+ "stream": true,
+ "tidal_channel": true
+ }
+ };
+ var osmOneWayBackwardTags = {
+ "conveying": {
+ "backward": true
+ },
+ "oneway": {
+ "-1": true
+ }
+ };
+ var osmOneWayBiDirectionalTags = {
+ "conveying": {
+ "reversible": true
+ },
+ "oneway": {
+ "alternating": true,
+ "reversible": true
+ }
+ };
+ var osmOneWayTags = merge_default3(
+ osmOneWayForwardTags,
+ osmOneWayBackwardTags,
+ osmOneWayBiDirectionalTags
+ );
+ var osmPavedTags = {
+ "surface": {
+ "paved": true,
+ "asphalt": true,
+ "concrete": true,
+ "chipseal": true,
+ "concrete:lanes": true,
+ "concrete:plates": true
+ },
+ "tracktype": {
+ "grade1": true
+ }
+ };
+ var osmSemipavedTags = {
+ "surface": {
+ "cobblestone": true,
+ "cobblestone:flattened": true,
+ "unhewn_cobblestone": true,
+ "sett": true,
+ "paving_stones": true,
+ "metal": true,
+ "wood": true
+ }
+ };
+ var osmRightSideIsInsideTags = {
+ "natural": {
+ "cliff": true,
+ "coastline": "coastline"
+ },
+ "barrier": {
+ "retaining_wall": true,
+ "kerb": true,
+ "guard_rail": true,
+ "city_wall": true
+ },
+ "man_made": {
+ "embankment": true,
+ "quay": true
+ },
+ "waterway": {
+ "weir": true
+ }
+ };
+ var osmRoutableHighwayTagValues = {
+ motorway: true,
+ trunk: true,
+ primary: true,
+ secondary: true,
+ tertiary: true,
+ residential: true,
+ motorway_link: true,
+ trunk_link: true,
+ primary_link: true,
+ secondary_link: true,
+ tertiary_link: true,
+ unclassified: true,
+ road: true,
+ service: true,
+ track: true,
+ living_street: true,
+ bus_guideway: true,
+ busway: true,
+ path: true,
+ footway: true,
+ cycleway: true,
+ bridleway: true,
+ pedestrian: true,
+ corridor: true,
+ steps: true,
+ ladder: true
+ };
+ var osmRoutableAerowayTags = {
+ runway: true,
+ taxiway: true
+ };
+ var osmPathHighwayTagValues = {
+ path: true,
+ footway: true,
+ cycleway: true,
+ bridleway: true,
+ pedestrian: true,
+ corridor: true,
+ steps: true,
+ ladder: true
+ };
+ var osmRailwayTrackTagValues = {
+ rail: true,
+ light_rail: true,
+ tram: true,
+ subway: true,
+ monorail: true,
+ funicular: true,
+ miniature: true,
+ narrow_gauge: true,
+ disused: true,
+ preserved: true
+ };
+ var osmFlowingWaterwayTagValues = {
+ canal: true,
+ ditch: true,
+ drain: true,
+ fish_pass: true,
+ flowline: true,
+ river: true,
+ stream: true,
+ tidal_channel: true
+ };
+ var allowUpperCaseTagValues = /network|taxon|genus|species|brand|grape_variety|royal_cypher|listed_status|booth|rating|stars|:output|_hours|_times|_ref|manufacturer|country|target|brewery|cai_scale|traffic_sign/;
+ function isColourValid(value) {
+ if (!value.match(/^(#([0-9a-fA-F]{3}){1,2}|\w+)$/)) {
+ return false;
+ }
+ if (!CSS.supports("color", value) || ["unset", "inherit", "initial", "revert"].includes(value)) {
+ return false;
+ }
+ return true;
+ }
+ var osmMutuallyExclusiveTagPairs = [
+ ["noname", "name"],
+ ["noref", "ref"],
+ ["nohousenumber", "addr:housenumber"],
+ ["noaddress", "addr:housenumber"],
+ ["noaddress", "addr:housename"],
+ ["noaddress", "addr:unit"],
+ ["addr:nostreet", "addr:street"]
+ ];
+
+ // modules/util/array.js
+ function utilArrayIdentical(a2, b2) {
+ if (a2 === b2) return true;
+ var i3 = a2.length;
+ if (i3 !== b2.length) return false;
+ while (i3--) {
+ if (a2[i3] !== b2[i3]) return false;
+ }
+ return true;
+ }
+ function utilArrayDifference(a2, b2) {
+ var other2 = new Set(b2);
+ return Array.from(new Set(a2)).filter(function(v2) {
+ return !other2.has(v2);
+ });
+ }
+ function utilArrayIntersection(a2, b2) {
+ var other2 = new Set(b2);
+ return Array.from(new Set(a2)).filter(function(v2) {
+ return other2.has(v2);
+ });
+ }
+ function utilArrayUnion(a2, b2) {
+ var result = new Set(a2);
+ b2.forEach(function(v2) {
+ result.add(v2);
+ });
+ return Array.from(result);
+ }
+ function utilArrayUniq(a2) {
+ return Array.from(new Set(a2));
+ }
+ function utilArrayChunk(a2, chunkSize) {
+ if (!chunkSize || chunkSize < 0) return [a2.slice()];
+ var result = new Array(Math.ceil(a2.length / chunkSize));
+ return Array.from(result, function(item, i3) {
+ return a2.slice(i3 * chunkSize, i3 * chunkSize + chunkSize);
+ });
+ }
+ function utilArrayFlatten(a2) {
+ return a2.reduce(function(acc, val) {
+ return acc.concat(val);
+ }, []);
+ }
+ function utilArrayGroupBy(a2, key) {
+ return a2.reduce(function(acc, item) {
+ var group = typeof key === "function" ? key(item) : item[key];
+ (acc[group] = acc[group] || []).push(item);
+ return acc;
+ }, {});
+ }
+ function utilArrayUniqBy(a2, key) {
+ var seen = /* @__PURE__ */ new Set();
+ return a2.reduce(function(acc, item) {
+ var val = typeof key === "function" ? key(item) : item[key];
+ if (val && !seen.has(val)) {
+ seen.add(val);
+ acc.push(item);
+ }
+ return acc;
+ }, []);
+ }
+
+ // modules/util/util.js
+ var import_diacritics = __toESM(require_diacritics());
+
+ // modules/util/svg_paths_rtl_fix.js
+ var import_alif_toolkit = __toESM(require_lib());
+ var rtlRegex = /[\u0590-\u05FF\u0600-\u06FF\u0750-\u07BF\u08A0–\u08BF]/;
+ function fixRTLTextForSvg(inputText) {
+ var ret = "", rtlBuffer = [];
+ var arabicRegex = /[\u0600-\u06FF]/g;
+ var arabicDiacritics = /[\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06ED]/g;
+ var arabicMath = /[\u0660-\u066C\u06F0-\u06F9]+/g;
+ var thaanaVowel = /[\u07A6-\u07B0]/;
+ var hebrewSign = /[\u0591-\u05bd\u05bf\u05c1-\u05c5\u05c7]/;
+ if (arabicRegex.test(inputText)) {
+ inputText = (0, import_alif_toolkit.WordShaper)(inputText);
+ }
+ for (var n3 = 0; n3 < inputText.length; n3++) {
+ var c2 = inputText[n3];
+ if (arabicMath.test(c2)) {
+ ret += rtlBuffer.reverse().join("");
+ rtlBuffer = [c2];
+ } else {
+ if (rtlBuffer.length && arabicMath.test(rtlBuffer[rtlBuffer.length - 1])) {
+ ret += rtlBuffer.reverse().join("");
+ rtlBuffer = [];
+ }
+ if ((thaanaVowel.test(c2) || hebrewSign.test(c2) || arabicDiacritics.test(c2)) && rtlBuffer.length) {
+ rtlBuffer[rtlBuffer.length - 1] += c2;
+ } else if (rtlRegex.test(c2) || c2.charCodeAt(0) >= 64336 && c2.charCodeAt(0) <= 65023 || c2.charCodeAt(0) >= 65136 && c2.charCodeAt(0) <= 65279) {
+ rtlBuffer.push(c2);
+ } else if (c2 === " " && rtlBuffer.length) {
+ rtlBuffer = [rtlBuffer.reverse().join("") + " "];
+ } else {
+ ret += rtlBuffer.reverse().join("") + c2;
+ rtlBuffer = [];
+ }
+ }
+ }
+ ret += rtlBuffer.reverse().join("");
+ return ret;
+ }
+