basemapkit 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"basemapkit.js","sources":["../node_modules/color-name/index.js","../node_modules/color-string/index.js","../node_modules/color-convert/conversions.js","../node_modules/color-convert/route.js","../node_modules/color-convert/index.js","../node_modules/color/index.js","../src/lib/colorchange.ts","../src/lib/assets/versatile-layers-raw.txt?raw","../src/lib/language.ts","../src/lib/basemapkit.ts"],"sourcesContent":["export default {\n\taliceblue: [240, 248, 255],\n\tantiquewhite: [250, 235, 215],\n\taqua: [0, 255, 255],\n\taquamarine: [127, 255, 212],\n\tazure: [240, 255, 255],\n\tbeige: [245, 245, 220],\n\tbisque: [255, 228, 196],\n\tblack: [0, 0, 0],\n\tblanchedalmond: [255, 235, 205],\n\tblue: [0, 0, 255],\n\tblueviolet: [138, 43, 226],\n\tbrown: [165, 42, 42],\n\tburlywood: [222, 184, 135],\n\tcadetblue: [95, 158, 160],\n\tchartreuse: [127, 255, 0],\n\tchocolate: [210, 105, 30],\n\tcoral: [255, 127, 80],\n\tcornflowerblue: [100, 149, 237],\n\tcornsilk: [255, 248, 220],\n\tcrimson: [220, 20, 60],\n\tcyan: [0, 255, 255],\n\tdarkblue: [0, 0, 139],\n\tdarkcyan: [0, 139, 139],\n\tdarkgoldenrod: [184, 134, 11],\n\tdarkgray: [169, 169, 169],\n\tdarkgreen: [0, 100, 0],\n\tdarkgrey: [169, 169, 169],\n\tdarkkhaki: [189, 183, 107],\n\tdarkmagenta: [139, 0, 139],\n\tdarkolivegreen: [85, 107, 47],\n\tdarkorange: [255, 140, 0],\n\tdarkorchid: [153, 50, 204],\n\tdarkred: [139, 0, 0],\n\tdarksalmon: [233, 150, 122],\n\tdarkseagreen: [143, 188, 143],\n\tdarkslateblue: [72, 61, 139],\n\tdarkslategray: [47, 79, 79],\n\tdarkslategrey: [47, 79, 79],\n\tdarkturquoise: [0, 206, 209],\n\tdarkviolet: [148, 0, 211],\n\tdeeppink: [255, 20, 147],\n\tdeepskyblue: [0, 191, 255],\n\tdimgray: [105, 105, 105],\n\tdimgrey: [105, 105, 105],\n\tdodgerblue: [30, 144, 255],\n\tfirebrick: [178, 34, 34],\n\tfloralwhite: [255, 250, 240],\n\tforestgreen: [34, 139, 34],\n\tfuchsia: [255, 0, 255],\n\tgainsboro: [220, 220, 220],\n\tghostwhite: [248, 248, 255],\n\tgold: [255, 215, 0],\n\tgoldenrod: [218, 165, 32],\n\tgray: [128, 128, 128],\n\tgreen: [0, 128, 0],\n\tgreenyellow: [173, 255, 47],\n\tgrey: [128, 128, 128],\n\thoneydew: [240, 255, 240],\n\thotpink: [255, 105, 180],\n\tindianred: [205, 92, 92],\n\tindigo: [75, 0, 130],\n\tivory: [255, 255, 240],\n\tkhaki: [240, 230, 140],\n\tlavender: [230, 230, 250],\n\tlavenderblush: [255, 240, 245],\n\tlawngreen: [124, 252, 0],\n\tlemonchiffon: [255, 250, 205],\n\tlightblue: [173, 216, 230],\n\tlightcoral: [240, 128, 128],\n\tlightcyan: [224, 255, 255],\n\tlightgoldenrodyellow: [250, 250, 210],\n\tlightgray: [211, 211, 211],\n\tlightgreen: [144, 238, 144],\n\tlightgrey: [211, 211, 211],\n\tlightpink: [255, 182, 193],\n\tlightsalmon: [255, 160, 122],\n\tlightseagreen: [32, 178, 170],\n\tlightskyblue: [135, 206, 250],\n\tlightslategray: [119, 136, 153],\n\tlightslategrey: [119, 136, 153],\n\tlightsteelblue: [176, 196, 222],\n\tlightyellow: [255, 255, 224],\n\tlime: [0, 255, 0],\n\tlimegreen: [50, 205, 50],\n\tlinen: [250, 240, 230],\n\tmagenta: [255, 0, 255],\n\tmaroon: [128, 0, 0],\n\tmediumaquamarine: [102, 205, 170],\n\tmediumblue: [0, 0, 205],\n\tmediumorchid: [186, 85, 211],\n\tmediumpurple: [147, 112, 219],\n\tmediumseagreen: [60, 179, 113],\n\tmediumslateblue: [123, 104, 238],\n\tmediumspringgreen: [0, 250, 154],\n\tmediumturquoise: [72, 209, 204],\n\tmediumvioletred: [199, 21, 133],\n\tmidnightblue: [25, 25, 112],\n\tmintcream: [245, 255, 250],\n\tmistyrose: [255, 228, 225],\n\tmoccasin: [255, 228, 181],\n\tnavajowhite: [255, 222, 173],\n\tnavy: [0, 0, 128],\n\toldlace: [253, 245, 230],\n\tolive: [128, 128, 0],\n\tolivedrab: [107, 142, 35],\n\torange: [255, 165, 0],\n\torangered: [255, 69, 0],\n\torchid: [218, 112, 214],\n\tpalegoldenrod: [238, 232, 170],\n\tpalegreen: [152, 251, 152],\n\tpaleturquoise: [175, 238, 238],\n\tpalevioletred: [219, 112, 147],\n\tpapayawhip: [255, 239, 213],\n\tpeachpuff: [255, 218, 185],\n\tperu: [205, 133, 63],\n\tpink: [255, 192, 203],\n\tplum: [221, 160, 221],\n\tpowderblue: [176, 224, 230],\n\tpurple: [128, 0, 128],\n\trebeccapurple: [102, 51, 153],\n\tred: [255, 0, 0],\n\trosybrown: [188, 143, 143],\n\troyalblue: [65, 105, 225],\n\tsaddlebrown: [139, 69, 19],\n\tsalmon: [250, 128, 114],\n\tsandybrown: [244, 164, 96],\n\tseagreen: [46, 139, 87],\n\tseashell: [255, 245, 238],\n\tsienna: [160, 82, 45],\n\tsilver: [192, 192, 192],\n\tskyblue: [135, 206, 235],\n\tslateblue: [106, 90, 205],\n\tslategray: [112, 128, 144],\n\tslategrey: [112, 128, 144],\n\tsnow: [255, 250, 250],\n\tspringgreen: [0, 255, 127],\n\tsteelblue: [70, 130, 180],\n\ttan: [210, 180, 140],\n\tteal: [0, 128, 128],\n\tthistle: [216, 191, 216],\n\ttomato: [255, 99, 71],\n\tturquoise: [64, 224, 208],\n\tviolet: [238, 130, 238],\n\twheat: [245, 222, 179],\n\twhite: [255, 255, 255],\n\twhitesmoke: [245, 245, 245],\n\tyellow: [255, 255, 0],\n\tyellowgreen: [154, 205, 50]\n}\n","import colorNames from 'color-name';\n\nconst reverseNames = Object.create(null);\n\n// Create a list of reverse color names\nfor (const name in colorNames) {\n\tif (Object.hasOwn(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nconst cs = {\n\tto: {},\n\tget: {},\n};\n\ncs.get = function (string) {\n\tconst prefix = string.slice(0, 3).toLowerCase();\n\tlet value;\n\tlet model;\n\tswitch (prefix) {\n\t\tcase 'hsl': {\n\t\t\tvalue = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'hwb': {\n\t\t\tvalue = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\t}\n\n\t\tdefault: {\n\t\t\tvalue = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!value) {\n\t\treturn null;\n\t}\n\n\treturn {model, value};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tconst abbr = /^#([a-f\\d]{3,4})$/i;\n\tconst hex = /^#([a-f\\d]{6})([a-f\\d]{2})?$/i;\n\tconst rgba = /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|/]\\s*([+-]?[\\d.]+)(%?)\\s*)?\\)$/;\n\tconst per = /^rgba?\\(\\s*([+-]?[\\d.]+)%\\s*,?\\s*([+-]?[\\d.]+)%\\s*,?\\s*([+-]?[\\d.]+)%\\s*(?:[,|/]\\s*([+-]?[\\d.]+)(%?)\\s*)?\\)$/;\n\tconst keyword = /^(\\w+)$/;\n\n\tlet rgb = [0, 0, 0, 1];\n\tlet match;\n\tlet i;\n\tlet hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tconst i2 = i * 2;\n\t\t\trgb[i] = Number.parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = Number.parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Number.parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = Number.parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Number.parseInt(match[i + 1], 10);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\trgb[3] = match[5] ? Number.parseFloat(match[4]) * 0.01 : Number.parseFloat(match[4]);\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(Number.parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\trgb[3] = match[5] ? Number.parseFloat(match[4]) * 0.01 : Number.parseFloat(match[4]);\n\t\t}\n\t} else if (match = string.match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!Object.hasOwn(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\trgb = colorNames[match[1]];\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tconst hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d.]+)%\\s*,?\\s*([+-]?[\\d.]+)%\\s*(?:[,|/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tconst match = string.match(hsl);\n\n\tif (match) {\n\t\tconst alpha = Number.parseFloat(match[4]);\n\t\tconst h = ((Number.parseFloat(match[1]) % 360) + 360) % 360;\n\t\tconst s = clamp(Number.parseFloat(match[2]), 0, 100);\n\t\tconst l = clamp(Number.parseFloat(match[3]), 0, 100);\n\t\tconst a = clamp(Number.isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tconst hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d.]+)%\\s*,\\s*([+-]?[\\d.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tconst match = string.match(hwb);\n\n\tif (match) {\n\t\tconst alpha = Number.parseFloat(match[4]);\n\t\tconst h = ((Number.parseFloat(match[1]) % 360) + 360) % 360;\n\t\tconst w = clamp(Number.parseFloat(match[2]), 0, 100);\n\t\tconst b = clamp(Number.parseFloat(match[3]), 0, 100);\n\t\tconst a = clamp(Number.isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function (...rgba) {\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function (...rgba) {\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function (...rgba) {\n\tconst r = Math.round(rgba[0] / 255 * 100);\n\tconst g = Math.round(rgba[1] / 255 * 100);\n\tconst b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function (...hsla) {\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// Hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function (...hwba) {\n\tlet a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (...rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// Helpers\nfunction clamp(number_, min, max) {\n\treturn Math.min(Math.max(min, number_), max);\n}\n\nfunction hexDouble(number_) {\n\tconst string_ = Math.round(number_).toString(16).toUpperCase();\n\treturn (string_.length < 2) ? '0' + string_ : string_;\n}\n\nexport default cs;\n","/* MIT license */\n/* eslint-disable no-mixed-operators */\nimport cssKeywords from 'color-name';\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\toklab: {channels: 3, labels: ['okl', 'oka', 'okb']},\n\tlch: {channels: 3, labels: 'lch'},\n\toklch: {channels: 3, labels: ['okl', 'okc', 'okh']},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']},\n};\n\nexport default convert;\n\n// LAB f(t) constant\nconst LAB_FT = (6 / 29) ** 3;\n\n// SRGB non-linear transform functions\nfunction srgbNonlinearTransform(c) {\n\tconst cc = c > 0.003_130_8\n\t\t? ((1.055 * (c ** (1 / 2.4))) - 0.055)\n\t\t: c * 12.92;\n\treturn Math.min(Math.max(0, cc), 1);\n}\n\nfunction srgbNonlinearTransformInv(c) {\n\treturn c > 0.040_45 ? (((c + 0.055) / 1.055) ** 2.4) : (c / 12.92);\n}\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tswitch (max) {\n\t\tcase min: {\n\t\t\th = 0;\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase r: {\n\t\t\th = (g - b) / delta;\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase g: {\n\t\t\th = 2 + (b - r) / delta;\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase b: {\n\t\t\th = 4 + (r - g) / delta;\n\n\t\t\tbreak;\n\t\t}\n\t// No default\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tswitch (v) {\n\t\t\tcase r: {\n\t\t\t\th = bdif - gdif;\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase g: {\n\t\t\t\th = (1 / 3) + rdif - bdif;\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase b: {\n\t\t\t\th = (2 / 3) + gdif - rdif;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t// No default\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100,\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.oklab = function (rgb) {\n\t// Assume sRGB\n\tconst r = srgbNonlinearTransformInv(rgb[0] / 255);\n\tconst g = srgbNonlinearTransformInv(rgb[1] / 255);\n\tconst b = srgbNonlinearTransformInv(rgb[2] / 255);\n\n\tconst lp = Math.cbrt(0.412_221_470_8 * r + 0.536_332_536_3 * g + 0.051_445_992_9 * b);\n\tconst mp = Math.cbrt(0.211_903_498_2 * r + 0.680_699_545_1 * g + 0.107_396_956_6 * b);\n\tconst sp = Math.cbrt(0.088_302_461_9 * r + 0.281_718_837_6 * g + 0.629_978_700_5 * b);\n\n\tconst l = 0.210_454_255_3 * lp + 0.793_617_785 * mp - 0.004_072_046_8 * sp;\n\tconst aa = 1.977_998_495_1 * lp - 2.428_592_205 * mp + 0.450_593_709_9 * sp;\n\tconst bb = 0.025_904_037_1 * lp + 0.782_771_766_2 * mp - 0.808_675_766 * sp;\n\n\treturn [l * 100, aa * 100, bb * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Number.POSITIVE_INFINITY;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\t// Assume sRGB\n\tconst r = srgbNonlinearTransformInv(rgb[0] / 255);\n\tconst g = srgbNonlinearTransformInv(rgb[1] / 255);\n\tconst b = srgbNonlinearTransformInv(rgb[2] / 255);\n\n\tconst x = (r * 0.412_456_4) + (g * 0.357_576_1) + (b * 0.180_437_5);\n\tconst y = (r * 0.212_672_9) + (g * 0.715_152_2) + (b * 0.072_175);\n\tconst z = (r * 0.019_333_9) + (g * 0.119_192) + (b * 0.950_304_1);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > LAB_FT ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > LAB_FT ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > LAB_FT ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t3;\n\tlet value;\n\n\tif (s === 0) {\n\t\tvalue = l * 255;\n\t\treturn [value, value, value];\n\t}\n\n\tconst t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tvalue = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tvalue = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tvalue = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tvalue = t1;\n\t\t}\n\n\t\trgb[i] = value * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0: {\n\t\t\treturn [v, t, p];\n\t\t}\n\n\t\tcase 1: {\n\t\t\treturn [q, v, p];\n\t\t}\n\n\t\tcase 2: {\n\t\t\treturn [p, v, t];\n\t\t}\n\n\t\tcase 3: {\n\t\t\treturn [p, q, v];\n\t\t}\n\n\t\tcase 4: {\n\t\t\treturn [t, p, v];\n\t\t}\n\n\t\tcase 5: {\n\t\t\treturn [v, p, q];\n\t\t}\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\t// eslint-disable-next-line no-bitwise\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces, default-case-last */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: { r = v; g = n; b = wh; break;\n\t\t}\n\n\t\tcase 1: { r = n; g = v; b = wh; break;\n\t\t}\n\n\t\tcase 2: { r = wh; g = v; b = n; break;\n\t\t}\n\n\t\tcase 3: { r = wh; g = n; b = v; break;\n\t\t}\n\n\t\tcase 4: { r = n; g = wh; b = v; break;\n\t\t}\n\n\t\tcase 5: { r = v; g = wh; b = n; break;\n\t\t}\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces, default-case-last */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.240_454_2) + (y * -1.537_138_5) + (z * -0.498_531_4);\n\tg = (x * -0.969_266) + (y * 1.876_010_8) + (z * 0.041_556);\n\tb = (x * 0.055_643_4) + (y * -0.204_025_9) + (z * 1.057_225_2);\n\n\t// Assume sRGB\n\tr = srgbNonlinearTransform(r);\n\tg = srgbNonlinearTransform(g);\n\tb = srgbNonlinearTransform(b);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > LAB_FT ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > LAB_FT ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > LAB_FT ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.xyz.oklab = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\n\tconst lp = Math.cbrt(0.818_933_010_1 * x + 0.361_866_742_4 * y - 0.128_859_713_7 * z);\n\tconst mp = Math.cbrt(0.032_984_543_6 * x + 0.929_311_871_5 * y + 0.036_145_638_7 * z);\n\tconst sp = Math.cbrt(0.048_200_301_8 * x + 0.264_366_269_1 * y + 0.633_851_707 * z);\n\n\tconst l = 0.210_454_255_3 * lp + 0.793_617_785 * mp - 0.004_072_046_8 * sp;\n\tconst a = 1.977_998_495_1 * lp - 2.428_592_205 * mp + 0.450_593_709_9 * sp;\n\tconst b = 0.025_904_037_1 * lp + 0.782_771_766_2 * mp - 0.808_675_766 * sp;\n\n\treturn [l * 100, a * 100, b * 100];\n};\n\nconvert.oklab.oklch = function (oklab) {\n\treturn convert.lab.lch(oklab);\n};\n\nconvert.oklab.xyz = function (oklab) {\n\tconst ll = oklab[0] / 100;\n\tconst a = oklab[1] / 100;\n\tconst b = oklab[2] / 100;\n\n\tconst l = (0.999_999_998 * ll + 0.396_337_792 * a + 0.215_803_758 * b) ** 3;\n\tconst m = (1.000_000_008 * ll - 0.105_561_342 * a - 0.063_854_175 * b) ** 3;\n\tconst s = (1.000_000_055 * ll - 0.089_484_182 * a - 1.291_485_538 * b) ** 3;\n\n\tconst x = 1.227_013_851 * l - 0.557_799_98 * m + 0.281_256_149 * s;\n\tconst y = -0.040_580_178 * l + 1.112_256_87 * m - 0.071_676_679 * s;\n\tconst z = -0.076_381_285 * l - 0.421_481_978 * m + 1.586_163_22 * s;\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.oklab.rgb = function (oklab) {\n\tconst ll = oklab[0] / 100;\n\tconst aa = oklab[1] / 100;\n\tconst bb = oklab[2] / 100;\n\n\tconst l = (ll + 0.396_337_777_4 * aa + 0.215_803_757_3 * bb) ** 3;\n\tconst m = (ll - 0.105_561_345_8 * aa - 0.063_854_172_8 * bb) ** 3;\n\tconst s = (ll - 0.089_484_177_5 * aa - 1.291_485_548 * bb) ** 3;\n\n\t// Assume sRGB\n\tconst r = srgbNonlinearTransform(4.076_741_662_1 * l - 3.307_711_591_3 * m + 0.230_969_929_2 * s);\n\tconst g = srgbNonlinearTransform(-1.268_438_004_6 * l + 2.609_757_401_1 * m - 0.341_319_396_5 * s);\n\tconst b = srgbNonlinearTransform(-0.004_196_086_3 * l - 0.703_418_614_7 * m + 1.707_614_701 * s);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.oklch.oklab = function (oklch) {\n\treturn convert.lch.lab(oklch);\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > LAB_FT ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > LAB_FT ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > LAB_FT ? z2 : (z - 16 / 116) / 7.787;\n\n\t// Illuminant D65 XYZ Tristrimulus Values\n\t// https://en.wikipedia.org/wiki/CIE_1931_color_space\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t/* eslint-disable no-bitwise */\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\t\t/* eslint-enable no-bitwise */\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\t// eslint-disable-next-line no-bitwise\n\tif (r >> 4 === g >> 4 && g >> 4 === b >> 4) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\targs = args[0];\n\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (Math.trunc(args > 50) + 1) * 0.5;\n\t/* eslint-disable no-bitwise */\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\t/* eslint-enable no-bitwise */\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\targs = args[0];\n\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\t/* eslint-disable no-bitwise */\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\t/* eslint-enable no-bitwise */\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.slice(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f\\d]{6}|[a-f\\d]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = [...colorString].map(char => char + char).join('');\n\t}\n\n\tconst integer = Number.parseInt(colorString, 16);\n\t/* eslint-disable no-bitwise */\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\t/* eslint-enable no-bitwise */\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet hue;\n\n\tconst grayscale = chroma < 1 ? min / (1 - chroma) : 0;\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else if (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else if (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2 * s * l) : (2 * s * (1 - l));\n\n\tlet f = 0;\n\tif (c < 1) {\n\t\tf = (l - 0.5 * c) / (1 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0: {\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\t}\n\n\t\tcase 1: {\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\t}\n\n\t\tcase 2: {\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\t}\n\n\t\tcase 3: {\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\t}\n\n\t\tcase 4: {\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\t}\n\n\t\tdefault: {\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t\t}\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255,\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1 - c);\n\tlet f = 0;\n\n\tif (v > 0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else if (l >= 0.5 && l < 1) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65_535) * 255, (apple[1] / 65_535) * 255, (apple[2] / 65_535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65_535, (rgb[1] / 255) * 65_535, (rgb[2] / 255) * 65_535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\t/* eslint-disable no-bitwise */\n\tconst value = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (value << 16) + (value << 8) + value;\n\t/* eslint-enable no-bitwise */\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.slice(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst value = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [value / 255 * 100];\n};\n","import conversions from './conversions.js';\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let {length} = models, i = 0; i < length; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null,\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length > 0) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let {length} = adjacents, i = 0; i < length; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nfunction route(fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let {length} = models, i = 0; i < length; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n}\n\nexport default route;\n","import conversions from './conversions.js';\nimport route from './route.js';\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let {length} = result, i = 0; i < length; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfor (const fromModel of models) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\tfor (const toModel of routeModels) {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t}\n}\n\nexport default convert;\n","import colorString from 'color-string';\nimport convert from 'color-convert';\n\nconst skippedModels = [\n\t// To be honest, I don't really feel like keyword belongs in color convert, but eh.\n\t'keyword',\n\n\t// Gray conflicts with some method names, and has its own method defined.\n\t'gray',\n\n\t// Shouldn't really be in color-convert either...\n\t'hex',\n];\n\nconst hashedModelKeys = {};\nfor (const model of Object.keys(convert)) {\n\thashedModelKeys[[...convert[model].labels].sort().join('')] = model;\n}\n\nconst limiters = {};\n\nfunction Color(object, model) {\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(object, model);\n\t}\n\n\tif (model && model in skippedModels) {\n\t\tmodel = null;\n\t}\n\n\tif (model && !(model in convert)) {\n\t\tthrow new Error('Unknown model: ' + model);\n\t}\n\n\tlet i;\n\tlet channels;\n\n\tif (object == null) { // eslint-disable-line no-eq-null,eqeqeq\n\t\tthis.model = 'rgb';\n\t\tthis.color = [0, 0, 0];\n\t\tthis.valpha = 1;\n\t} else if (object instanceof Color) {\n\t\tthis.model = object.model;\n\t\tthis.color = [...object.color];\n\t\tthis.valpha = object.valpha;\n\t} else if (typeof object === 'string') {\n\t\tconst result = colorString.get(object);\n\t\tif (result === null) {\n\t\t\tthrow new Error('Unable to parse color from string: ' + object);\n\t\t}\n\n\t\tthis.model = result.model;\n\t\tchannels = convert[this.model].channels;\n\t\tthis.color = result.value.slice(0, channels);\n\t\tthis.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1;\n\t} else if (object.length > 0) {\n\t\tthis.model = model || 'rgb';\n\t\tchannels = convert[this.model].channels;\n\t\tconst newArray = Array.prototype.slice.call(object, 0, channels);\n\t\tthis.color = zeroArray(newArray, channels);\n\t\tthis.valpha = typeof object[channels] === 'number' ? object[channels] : 1;\n\t} else if (typeof object === 'number') {\n\t\t// This is always RGB - can be converted later on.\n\t\tthis.model = 'rgb';\n\t\tthis.color = [\n\t\t\t(object >> 16) & 0xFF,\n\t\t\t(object >> 8) & 0xFF,\n\t\t\tobject & 0xFF,\n\t\t];\n\t\tthis.valpha = 1;\n\t} else {\n\t\tthis.valpha = 1;\n\n\t\tconst keys = Object.keys(object);\n\t\tif ('alpha' in object) {\n\t\t\tkeys.splice(keys.indexOf('alpha'), 1);\n\t\t\tthis.valpha = typeof object.alpha === 'number' ? object.alpha : 0;\n\t\t}\n\n\t\tconst hashedKeys = keys.sort().join('');\n\t\tif (!(hashedKeys in hashedModelKeys)) {\n\t\t\tthrow new Error('Unable to parse color from object: ' + JSON.stringify(object));\n\t\t}\n\n\t\tthis.model = hashedModelKeys[hashedKeys];\n\n\t\tconst {labels} = convert[this.model];\n\t\tconst color = [];\n\t\tfor (i = 0; i < labels.length; i++) {\n\t\t\tcolor.push(object[labels[i]]);\n\t\t}\n\n\t\tthis.color = zeroArray(color);\n\t}\n\n\t// Perform limitations (clamping, etc.)\n\tif (limiters[this.model]) {\n\t\tchannels = convert[this.model].channels;\n\t\tfor (i = 0; i < channels; i++) {\n\t\t\tconst limit = limiters[this.model][i];\n\t\t\tif (limit) {\n\t\t\t\tthis.color[i] = limit(this.color[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.valpha = Math.max(0, Math.min(1, this.valpha));\n\n\tif (Object.freeze) {\n\t\tObject.freeze(this);\n\t}\n}\n\nColor.prototype = {\n\ttoString() {\n\t\treturn this.string();\n\t},\n\n\ttoJSON() {\n\t\treturn this[this.model]();\n\t},\n\n\tstring(places) {\n\t\tlet self = this.model in colorString.to ? this : this.rgb();\n\t\tself = self.round(typeof places === 'number' ? places : 1);\n\t\tconst arguments_ = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to[self.model](...arguments_);\n\t},\n\n\tpercentString(places) {\n\t\tconst self = this.rgb().round(typeof places === 'number' ? places : 1);\n\t\tconst arguments_ = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to.rgb.percent(...arguments_);\n\t},\n\n\tarray() {\n\t\treturn this.valpha === 1 ? [...this.color] : [...this.color, this.valpha];\n\t},\n\n\tobject() {\n\t\tconst result = {};\n\t\tconst {channels} = convert[this.model];\n\t\tconst {labels} = convert[this.model];\n\n\t\tfor (let i = 0; i < channels; i++) {\n\t\t\tresult[labels[i]] = this.color[i];\n\t\t}\n\n\t\tif (this.valpha !== 1) {\n\t\t\tresult.alpha = this.valpha;\n\t\t}\n\n\t\treturn result;\n\t},\n\n\tunitArray() {\n\t\tconst rgb = this.rgb().color;\n\t\trgb[0] /= 255;\n\t\trgb[1] /= 255;\n\t\trgb[2] /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.push(this.valpha);\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tunitObject() {\n\t\tconst rgb = this.rgb().object();\n\t\trgb.r /= 255;\n\t\trgb.g /= 255;\n\t\trgb.b /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.alpha = this.valpha;\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tround(places) {\n\t\tplaces = Math.max(places || 0, 0);\n\t\treturn new Color([...this.color.map(roundToPlace(places)), this.valpha], this.model);\n\t},\n\n\talpha(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color([...this.color, Math.max(0, Math.min(1, value))], this.model);\n\t\t}\n\n\t\treturn this.valpha;\n\t},\n\n\t// Rgb\n\tred: getset('rgb', 0, maxfn(255)),\n\tgreen: getset('rgb', 1, maxfn(255)),\n\tblue: getset('rgb', 2, maxfn(255)),\n\n\thue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, value => ((value % 360) + 360) % 360),\n\n\tsaturationl: getset('hsl', 1, maxfn(100)),\n\tlightness: getset('hsl', 2, maxfn(100)),\n\n\tsaturationv: getset('hsv', 1, maxfn(100)),\n\tvalue: getset('hsv', 2, maxfn(100)),\n\n\tchroma: getset('hcg', 1, maxfn(100)),\n\tgray: getset('hcg', 2, maxfn(100)),\n\n\twhite: getset('hwb', 1, maxfn(100)),\n\twblack: getset('hwb', 2, maxfn(100)),\n\n\tcyan: getset('cmyk', 0, maxfn(100)),\n\tmagenta: getset('cmyk', 1, maxfn(100)),\n\tyellow: getset('cmyk', 2, maxfn(100)),\n\tblack: getset('cmyk', 3, maxfn(100)),\n\n\tx: getset('xyz', 0, maxfn(95.047)),\n\ty: getset('xyz', 1, maxfn(100)),\n\tz: getset('xyz', 2, maxfn(108.833)),\n\n\tl: getset('lab', 0, maxfn(100)),\n\ta: getset('lab', 1),\n\tb: getset('lab', 2),\n\n\tkeyword(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn convert[this.model].keyword(this.color);\n\t},\n\n\thex(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn colorString.to.hex(...this.rgb().round().color);\n\t},\n\n\thexa(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\tconst rgbArray = this.rgb().round().color;\n\n\t\tlet alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase();\n\t\tif (alphaHex.length === 1) {\n\t\t\talphaHex = '0' + alphaHex;\n\t\t}\n\n\t\treturn colorString.to.hex(...rgbArray) + alphaHex;\n\t},\n\n\trgbNumber() {\n\t\tconst rgb = this.rgb().color;\n\t\treturn ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);\n\t},\n\n\tluminosity() {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tconst rgb = this.rgb().color;\n\n\t\tconst lum = [];\n\t\tfor (const [i, element] of rgb.entries()) {\n\t\t\tconst chan = element / 255;\n\t\t\tlum[i] = (chan <= 0.04045) ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4;\n\t\t}\n\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast(color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tconst lum1 = this.luminosity();\n\t\tconst lum2 = color2.luminosity();\n\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel(color2) {\n\t\t// https://www.w3.org/TR/WCAG/#contrast-enhanced\n\t\tconst contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tisDark() {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tconst rgb = this.rgb().color;\n\t\tconst yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 10000;\n\t\treturn yiq < 128;\n\t},\n\n\tisLight() {\n\t\treturn !this.isDark();\n\t},\n\n\tnegate() {\n\t\tconst rgb = this.rgb();\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\trgb.color[i] = 255 - rgb.color[i];\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tlighten(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] += hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdarken(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] -= hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tsaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] += hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdesaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] -= hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\twhiten(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[1] += hwb.color[1] * ratio;\n\t\treturn hwb;\n\t},\n\n\tblacken(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[2] += hwb.color[2] * ratio;\n\t\treturn hwb;\n\t},\n\n\tgrayscale() {\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_colour_to_grayscale\n\t\tconst rgb = this.rgb().color;\n\t\tconst value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\treturn Color.rgb(value, value, value);\n\t},\n\n\tfade(ratio) {\n\t\treturn this.alpha(this.valpha - (this.valpha * ratio));\n\t},\n\n\topaquer(ratio) {\n\t\treturn this.alpha(this.valpha + (this.valpha * ratio));\n\t},\n\n\trotate(degrees) {\n\t\tconst hsl = this.hsl();\n\t\tlet hue = hsl.color[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\thsl.color[0] = hue;\n\t\treturn hsl;\n\t},\n\n\tmix(mixinColor, weight) {\n\t\t// Ported from sass implementation in C\n\t\t// https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t\tif (!mixinColor || !mixinColor.rgb) {\n\t\t\tthrow new Error('Argument to \"mix\" was not a Color instance, but rather an instance of ' + typeof mixinColor);\n\t\t}\n\n\t\tconst color1 = mixinColor.rgb();\n\t\tconst color2 = this.rgb();\n\t\tconst p = weight === undefined ? 0.5 : weight;\n\n\t\tconst w = 2 * p - 1;\n\t\tconst a = color1.alpha() - color2.alpha();\n\n\t\tconst w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2;\n\t\tconst w2 = 1 - w1;\n\n\t\treturn Color.rgb(\n\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\tw1 * color1.blue() + w2 * color2.blue(),\n\t\t\tcolor1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n};\n\n// Model conversion methods and static constructors\nfor (const model of Object.keys(convert)) {\n\tif (skippedModels.includes(model)) {\n\t\tcontinue;\n\t}\n\n\tconst {channels} = convert[model];\n\n\t// Conversion methods\n\tColor.prototype[model] = function (...arguments_) {\n\t\tif (this.model === model) {\n\t\t\treturn new Color(this);\n\t\t}\n\n\t\tif (arguments_.length > 0) {\n\t\t\treturn new Color(arguments_, model);\n\t\t}\n\n\t\treturn new Color([...assertArray(convert[this.model][model].raw(this.color)), this.valpha], model);\n\t};\n\n\t// 'static' construction methods\n\tColor[model] = function (...arguments_) {\n\t\tlet color = arguments_[0];\n\t\tif (typeof color === 'number') {\n\t\t\tcolor = zeroArray(arguments_, channels);\n\t\t}\n\n\t\treturn new Color(color, model);\n\t};\n}\n\nfunction roundTo(number, places) {\n\treturn Number(number.toFixed(places));\n}\n\nfunction roundToPlace(places) {\n\treturn function (number) {\n\t\treturn roundTo(number, places);\n\t};\n}\n\nfunction getset(model, channel, modifier) {\n\tmodel = Array.isArray(model) ? model : [model];\n\n\tfor (const m of model) {\n\t\t(limiters[m] ||= [])[channel] = modifier;\n\t}\n\n\tmodel = model[0];\n\n\treturn function (value) {\n\t\tlet result;\n\n\t\tif (value !== undefined) {\n\t\t\tif (modifier) {\n\t\t\t\tvalue = modifier(value);\n\t\t\t}\n\n\t\t\tresult = this[model]();\n\t\t\tresult.color[channel] = value;\n\t\t\treturn result;\n\t\t}\n\n\t\tresult = this[model]().color[channel];\n\t\tif (modifier) {\n\t\t\tresult = modifier(result);\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\nfunction maxfn(max) {\n\treturn function (v) {\n\t\treturn Math.max(0, Math.min(max, v));\n\t};\n}\n\nfunction assertArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\n\nfunction zeroArray(array, length) {\n\tfor (let i = 0; i < length; i++) {\n\t\tif (typeof array[i] !== 'number') {\n\t\t\tarray[i] = 0;\n\t\t}\n\t}\n\n\treturn array;\n}\n\nexport default Color;\n","export type RGBArray = [number, number, number];\n\nfunction isColorDescription(elem: unknown): boolean {\n if (\n typeof elem === \"string\" &&\n (elem.startsWith(\"#\") ||\n elem.startsWith(\"rgb(\") ||\n elem.startsWith(\"rgba(\") ||\n elem.startsWith(\"hsl(\") ||\n elem.startsWith(\"hwb(\"))\n ) {\n return true;\n }\n\n return false;\n}\n\nexport function findColor(data: unknown, modifier: (color: string) => string) {\n // We deal with strings but only from their parent perspective\n // so that we can change the value from the ref\n if (\n typeof data === \"string\" ||\n typeof data === \"number\" ||\n typeof data === \"boolean\" ||\n data === null ||\n data === undefined\n ) {\n return;\n }\n\n if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i += 1) {\n const elem = data[i];\n\n if (isColorDescription(elem)) {\n data[i] = modifier(elem);\n continue;\n }\n findColor(elem, modifier);\n }\n } else if (typeof data === \"object\") {\n const dataAsRecord = data as Record<string, unknown>;\n const keys = Object.keys(data);\n\n for (const k of keys) {\n const elem = dataAsRecord[k];\n\n if (isColorDescription(elem)) {\n dataAsRecord[k] = modifier(elem as string);\n continue;\n }\n\n findColor(elem, modifier);\n }\n }\n}\n\nexport function applyBrightnessSingle(input: number, brightness: number): number {\n const normalized = input / 255;\n const adjusted = normalized + (1 - normalized) * normalized * brightness;\n return Math.max(0, Math.min(255, adjusted * 255));\n}\n\nexport function applyBrightnessRGB(input: RGBArray, brightness: number): RGBArray {\n return input.map((chan) => applyBrightnessSingle(chan, brightness)) as RGBArray;\n}\n\nexport function applyContrastSingle(input: number, contrast: number, midpoint = 127): number {\n const centered = input - midpoint;\n const factor =\n contrast >= 0\n ? 1 + contrast * 2\n : // Map [0, 1] to [1, 3]\n 1 + contrast; // Map [-1, 0] to [0, 1]\n\n let adjusted: number;\n\n if (contrast >= 0) {\n // Increasing contrast: apply more effect to values further from midpoint\n // Use a curve that avoids harsh clipping\n const normalizedDistance = Math.abs(centered) / midpoint;\n const scaleFactor = factor * (1 + normalizedDistance * contrast * 0.5);\n adjusted = midpoint + centered * scaleFactor;\n } else {\n // Decreasing contrast: move values toward midpoint\n // Use a curve that maintains some variation even at extreme settings\n adjusted = midpoint + centered * factor;\n }\n\n // Clamp to valid range\n return Math.round(Math.max(0, Math.min(255, adjusted)));\n}\n\nexport function applyContrastRGB(input: RGBArray, contrast: number, midpoint = 127): RGBArray {\n return input.map((chan) => applyContrastSingle(chan, contrast, midpoint)) as RGBArray;\n}\n\nexport function applyMultiplicationSingle(input1: number, input2: number, ratio = 1): number {\n return 255 * (input1 / 255) * (input2 / 255) * ratio + (input1 / 255) * (1 - ratio) * 255;\n}\n\nexport function applyMultiplicationRGB(input1: RGBArray, input2: RGBArray, ratio = 1): RGBArray {\n return input1.map((_chan, i) => applyMultiplicationSingle(input1[i], input2[i], ratio)) as RGBArray;\n}\n","export default \"[\\n {\\n \\\"id\\\": \\\"background\\\",\\n \\\"type\\\": \\\"background\\\",\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"background-color\\\": \\\"#cccccc\\\"}\\n },\\n {\\n \\\"id\\\": \\\"earth\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"earth\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"$type\\\", \\\"Polygon\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#fcf5e3\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landcover\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landcover\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\n \\\"in\\\",\\n \\\"kind\\\",\\n \\\"grassland\\\",\\n \\\"barren\\\",\\n \\\"urban_area\\\",\\n \\\"farmland\\\",\\n \\\"glacier\\\",\\n \\\"scrub\\\"\\n ]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"fill-color\\\": [\\n \\\"match\\\",\\n [\\\"get\\\", \\\"kind\\\"],\\n \\\"grassland\\\",\\n \\\"#cee6b5\\\",\\n \\\"barren\\\",\\n \\\"#fff0d4\\\",\\n \\\"urban_area\\\",\\n \\\"rgba(230, 230, 230, 1)\\\",\\n \\\"farmland\\\",\\n \\\"rgba(192, 222, 160, 0.3)\\\",\\n \\\"glacier\\\",\\n \\\"#e6ffff\\\",\\n \\\"scrub\\\",\\n \\\"#cee6b5\\\",\\n \\\"#ff0000\\\"\\n ],\\n \\\"fill-opacity\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 0,\\n 1,\\n 7,\\n 0.8,\\n 8,\\n 0\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_residential\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"==\\\", \\\"kind\\\", \\\"residential\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"fill-opacity\\\": [\\\"interpolate\\\", [\\\"linear\\\"], [\\\"zoom\\\"], 8, 0, 12, 1],\\n \\\"fill-color\\\": \\\"#f7f3e9\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_urban_green\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"allotments\\\", \\\"village_green\\\", \\\"playground\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#9cd3b4\\\", \\\"fill-opacity\\\": 0.7}\\n },\\n {\\n \\\"id\\\": \\\"landuse-sand\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"==\\\", \\\"kind\\\", \\\"sand\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"fill-opacity\\\": [\\\"interpolate\\\", [\\\"linear\\\"], [\\\"zoom\\\"], 0, 1, 20, 0],\\n \\\"fill-color\\\": \\\"rgba(240, 226, 199, 1)\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_bare_rock\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"in\\\", \\\"kind\\\", \\\"bare_rock\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"rgb(221, 226, 226)\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landuse_park\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\n \\\"in\\\",\\n \\\"kind\\\",\\n \\\"meadow\\\",\\n \\\"park\\\",\\n \\\"glacier\\\",\\n \\\"cemetery\\\",\\n \\\"golf_course\\\",\\n \\\"scrub\\\",\\n \\\"grassland\\\",\\n \\\"grass\\\",\\n \\\"naval_base\\\",\\n \\\"airfield\\\"\\n ]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"fill-opacity\\\": 1,\\n \\\"fill-color\\\": [\\n \\\"case\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"grass\\\"]]],\\n \\\"#a5e87d\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"park\\\", \\\"golf_course\\\"]]],\\n \\\"#b6e996\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"park\\\", \\\"meadow\\\"]]],\\n \\\"#a6e085\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"scrub\\\", \\\"grassland\\\"]]],\\n \\\"#cee6b5\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"glacier\\\"]]],\\n \\\"#e6ffff\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"cemetery\\\"]]],\\n \\\"#ccdbc5\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"sand\\\"]]],\\n \\\"#fff3d5\\\",\\n [\\n \\\"in\\\",\\n [\\\"get\\\", \\\"kind\\\"],\\n [\\\"literal\\\", [\\\"military\\\", \\\"naval_base\\\", \\\"airfield\\\"]]\\n ],\\n \\\"#d1dede\\\",\\n \\\"#e2dfda\\\"\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_farmland\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"==\\\", \\\"kind\\\", \\\"farmland\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"rgba(185, 255, 152, 1)\\\", \\\"fill-opacity\\\": 0.2}\\n },\\n {\\n \\\"id\\\": \\\"landuse_pitch\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"==\\\", \\\"kind\\\", \\\"pitch\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"rgba(81, 201, 70, 1)\\\", \\\"fill-opacity\\\": 0.2}\\n },\\n {\\n \\\"id\\\": \\\"landuse_military\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"==\\\", \\\"kind\\\", \\\"military\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"rgba(145, 145, 145, 1)\\\", \\\"fill-opacity\\\": 0.2}\\n },\\n {\\n \\\"id\\\": \\\"landuse_wood-forest\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"in\\\", \\\"kind\\\", \\\"forest\\\", \\\"wood\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"fill-opacity\\\": [\\\"interpolate\\\", [\\\"linear\\\"], [\\\"zoom\\\"], 0, 1, 7, 1],\\n \\\"fill-color\\\": \\\"rgba(170, 222, 156, 1)\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_hospital\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"hospital\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#e4dad9\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landuse_industrial\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"industrial\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#d1dde1\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landuse_school\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"school\\\", \\\"university\\\", \\\"college\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#e4ded7\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landuse_zoo\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"zoo\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#c6dcdc\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landuse_aerodrome\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"aerodrome\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#dadbdf\\\"}\\n },\\n {\\n \\\"id\\\": \\\"roads_runway\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind_detail\\\", \\\"runway\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e9e9ed\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 10,\\n 0,\\n 12,\\n 4,\\n 18,\\n 30\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_taxiway\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 13,\\n \\\"filter\\\": [\\\"==\\\", \\\"kind_detail\\\", \\\"taxiway\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e9e9ed\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1,\\n 15,\\n 6\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_runway\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"any\\\", [\\\"in\\\", \\\"kind\\\", \\\"runway\\\", \\\"taxiway\\\"]],\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#e9e9ed\\\"}\\n },\\n {\\n \\\"id\\\": \\\"water\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"water\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"$type\\\", \\\"Polygon\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"rgb(135, 199, 236)\\\"}\\n },\\n {\\n \\\"id\\\": \\\"water_stream\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"water\\\",\\n \\\"minzoom\\\": 14,\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"stream\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"line-width\\\": 0.5, \\\"line-color\\\": \\\"rgba(18, 157, 222, 1)\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landuse_beach\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"beach\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#fff0d4\\\"}\\n },\\n {\\n \\\"id\\\": \\\"water_river\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"water\\\",\\n \\\"minzoom\\\": 9,\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"river\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 9,\\n 0,\\n 9.5,\\n 1,\\n 18,\\n 12\\n ],\\n \\\"line-color\\\": \\\"#C4EAFF\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_wetland\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"==\\\", \\\"kind\\\", \\\"wetland\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"rgba(43, 63, 131, 0.07)\\\"}\\n },\\n {\\n \\\"id\\\": \\\"ferry\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"==\\\", \\\"kind\\\", \\\"ferry\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-dasharray\\\": [1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3],\\n \\\"line-opacity\\\": 0.5,\\n \\\"line-color\\\": \\\"rgba(76, 154, 205, 1)\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 6,\\n 1,\\n 18,\\n 3\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_pedestrian\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"pedestrian\\\", \\\"dam\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#e3e0d4\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landuse_pier\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"pier\\\"],\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#e0e0e0\\\"}\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_other_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_tunnel\\\"], [\\\"in\\\", \\\"kind\\\", \\\"other\\\", \\\"path\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 14,\\n 0,\\n 20,\\n 7\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_minor_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_tunnel\\\"], [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-dasharray\\\": [3, 2],\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 11,\\n 0,\\n 12.5,\\n 0.5,\\n 15,\\n 2,\\n 18,\\n 11\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 12,\\n 0,\\n 12.5,\\n 1\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_link_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_tunnel\\\"], [\\\"has\\\", \\\"is_link\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-dasharray\\\": [3, 2],\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1,\\n 18,\\n 11\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 12,\\n 0,\\n 12.5,\\n 1\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_major_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"major_road\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-dasharray\\\": [3, 2],\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 7,\\n 0,\\n 7.5,\\n 0.5,\\n 18,\\n 13\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 9,\\n 0,\\n 9.5,\\n 1\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_highway_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"highway\\\"],\\n [\\\"!has\\\", \\\"is_link\\\"]\\n ],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-dasharray\\\": [6, 0.5],\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 3.5,\\n 0.5,\\n 18,\\n 15\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 7,\\n 0,\\n 7.5,\\n 1,\\n 20,\\n 15\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_other\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_tunnel\\\"], [\\\"in\\\", \\\"kind\\\", \\\"other\\\", \\\"path\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#d5d5d5\\\",\\n \\\"line-dasharray\\\": [4.5, 0.5],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 14,\\n 0,\\n 20,\\n 7\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_minor\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_tunnel\\\"], [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#d5d5d5\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 11,\\n 0,\\n 12.5,\\n 0.5,\\n 15,\\n 2,\\n 18,\\n 11\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_link\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_tunnel\\\"], [\\\"has\\\", \\\"is_link\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#d5d5d5\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1,\\n 18,\\n 11\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_major\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_tunnel\\\"], [\\\"==\\\", \\\"kind\\\", \\\"major_road\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#d5d5d5\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 6,\\n 0,\\n 12,\\n 1.6,\\n 15,\\n 3,\\n 18,\\n 13\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_highway\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"has\\\", \\\"is_tunnel\\\"],\\n [\\\"==\\\", [\\\"get\\\", \\\"kind\\\"], \\\"highway\\\"],\\n [\\\"!\\\", [\\\"has\\\", \\\"is_link\\\"]]\\n ],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#d5d5d5\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 6,\\n 1.1,\\n 12,\\n 1.6,\\n 15,\\n 5,\\n 18,\\n 15\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"buildings\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"buildings\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"building\\\", \\\"building_part\\\"],\\n \\\"paint\\\": {\\\"fill-opacity\\\": 0.3, \\\"fill-color\\\": \\\"#c2beba\\\"}\\n },\\n {\\n \\\"id\\\": \\\"roads_pier\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind_detail\\\", \\\"pier\\\"],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 12,\\n 0,\\n 12.5,\\n 0.5,\\n 20,\\n 16\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_minor_service_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 13,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"],\\n [\\\"==\\\", \\\"kind_detail\\\", \\\"service\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 18,\\n 8\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 0.8\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_minor_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"],\\n [\\\"!=\\\", \\\"kind_detail\\\", \\\"service\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 11,\\n 0,\\n 12.5,\\n 0.5,\\n 15,\\n 2,\\n 18,\\n 11\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 12,\\n 0,\\n 12.5,\\n 1,\\n 17,\\n 1.25\\n ],\\n \\\"line-color\\\": \\\"#D1CFC7\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_link_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 13,\\n \\\"filter\\\": [\\\"has\\\", \\\"is_link\\\"],\\n \\\"paint\\\": {\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1,\\n 18,\\n 11\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1.5\\n ],\\n \\\"line-color\\\": \\\"#D1CFC7\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_major_casing_late\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"major_road\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 6,\\n 0,\\n 12,\\n 1.6,\\n 15,\\n 3,\\n 18,\\n 13\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 9,\\n 0,\\n 9.5,\\n 1,\\n 15,\\n 1.5\\n ],\\n \\\"line-color\\\": \\\"#D1CFC7\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_highway_casing_late\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"highway\\\"],\\n [\\\"!has\\\", \\\"is_link\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 3.5,\\n 0.5,\\n 18,\\n 15\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 7,\\n 0,\\n 7.5,\\n 1,\\n 20,\\n 15\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_other-bg\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 13,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"in\\\", \\\"kind\\\", \\\"other\\\", \\\"path\\\"],\\n [\\\"!=\\\", \\\"kind_detail\\\", \\\"pier\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 14,\\n 0.75,\\n 20,\\n 6\\n ],\\n \\\"line-color\\\": \\\"rgba(0, 0, 0, 0.15)\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_other\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 13,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"in\\\", \\\"kind\\\", \\\"other\\\", \\\"path\\\"],\\n [\\\"!=\\\", \\\"kind_detail\\\", \\\"pier\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-dasharray\\\": [2, 2],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 14,\\n 1.5,\\n 20,\\n 9\\n ],\\n \\\"line-color\\\": \\\"rgba(249, 247, 241, 1)\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_link\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"has\\\", \\\"is_link\\\"],\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1,\\n 18,\\n 11\\n ],\\n \\\"line-color\\\": \\\"#E7E5DE\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_minor_service\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"],\\n [\\\"==\\\", \\\"kind_detail\\\", \\\"service\\\"]\\n ],\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 18,\\n 8\\n ],\\n \\\"line-color\\\": \\\"#E7E5DE\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_minor\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"],\\n [\\\"!=\\\", \\\"kind_detail\\\", \\\"service\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 11,\\n 0,\\n 12.5,\\n 0.5,\\n 15,\\n 2,\\n 18,\\n 11\\n ],\\n \\\"line-color\\\": \\\"#E7E5DE\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_major_casing_early\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"maxzoom\\\": 12,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"major_road\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"rgba(194, 194, 194, 1)\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 7,\\n 0,\\n 7.5,\\n 0.5,\\n 18,\\n 13\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 9,\\n 0,\\n 9.5,\\n 1\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_major\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"major_road\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 6,\\n 0,\\n 12,\\n 1.6,\\n 15,\\n 3,\\n 18,\\n 13\\n ],\\n \\\"line-color\\\": \\\"#E7E5DE\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_highway_casing_early\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"maxzoom\\\": 12,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"highway\\\"],\\n [\\\"!has\\\", \\\"is_link\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"rgba(214, 213, 213, 1)\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 3.5,\\n 0.5,\\n 18,\\n 15\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 6,\\n 1.8,\\n 12,\\n 2.2,\\n 15,\\n 5,\\n 18,\\n 15\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_highway\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"highway\\\"],\\n [\\\"!has\\\", \\\"is_link\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 6,\\n 1.1,\\n 12,\\n 1.6,\\n 15,\\n 5,\\n 18,\\n 15\\n ],\\n \\\"line-color\\\": \\\"#E7E5DE\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_rail\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"rail\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-dasharray\\\": [0.3, 0.75],\\n \\\"line-opacity\\\": 0.5,\\n \\\"line-color\\\": \\\"rgba(97, 116, 129, 1)\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 6,\\n 0.15,\\n 18,\\n 6\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"boundaries_country_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"boundaries\\\",\\n \\\"minzoom\\\": 3,\\n \\\"filter\\\": [\\\"<=\\\", \\\"kind_detail\\\", 2],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"rgba(0, 0, 0, 1)\\\",\\n \\\"line-opacity\\\": 0.1,\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 0,\\n 2,\\n 8,\\n 7,\\n 15,\\n 20\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"boundaries_country\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"boundaries\\\",\\n \\\"filter\\\": [\\\"<=\\\", \\\"kind_detail\\\", 2],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"rgba(0, 0, 0, 1)\\\",\\n \\\"line-dasharray\\\": [\\n \\\"step\\\",\\n [\\\"zoom\\\"],\\n [\\\"literal\\\", [2]],\\n 4,\\n [\\\"literal\\\", [2, 1]]\\n ],\\n \\\"line-opacity\\\": 0.3,\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 0,\\n 1,\\n 8,\\n 1.5,\\n 15,\\n 3\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"boundaries\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"boundaries\\\",\\n \\\"filter\\\": [\\\">\\\", \\\"kind_detail\\\", 2],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#adadad\\\",\\n \\\"line-width\\\": 0.4,\\n \\\"line-dasharray\\\": [\\n \\\"step\\\",\\n [\\\"zoom\\\"],\\n [\\\"literal\\\", [2]],\\n 4,\\n [\\\"literal\\\", [2, 1]]\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_other_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"in\\\", \\\"kind\\\", \\\"other\\\", \\\"path\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 14,\\n 0,\\n 20,\\n 7\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_link_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"has\\\", \\\"is_link\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1,\\n 18,\\n 11\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 12,\\n 0,\\n 12.5,\\n 1.5\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_minor_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 11,\\n 0,\\n 12.5,\\n 0.5,\\n 15,\\n 2,\\n 18,\\n 11\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 0.8\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_major_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"==\\\", \\\"kind\\\", \\\"major_road\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 7,\\n 0,\\n 7.5,\\n 0.5,\\n 18,\\n 10\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 9,\\n 0,\\n 9.5,\\n 1.5\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_other\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"in\\\", \\\"kind\\\", \\\"other\\\", \\\"path\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#ebebeb\\\",\\n \\\"line-dasharray\\\": [2, 1],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 14,\\n 0,\\n 20,\\n 7\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_minor\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#ffffff\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 11,\\n 0,\\n 12.5,\\n 0.5,\\n 15,\\n 2,\\n 18,\\n 11\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_link\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"has\\\", \\\"is_link\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#ffffff\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1,\\n 18,\\n 11\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_major\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"==\\\", \\\"kind\\\", \\\"major_road\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#f5f5f5\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 6,\\n 0,\\n 12,\\n 1.6,\\n 15,\\n 3,\\n 18,\\n 13\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"cycleway_bg\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"any\\\", [\\\"==\\\", \\\"kind_detail\\\", \\\"cycleway\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 12.5,\\n 0.9,\\n 15,\\n 1.9,\\n 18,\\n 3.9\\n ],\\n \\\"line-dasharray\\\": [2],\\n \\\"line-color\\\": \\\"#ffffff\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"cycleway\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"any\\\", [\\\"==\\\", \\\"kind_detail\\\", \\\"cycleway\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 12.5,\\n 1,\\n 15,\\n 2,\\n 18,\\n 4\\n ],\\n \\\"line-color\\\": \\\"rgba(20, 116, 0, 1)\\\",\\n \\\"line-dasharray\\\": [2, 1.5]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_highway_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"highway\\\"],\\n [\\\"!has\\\", \\\"is_link\\\"]\\n ],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 3.5,\\n 0.5,\\n 18,\\n 15\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 7,\\n 0,\\n 7.5,\\n 1,\\n 20,\\n 15\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_highway\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"highway\\\"],\\n [\\\"!has\\\", \\\"is_link\\\"]\\n ],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#ffffff\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 6,\\n 1.1,\\n 12,\\n 1.6,\\n 15,\\n 5,\\n 18,\\n 15\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"address_label\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"buildings\\\",\\n \\\"minzoom\\\": 18,\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"address\\\"],\\n \\\"layout\\\": {\\n \\\"symbol-placement\\\": \\\"point\\\",\\n \\\"text-font\\\": [\\\"Noto Sans Italic\\\"],\\n \\\"text-field\\\": [\\\"get\\\", \\\"addr_housenumber\\\"],\\n \\\"text-size\\\": 12\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"#91888b\\\",\\n \\\"text-halo-color\\\": \\\"#ffffff\\\",\\n \\\"text-halo-width\\\": 1\\n }\\n },\\n {\\n \\\"id\\\": \\\"water_waterway_label\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"water\\\",\\n \\\"minzoom\\\": 13,\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"river\\\", \\\"stream\\\"],\\n \\\"layout\\\": {\\n \\\"symbol-placement\\\": \\\"line\\\",\\n \\\"text-font\\\": [\\\"Noto Sans Italic\\\"],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-size\\\": 12,\\n \\\"text-letter-spacing\\\": 0.2\\n },\\n \\\"paint\\\": {\\\"text-color\\\": \\\"rgba(13, 117, 143, 0.64)\\\", \\\"text-halo-width\\\": 1}\\n },\\n {\\n \\\"id\\\": \\\"roads_labels_minor\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 15,\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"minor_road\\\", \\\"other\\\", \\\"path\\\"],\\n \\\"layout\\\": {\\n \\\"symbol-sort-key\\\": [\\\"get\\\", \\\"min_zoom\\\"],\\n \\\"symbol-placement\\\": \\\"line\\\",\\n \\\"text-font\\\": [\\\"Noto Sans Regular\\\"],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-size\\\": 12,\\n \\\"visibility\\\": \\\"visible\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"rgba(94, 88, 90, 1)\\\",\\n \\\"text-halo-color\\\": \\\"#ffffff\\\",\\n \\\"text-halo-width\\\": 1\\n }\\n },\\n {\\n \\\"id\\\": \\\"water_label_ocean\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"water\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"sea\\\", \\\"ocean\\\", \\\"bay\\\", \\\"strait\\\", \\\"fjord\\\"],\\n \\\"layout\\\": {\\n \\\"text-font\\\": [\\\"Noto Sans Italic\\\"],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-size\\\": [\\\"interpolate\\\", [\\\"linear\\\"], [\\\"zoom\\\"], 1, 12, 10, 12],\\n \\\"text-letter-spacing\\\": 0.1,\\n \\\"text-max-width\\\": 9,\\n \\\"text-transform\\\": \\\"uppercase\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"rgba(4, 69, 98, 0.64)\\\",\\n \\\"text-halo-width\\\": 1,\\n \\\"text-halo-color\\\": \\\"rgba(0, 0, 0, 0)\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"earth_label_islands\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"earth\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"island\\\"],\\n \\\"layout\\\": {\\n \\\"text-font\\\": [\\\"Noto Sans Italic\\\"],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-size\\\": 10,\\n \\\"text-letter-spacing\\\": 0.1,\\n \\\"text-max-width\\\": 8\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"#8f8f8f\\\",\\n \\\"text-halo-color\\\": \\\"#e0e0e0\\\",\\n \\\"text-halo-width\\\": 1\\n }\\n },\\n {\\n \\\"id\\\": \\\"water_label_lakes\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"water\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"lake\\\", \\\"water\\\"],\\n \\\"layout\\\": {\\n \\\"text-font\\\": [\\\"Noto Sans Italic\\\"],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-size\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 3,\\n 10,\\n 6,\\n 12,\\n 10,\\n 12\\n ],\\n \\\"text-letter-spacing\\\": 0.1,\\n \\\"text-max-width\\\": 9\\n },\\n \\\"paint\\\": {\\\"text-color\\\": \\\"rgba(13, 117, 143, 0.64)\\\", \\\"text-halo-width\\\": 1}\\n },\\n {\\n \\\"id\\\": \\\"roads_labels_major\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 11,\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"highway\\\", \\\"major_road\\\"],\\n \\\"layout\\\": {\\n \\\"symbol-sort-key\\\": [\\\"get\\\", \\\"min_zoom\\\"],\\n \\\"symbol-placement\\\": \\\"line\\\",\\n \\\"text-font\\\": [\\\"Noto Sans Regular\\\"],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-size\\\": 12,\\n \\\"visibility\\\": \\\"visible\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"rgba(110, 104, 106, 1)\\\",\\n \\\"text-halo-color\\\": \\\"#ffffff\\\",\\n \\\"text-halo-width\\\": 1\\n }\\n },\\n {\\n \\\"id\\\": \\\"pois\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"pois\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\n \\\"in\\\",\\n [\\\"get\\\", \\\"kind\\\"],\\n [\\n \\\"literal\\\",\\n [\\n \\\"beach\\\",\\n \\\"forest\\\",\\n \\\"marina\\\",\\n \\\"park\\\",\\n \\\"peak\\\",\\n \\\"zoo\\\",\\n \\\"garden\\\",\\n \\\"aerodrome\\\",\\n \\\"station\\\",\\n \\\"ferry_terminal\\\",\\n \\\"stadium\\\",\\n \\\"university\\\",\\n \\\"library\\\",\\n \\\"school\\\",\\n \\\"animal\\\",\\n \\\"toilet\\\",\\n \\\"drinking_water\\\",\\n \\\"viewpoint\\\",\\n \\\"attraction\\\",\\n \\\"camp_site\\\",\\n \\\"college\\\",\\n \\\"fishing\\\",\\n \\\"golf_course\\\",\\n \\\"hospital\\\",\\n \\\"information\\\",\\n \\\"landmark\\\",\\n \\\"military\\\",\\n \\\"national_park\\\",\\n \\\"nature_reserve\\\",\\n \\\"picnic_site\\\",\\n \\\"picnic_table\\\",\\n \\\"playground\\\",\\n \\\"railway\\\",\\n \\\"townhall\\\",\\n \\\"zoo\\\"\\n ]\\n ]\\n ],\\n [\\\">=\\\", [\\\"zoom\\\"], [\\\"+\\\", [\\\"get\\\", \\\"min_zoom\\\"], -2]]\\n ],\\n \\\"layout\\\": {\\n \\\"icon-image\\\": [\\n \\\"match\\\",\\n [\\\"get\\\", \\\"kind\\\"],\\n \\\"park\\\",\\n \\\"garden\\\",\\n [\\\"get\\\", \\\"kind\\\"]\\n ],\\n \\\"text-font\\\": [\\\"Noto Sans Regular\\\"],\\n \\\"text-justify\\\": \\\"auto\\\",\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-size\\\": [\\\"interpolate\\\", [\\\"linear\\\"], [\\\"zoom\\\"], 17, 11, 19, 14],\\n \\\"text-max-width\\\": 8,\\n \\\"text-offset\\\": [1.5, 0],\\n \\\"text-variable-anchor\\\": [\\\"left\\\", \\\"right\\\"],\\n \\\"visibility\\\": \\\"visible\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": [\\n \\\"case\\\",\\n [\\n \\\"in\\\",\\n [\\\"get\\\", \\\"kind\\\"],\\n [\\n \\\"literal\\\",\\n [\\n \\\"forest\\\",\\n \\\"park\\\",\\n \\\"peak\\\",\\n \\\"zoo\\\",\\n \\\"garden\\\",\\n \\\"bench\\\",\\n \\\"golf_course\\\",\\n \\\"national_park\\\",\\n \\\"nature_reserve\\\",\\n \\\"picnic_site\\\",\\n \\\"picnic_table\\\",\\n \\\"camp_site\\\"\\n ]\\n ]\\n ],\\n \\\"#076331\\\",\\n [\\n \\\"in\\\",\\n [\\\"get\\\", \\\"kind\\\"],\\n [\\\"literal\\\", [\\\"beach\\\", \\\"marina\\\", \\\"ferry_terminal\\\", \\\"fishing\\\"]]\\n ],\\n \\\"#634c00\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"hospital\\\"]]],\\n \\\"#730303\\\",\\n \\\"#1f5fa3\\\"\\n ],\\n \\\"text-halo-color\\\": \\\"rgba(253, 252, 252, 1)\\\",\\n \\\"text-halo-width\\\": 1.5\\n }\\n },\\n {\\n \\\"id\\\": \\\"places_subplace\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"places\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"neighbourhood\\\"],\\n \\\"layout\\\": {\\n \\\"symbol-sort-key\\\": [\\n \\\"case\\\",\\n [\\\"has\\\", \\\"sort_key\\\"],\\n [\\\"get\\\", \\\"sort_key\\\"],\\n [\\\"get\\\", \\\"min_zoom\\\"]\\n ],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-font\\\": [\\\"Noto Sans Regular\\\"],\\n \\\"text-max-width\\\": 7,\\n \\\"text-letter-spacing\\\": 0.1,\\n \\\"text-padding\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 5,\\n 2,\\n 8,\\n 4,\\n 12,\\n 18,\\n 15,\\n 20\\n ],\\n \\\"text-size\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.2],\\n [\\\"zoom\\\"],\\n 11,\\n 8,\\n 14,\\n 14,\\n 18,\\n 24\\n ],\\n \\\"text-transform\\\": \\\"uppercase\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"rgba(88, 72, 69, 1)\\\",\\n \\\"text-halo-color\\\": \\\"rgba(248, 241, 241, 1)\\\",\\n \\\"text-halo-width\\\": 1\\n }\\n },\\n {\\n \\\"id\\\": \\\"places_region\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"places\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"region\\\"],\\n \\\"layout\\\": {\\n \\\"symbol-sort-key\\\": [\\\"get\\\", \\\"sort_key\\\"],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-font\\\": [\\\"Noto Sans Regular\\\"],\\n \\\"text-size\\\": [\\\"interpolate\\\", [\\\"linear\\\"], [\\\"zoom\\\"], 3, 11, 7, 16],\\n \\\"text-radial-offset\\\": 0.2,\\n \\\"text-anchor\\\": \\\"center\\\",\\n \\\"text-transform\\\": \\\"uppercase\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"rgba(127, 123, 120, 1)\\\",\\n \\\"text-halo-color\\\": \\\"rgba(246, 240, 240, 1)\\\",\\n \\\"text-halo-width\\\": 1\\n }\\n },\\n {\\n \\\"id\\\": \\\"places_locality\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"places\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"locality\\\"],\\n \\\"layout\\\": {\\n \\\"icon-image\\\": [\\\"step\\\", [\\\"zoom\\\"], \\\"townspot\\\", 8, \\\"\\\"],\\n \\\"icon-size\\\": 0.7,\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-font\\\": [\\n \\\"case\\\",\\n [\\\"<=\\\", [\\\"get\\\", \\\"min_zoom\\\"], 5],\\n [\\\"literal\\\", [\\\"Noto Sans Medium\\\"]],\\n [\\\"literal\\\", [\\\"Noto Sans Regular\\\"]]\\n ],\\n \\\"symbol-sort-key\\\": [\\n \\\"case\\\",\\n [\\\"has\\\", \\\"sort_key\\\"],\\n [\\\"get\\\", \\\"sort_key\\\"],\\n [\\\"get\\\", \\\"min_zoom\\\"]\\n ],\\n \\\"text-padding\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 5,\\n 3,\\n 8,\\n 7,\\n 12,\\n 11\\n ],\\n \\\"text-size\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 2,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 13],\\n 8,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 13],\\n 13,\\n 0\\n ],\\n 4,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 13],\\n 12,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 13],\\n 17,\\n 0\\n ],\\n 6,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 12],\\n 13,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 12],\\n 18,\\n 0\\n ],\\n 8,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 11],\\n 11,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 11],\\n 18,\\n 0\\n ],\\n 10,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 9],\\n 12,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 9],\\n 20,\\n 0\\n ],\\n 15,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 8],\\n 12,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 8],\\n 22,\\n 0\\n ]\\n ],\\n \\\"icon-padding\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 0,\\n 0,\\n 8,\\n 6,\\n 10,\\n 8,\\n 12,\\n 6,\\n 22,\\n 2\\n ],\\n \\\"text-justify\\\": \\\"auto\\\",\\n \\\"text-variable-anchor\\\": [\\n \\\"step\\\",\\n [\\\"zoom\\\"],\\n [\\\"literal\\\", [\\\"bottom\\\", \\\"left\\\", \\\"right\\\", \\\"top\\\"]],\\n 8,\\n [\\\"literal\\\", [\\\"center\\\"]]\\n ],\\n \\\"text-radial-offset\\\": 0.3,\\n \\\"visibility\\\": \\\"visible\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"rgba(94, 68, 51, 1)\\\",\\n \\\"text-halo-color\\\": \\\"rgba(253, 250, 249, 1)\\\",\\n \\\"text-halo-width\\\": 1\\n }\\n },\\n {\\n \\\"id\\\": \\\"places_country\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"places\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"country\\\"],\\n \\\"layout\\\": {\\n \\\"symbol-sort-key\\\": [\\n \\\"case\\\",\\n [\\\"has\\\", \\\"sort_key\\\"],\\n [\\\"get\\\", \\\"sort_key\\\"],\\n [\\\"get\\\", \\\"min_zoom\\\"]\\n ],\\n \\\"text-field\\\": \\\"<LANG_COUNTRY>\\\",\\n \\\"text-font\\\": [\\\"Noto Sans Medium\\\"],\\n \\\"text-size\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 2,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 10],\\n 12,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 10],\\n 15,\\n 0\\n ],\\n 6,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 9],\\n 11,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 8],\\n 18,\\n 0\\n ],\\n 8,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 7],\\n 12,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 7],\\n 20,\\n 0\\n ]\\n ],\\n \\\"icon-padding\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 0,\\n 2,\\n 14,\\n 2,\\n 16,\\n 20,\\n 17,\\n 2,\\n 22,\\n 2\\n ],\\n \\\"text-transform\\\": \\\"none\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"rgba(84, 79, 73, 1)\\\",\\n \\\"text-halo-color\\\": \\\"rgba(255, 255, 255, 1)\\\",\\n \\\"text-halo-width\\\": 1.5\\n }\\n },\\n {\\n \\\"id\\\": \\\"building_extrusion\\\",\\n \\\"type\\\": \\\"fill-extrusion\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"buildings\\\",\\n \\\"filter\\\": [\\n \\\"any\\\",\\n [\\\"==\\\", \\\"kind\\\", \\\"building_part\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"building\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"none\\\"},\\n \\\"paint\\\": {\\n \\\"fill-extrusion-opacity\\\": 0.1,\\n \\\"fill-extrusion-height\\\": {\\\"type\\\": \\\"identity\\\", \\\"property\\\": \\\"height\\\"}\\n }\\n }\\n]\"","import { language_script_pairs } from \"@protomaps/basemaps\";\n\nexport function isLanguageSupported(lang: string, script: string | undefined): boolean {\n const candidates = language_script_pairs.filter((l) => l.lang === lang);\n\n if (candidates.length === 0) {\n throw new Error(\n `The language \"${lang}\". The languages available are: ${language_script_pairs.map((l) => l.lang).join(\", \")}.`,\n );\n }\n\n if (script) {\n const candidatesWithScript = candidates.filter((l) => l.script === script);\n\n if (candidatesWithScript.length) {\n return true;\n }\n\n throw new Error(\n `The script \"${script}\" for the language \"${lang}\" is unsupported. Script available for this language: ${candidates.map((l) => l.script).join(\", \")}.`,\n );\n }\n\n return true;\n}\n\nexport function getDefaultLanguage(): string {\n const systemLang = Intl.DateTimeFormat().resolvedOptions().locale.split(\"-\")[0];\n if (isLanguageSupported(systemLang, undefined)) {\n return systemLang;\n }\n return \"en\";\n}\n","import { get_country_name, get_multiline_name } from \"@protomaps/basemaps\";\nimport Color from \"color\";\nimport type { StyleSpecification, LayerSpecification, SymbolLayerSpecification } from \"maplibre-gl\";\nimport { applyBrightnessRGB, applyContrastRGB, applyMultiplicationRGB, findColor, type RGBArray } from \"./colorchange\";\nimport versatileLayersRaw from \"./assets/versatile-layers-raw.txt?raw\";\nimport { getDefaultLanguage, isLanguageSupported } from \"./language\";\n\nconst baseStyles = {\n versatile: versatileLayersRaw,\n} as const;\n\nconst stylePresets = {\n \"versatile-night\": {\n baseStyle: \"versatile\",\n colorEdit: {\n brightness: -0.3,\n saturation: -0.8,\n multiplyColor: [\"#171075\", 0.6],\n contrast: [1.6, 160],\n } as ColorEdit,\n },\n\n \"versatile-bright\": {\n baseStyle: \"versatile\",\n colorEdit: {\n exposure: 0.6,\n saturation: -0.1,\n hueRotation: 15,\n contrast: [0.2, 220],\n } as ColorEdit,\n },\n\n \"versatile-bnw\": {\n baseStyle: \"versatile\",\n colorEdit: {\n exposure: -1,\n saturation: -1,\n contrast: [1.2, 160],\n } as ColorEdit,\n },\n\n \"versatile-blueprint\": {\n baseStyle: \"versatile\",\n colorEdit: {\n exposure: -0.7,\n saturation: -1,\n contrast: [1.2, 160],\n mixColor: [\"#3355bb\", 0.15],\n } as ColorEdit,\n },\n\n \"versatile-warm\": {\n baseStyle: \"versatile\",\n colorEdit: {\n exposure: -0.7,\n contrast: [-0.1, 110],\n mixColor: [\"#ff8800\", 0.1],\n } as ColorEdit,\n },\n\n \"versatile-vintage\": {\n baseStyle: \"versatile\",\n colorEdit: {\n exposure: -0.25,\n multiplyColor: [\"#ff8800\", 0.4],\n hueRotation: -5,\n } as ColorEdit,\n },\n\n \"versatile-saturated\": {\n baseStyle: \"versatile\",\n colorEdit: {\n exposure: -1,\n saturation: 0.1,\n } as ColorEdit,\n },\n} as const;\n\n/**\n * Options to modify colors of a base style\n */\nexport type ColorEdit = {\n /**\n * Invert the image color\n */\n negate?: boolean;\n\n /**\n * Ratio relative to current brightness.\n * Value in [-1, 1] but the range is actually open\n */\n brightness?: number;\n\n /**\n * Absolute brightness shift\n * Value in [-1, 1] but the range is actually open\n */\n brightnessShift?: number;\n\n /**\n * Exposure, like brightness but more preserving\n * Value in [-1, 1] but the range is actually open\n */\n exposure?: number;\n\n /**\n * Rotate the hue wheel\n * Value in [-180, 180] but the range is actually open\n */\n hueRotation?: number;\n\n /**\n * Modifiy color saturation\n * Value in [-1, 1] but the range is actually open\n */\n saturation?: number;\n\n /**\n * Multiply every color with the given one.\n */\n multiplyColor?: [\n /**\n * CSS color\n */\n string,\n /**\n * Mixing ratio in [0, 1], where 0 is fully the original color and 1 is fully the provided one.\n */\n number,\n ];\n\n /**\n * Mix every color with the given one.\n */\n mixColor?: [\n /**\n * CSS color\n */\n string,\n /**\n * Mixing ratio in [0, 1], where 0 is fully the original color and 1 is fully the one provided.\n */\n number,\n ];\n\n /**\n * Apply contrast, providing a contrast intensity and a mid (inflection) point\n */\n contrast?: [\n /**\n * Contrast intensity. Value in [-1, 1] but is actually an open range\n */\n number,\n /**\n * Color intensity mid point in the range [0, 255]\n */\n number,\n ];\n};\n\nexport type Lang =\n | \"ar\"\n | \"cs\"\n | \"bg\"\n | \"da\"\n | \"de\"\n | \"el\"\n | \"en\"\n | \"es\"\n | \"et\"\n | \"fa\"\n | \"fi\"\n | \"fr\"\n | \"ga\"\n | \"he\"\n | \"hi\"\n | \"hr\"\n | \"hu\"\n | \"id\"\n | \"it\"\n | \"ja\"\n | \"ko\"\n | \"lt\"\n | \"lv\"\n | \"ne\"\n | \"nl\"\n | \"no\"\n | \"mr\"\n | \"mt\"\n | \"pl\"\n | \"pt\"\n | \"ro\"\n | \"ru\"\n | \"sk\"\n | \"sl\"\n | \"sv\"\n | \"tr\"\n | \"uk\"\n | \"ur\"\n | \"vi\"\n | \"zh-Hans\"\n | \"zh-Hant\";\n\nexport type GetStyleOptions = {\n /**\n * The public URL of a pmtiles files. To use if sourcing tiles directly with\n * range-request using the `pmtiles`'s protocol. Alternatively, the option `tileJson` can be used and will take precedence.\n */\n pmtiles?: string;\n\n /**\n * The public URL to a tile JSON file. To use if classic z/x/y MVT tiles are served through\n * Maplibre's Martin or the pmtiles CLI. Will take precedence on the option `pmtiles` if both are provided.\n */\n tilejson?: string;\n\n /**\n * URL of the sprites\n */\n sprite?: string;\n\n /**\n * URL of the glyphs\n */\n glyphs: string;\n\n /**\n * Language to apply to the basemap. Leaving this undefined will set to auto mode and use the platform language of the end user.\n */\n lang?: Lang;\n\n /**\n * Language script to apply to the basemap\n */\n script?: string;\n\n /**\n * Points Of Interests are shown by default, requiring a sprite URL. Passing this option as `true` will remove the POIs layer\n * and make the `sprite` option unnecessary.\n */\n hidePOIs?: boolean;\n\n /**\n * Labels are shown by default, requiring a glyphs URL. Passing this options as `true` will remove the label layers and make the\n * `glyphs` option unnecessary.\n */\n hideLabels?: boolean;\n};\n\n/**\n * Options relative to building a style\n */\nexport type BuildStyleOptions = GetStyleOptions & {\n /**\n * Name of the style to start from\n */\n baseStyleName: string;\n\n /**\n * Optional color modification to apply to the provided style\n */\n colorEdit?: ColorEdit;\n};\n\n/**\n * Returns the list of styles available.\n */\nexport function getStyleList(): string[] {\n return Object.keys(baseStyles).concat(Object.keys(stylePresets));\n}\n\n/**\n * Get a style.\n */\nexport function getStyle(styleName: string, options: GetStyleOptions): StyleSpecification {\n // Check is style is raw\n if (styleName in baseStyles) {\n return buildStyle({\n ...options,\n baseStyleName: styleName,\n });\n }\n\n // Or if it's a preset\n if (styleName in stylePresets) {\n const presetInfo = stylePresets[styleName as keyof typeof stylePresets];\n return buildStyle({\n ...options,\n baseStyleName: presetInfo.baseStyle,\n colorEdit: presetInfo.colorEdit,\n });\n }\n\n throw new Error(`The style \"${styleName}\" does not exist as a base style, nor as a preset.`);\n}\n\n/**\n * Build your own style, using one of the base style as starting point.\n */\nexport function buildStyle(options: BuildStyleOptions): StyleSpecification {\n let countryTextField: string;\n let otherTranslatedTextField: string;\n const hideLabels = options.hideLabels ?? false;\n\n // Not displaying any label\n if (hideLabels) {\n countryTextField = '\"\"';\n otherTranslatedTextField = '\"\"';\n }\n\n // Displaying a label that is supported\n else if (typeof options.lang === \"string\" && isLanguageSupported(options.lang, options.script)) {\n countryTextField = JSON.stringify(get_country_name(options.lang, options.script));\n otherTranslatedTextField = JSON.stringify(get_multiline_name(options.lang, options.script));\n }\n\n // Not providing any language: using platform language\n else {\n const lang = getDefaultLanguage();\n countryTextField = JSON.stringify(get_country_name(lang));\n otherTranslatedTextField = JSON.stringify(get_multiline_name(lang));\n }\n\n if (!(options.baseStyleName in baseStyles)) {\n throw new Error(`The base style ${options.baseStyleName} does not exist.`);\n }\n\n const baseStyleLayers = baseStyles[options.baseStyleName as keyof typeof baseStyles];\n\n const translatedLayersStr = baseStyleLayers\n .replaceAll('\"<LANG>\"', otherTranslatedTextField)\n .replaceAll('\"<LANG_COUNTRY>\"', countryTextField);\n\n let sourceUrl: string;\n if (typeof options.tilejson === \"string\") {\n sourceUrl = options.tilejson;\n } else if (typeof options.pmtiles === \"string\") {\n sourceUrl = `pmtiles://${options.pmtiles}`;\n } else {\n throw new Error(`At least one option of \"tilejson\" or \"pmtiles\" must be provided as data source.`);\n }\n\n let layers = JSON.parse(translatedLayersStr) as unknown as LayerSpecification[];\n const hidePOIs = options.hidePOIs ?? false;\n\n if (hidePOIs) {\n layers = layers.filter((l) => l.id !== \"pois\");\n }\n\n if (hideLabels) {\n // Keeping the POI layer, yet removing the text field\n const poiLayers = layers.filter((l) => l.id === \"pois\");\n if (poiLayers.length) {\n const poiLayer = poiLayers[0] as SymbolLayerSpecification;\n if (poiLayer.layout !== undefined) {\n const layout = poiLayer.layout;\n if (layout[\"text-field\"] !== undefined) {\n layout[\"text-field\"] = \"\";\n }\n }\n }\n\n layers = layers.filter((layer) => {\n if (layer.id === \"pois\") {\n return true;\n }\n\n if (layer.type !== \"symbol\") {\n return true;\n }\n\n if (layer.layout !== undefined) {\n const layout = layer.layout;\n if (layout[\"text-field\"] !== undefined) {\n return false;\n }\n }\n return true;\n });\n }\n\n const colorOptions = options.colorEdit ?? {};\n const brightness = colorOptions.brightness ?? 0;\n const hueRotation = colorOptions.hueRotation ?? 0;\n const saturation = colorOptions.saturation ?? 0;\n const negate = colorOptions.negate ?? false;\n const brightnessShift = colorOptions.brightnessShift ?? 0;\n const exposure = colorOptions.exposure ?? 0;\n\n const shouldApplyColorTransform =\n brightness !== 0 ||\n hueRotation !== 0 ||\n saturation !== 0 ||\n negate === true ||\n colorOptions.multiplyColor !== undefined ||\n colorOptions.mixColor !== undefined ||\n brightnessShift !== 0 ||\n colorOptions.contrast !== undefined ||\n exposure !== 0;\n\n if (shouldApplyColorTransform) {\n findColor(layers, (color: string) => {\n // Using the Color lib for saturation and hue rotation\n let layerColor = Color(color);\n\n if (negate) {\n layerColor = layerColor.negate();\n }\n\n if (hueRotation !== 0) {\n layerColor = layerColor.rotate(hueRotation);\n }\n\n if (saturation !== 0) {\n layerColor = layerColor.saturate(saturation);\n }\n\n if (brightness > 0) {\n layerColor = layerColor.lighten(brightness);\n } else if (brightness < 0) {\n layerColor = layerColor.darken(brightness * -1);\n }\n\n if (brightnessShift !== 0) {\n const hsl = layerColor.hsl().array();\n hsl[2] += brightnessShift * 100;\n layerColor = Color.hsl(...hsl);\n }\n\n if (\n Array.isArray(colorOptions.mixColor) &&\n typeof colorOptions.mixColor[0] === \"string\" &&\n typeof colorOptions.mixColor[1] === \"number\" &&\n colorOptions.mixColor[1] !== 0\n ) {\n layerColor = layerColor.mix(Color(colorOptions.mixColor[0]), colorOptions.mixColor[1]);\n }\n\n const rgbColorInstance = layerColor.rgb();\n const alpha = rgbColorInstance.alpha();\n let rgbArr = [rgbColorInstance.red(), rgbColorInstance.green(), rgbColorInstance.blue()] as RGBArray;\n\n // Apply exposure\n if (exposure !== 0) {\n rgbArr = applyBrightnessRGB(rgbArr, exposure);\n }\n\n // Apply contrast\n if (\n Array.isArray(colorOptions.contrast) &&\n typeof colorOptions.contrast[0] === \"number\" &&\n typeof colorOptions.contrast[1] === \"number\" &&\n colorOptions.contrast[0] !== 0\n ) {\n rgbArr = applyContrastRGB(rgbArr, colorOptions.contrast[0], colorOptions.contrast[1]);\n }\n\n // Apply color multiplication\n if (\n Array.isArray(colorOptions.multiplyColor) &&\n typeof colorOptions.multiplyColor[0] === \"string\" &&\n typeof colorOptions.multiplyColor[1] === \"number\" &&\n colorOptions.multiplyColor[1] !== 0\n ) {\n const multiplyColor = Color(colorOptions.multiplyColor[0]);\n rgbArr = applyMultiplicationRGB(\n rgbArr,\n [multiplyColor.red(), multiplyColor.green(), multiplyColor.blue()],\n colorOptions.multiplyColor[1],\n );\n }\n\n // Back to Color lib format\n const outputColor = Color({ r: rgbArr[0], g: rgbArr[1], b: rgbArr[2], alpha: alpha });\n\n if (color.startsWith(\"rgba(\") || color.startsWith(\"rgb(\")) {\n return outputColor.rgb().toString();\n }\n\n if (color.startsWith(\"hsl(\") || color.startsWith(\"hsla(\")) {\n return outputColor.hsl().toString();\n }\n\n return outputColor.hexa();\n });\n }\n\n const style: StyleSpecification = {\n version: 8,\n ...(options.sprite && !hidePOIs ? { sprite: options.sprite } : {}),\n glyphs: options.glyphs,\n sources: {\n __protomaps_source: {\n type: \"vector\",\n url: sourceUrl,\n attribution: \"<a href='https://openstreetmap.org/copyright'>© OpenStreetMap Contributors</a>\",\n },\n },\n layers: layers,\n };\n\n return style;\n}\n"],"names":["cssKeywords","reverseNames","name","colorNames","cs","string","prefix","value","model","abbr","hex","rgba","per","keyword","rgb","match","i","hexAlpha","i2","clamp","hsl","alpha","h","s","l","hwb","w","b","hexDouble","r","g","hsla","hwba","a","number_","min","max","string_","reverseKeywords","key","convert","LAB_FT","srgbNonlinearTransform","c","cc","srgbNonlinearTransformInv","channels","labels","delta","rdif","gdif","bdif","v","diff","diffc","lp","mp","sp","aa","bb","k","m","y","comparativeDistance","x","reversed","currentClosestDistance","currentClosestKeyword","distance","z","xyz","t3","t2","t1","smin","lmin","sv","hsv","hi","f","p","q","t","vmin","sl","wh","bl","ratio","n","cmyk","oklab","ll","oklch","lab","y2","x2","z2","lch","hr","args","saturation","ansi","color","mult","rem","colorString","char","integer","chroma","hue","grayscale","hcg","pure","mg","apple","gray","buildGraph","graph","models","conversions","length","deriveBFS","fromModel","queue","current","adjacents","adjacent","node","link","from","to","wrapConversion","toModel","path","fn","cur","route","conversion","wrapRaw","wrappedFn","arg0","wrapRounded","result","routes","routeModels","skippedModels","hashedModelKeys","limiters","Color","object","newArray","zeroArray","keys","hashedKeys","limit","places","self","arguments_","roundToPlace","getset","maxfn","rgbArray","alphaHex","lum","element","chan","color2","lum1","lum2","contrastRatio","degrees","mixinColor","weight","color1","w1","w2","assertArray","roundTo","number","channel","modifier","array","isColorDescription","elem","findColor","data","dataAsRecord","applyBrightnessSingle","input","brightness","normalized","adjusted","applyBrightnessRGB","applyContrastSingle","contrast","midpoint","centered","factor","normalizedDistance","scaleFactor","applyContrastRGB","applyMultiplicationSingle","input1","input2","applyMultiplicationRGB","_chan","versatileLayersRaw","isLanguageSupported","lang","script","candidates","language_script_pairs","getDefaultLanguage","systemLang","baseStyles","stylePresets","getStyleList","getStyle","styleName","options","buildStyle","presetInfo","countryTextField","otherTranslatedTextField","hideLabels","get_country_name","get_multiline_name","translatedLayersStr","sourceUrl","layers","hidePOIs","poiLayers","poiLayer","layout","layer","colorOptions","hueRotation","negate","brightnessShift","exposure","layerColor","rgbColorInstance","rgbArr","multiplyColor","outputColor"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","x_google_ignoreList":[0,1,2,3,4,5]}
1
+ {"version":3,"file":"basemapkit.js","sources":["../node_modules/color-name/index.js","../node_modules/color-string/index.js","../node_modules/color-convert/conversions.js","../node_modules/color-convert/route.js","../node_modules/color-convert/index.js","../node_modules/color/index.js","../src/lib/colorchange.ts","../src/lib/assets/avenue-layers-raw.txt?raw","../src/lib/language.ts","../src/lib/basemapkit.ts"],"sourcesContent":["export default {\n\taliceblue: [240, 248, 255],\n\tantiquewhite: [250, 235, 215],\n\taqua: [0, 255, 255],\n\taquamarine: [127, 255, 212],\n\tazure: [240, 255, 255],\n\tbeige: [245, 245, 220],\n\tbisque: [255, 228, 196],\n\tblack: [0, 0, 0],\n\tblanchedalmond: [255, 235, 205],\n\tblue: [0, 0, 255],\n\tblueviolet: [138, 43, 226],\n\tbrown: [165, 42, 42],\n\tburlywood: [222, 184, 135],\n\tcadetblue: [95, 158, 160],\n\tchartreuse: [127, 255, 0],\n\tchocolate: [210, 105, 30],\n\tcoral: [255, 127, 80],\n\tcornflowerblue: [100, 149, 237],\n\tcornsilk: [255, 248, 220],\n\tcrimson: [220, 20, 60],\n\tcyan: [0, 255, 255],\n\tdarkblue: [0, 0, 139],\n\tdarkcyan: [0, 139, 139],\n\tdarkgoldenrod: [184, 134, 11],\n\tdarkgray: [169, 169, 169],\n\tdarkgreen: [0, 100, 0],\n\tdarkgrey: [169, 169, 169],\n\tdarkkhaki: [189, 183, 107],\n\tdarkmagenta: [139, 0, 139],\n\tdarkolivegreen: [85, 107, 47],\n\tdarkorange: [255, 140, 0],\n\tdarkorchid: [153, 50, 204],\n\tdarkred: [139, 0, 0],\n\tdarksalmon: [233, 150, 122],\n\tdarkseagreen: [143, 188, 143],\n\tdarkslateblue: [72, 61, 139],\n\tdarkslategray: [47, 79, 79],\n\tdarkslategrey: [47, 79, 79],\n\tdarkturquoise: [0, 206, 209],\n\tdarkviolet: [148, 0, 211],\n\tdeeppink: [255, 20, 147],\n\tdeepskyblue: [0, 191, 255],\n\tdimgray: [105, 105, 105],\n\tdimgrey: [105, 105, 105],\n\tdodgerblue: [30, 144, 255],\n\tfirebrick: [178, 34, 34],\n\tfloralwhite: [255, 250, 240],\n\tforestgreen: [34, 139, 34],\n\tfuchsia: [255, 0, 255],\n\tgainsboro: [220, 220, 220],\n\tghostwhite: [248, 248, 255],\n\tgold: [255, 215, 0],\n\tgoldenrod: [218, 165, 32],\n\tgray: [128, 128, 128],\n\tgreen: [0, 128, 0],\n\tgreenyellow: [173, 255, 47],\n\tgrey: [128, 128, 128],\n\thoneydew: [240, 255, 240],\n\thotpink: [255, 105, 180],\n\tindianred: [205, 92, 92],\n\tindigo: [75, 0, 130],\n\tivory: [255, 255, 240],\n\tkhaki: [240, 230, 140],\n\tlavender: [230, 230, 250],\n\tlavenderblush: [255, 240, 245],\n\tlawngreen: [124, 252, 0],\n\tlemonchiffon: [255, 250, 205],\n\tlightblue: [173, 216, 230],\n\tlightcoral: [240, 128, 128],\n\tlightcyan: [224, 255, 255],\n\tlightgoldenrodyellow: [250, 250, 210],\n\tlightgray: [211, 211, 211],\n\tlightgreen: [144, 238, 144],\n\tlightgrey: [211, 211, 211],\n\tlightpink: [255, 182, 193],\n\tlightsalmon: [255, 160, 122],\n\tlightseagreen: [32, 178, 170],\n\tlightskyblue: [135, 206, 250],\n\tlightslategray: [119, 136, 153],\n\tlightslategrey: [119, 136, 153],\n\tlightsteelblue: [176, 196, 222],\n\tlightyellow: [255, 255, 224],\n\tlime: [0, 255, 0],\n\tlimegreen: [50, 205, 50],\n\tlinen: [250, 240, 230],\n\tmagenta: [255, 0, 255],\n\tmaroon: [128, 0, 0],\n\tmediumaquamarine: [102, 205, 170],\n\tmediumblue: [0, 0, 205],\n\tmediumorchid: [186, 85, 211],\n\tmediumpurple: [147, 112, 219],\n\tmediumseagreen: [60, 179, 113],\n\tmediumslateblue: [123, 104, 238],\n\tmediumspringgreen: [0, 250, 154],\n\tmediumturquoise: [72, 209, 204],\n\tmediumvioletred: [199, 21, 133],\n\tmidnightblue: [25, 25, 112],\n\tmintcream: [245, 255, 250],\n\tmistyrose: [255, 228, 225],\n\tmoccasin: [255, 228, 181],\n\tnavajowhite: [255, 222, 173],\n\tnavy: [0, 0, 128],\n\toldlace: [253, 245, 230],\n\tolive: [128, 128, 0],\n\tolivedrab: [107, 142, 35],\n\torange: [255, 165, 0],\n\torangered: [255, 69, 0],\n\torchid: [218, 112, 214],\n\tpalegoldenrod: [238, 232, 170],\n\tpalegreen: [152, 251, 152],\n\tpaleturquoise: [175, 238, 238],\n\tpalevioletred: [219, 112, 147],\n\tpapayawhip: [255, 239, 213],\n\tpeachpuff: [255, 218, 185],\n\tperu: [205, 133, 63],\n\tpink: [255, 192, 203],\n\tplum: [221, 160, 221],\n\tpowderblue: [176, 224, 230],\n\tpurple: [128, 0, 128],\n\trebeccapurple: [102, 51, 153],\n\tred: [255, 0, 0],\n\trosybrown: [188, 143, 143],\n\troyalblue: [65, 105, 225],\n\tsaddlebrown: [139, 69, 19],\n\tsalmon: [250, 128, 114],\n\tsandybrown: [244, 164, 96],\n\tseagreen: [46, 139, 87],\n\tseashell: [255, 245, 238],\n\tsienna: [160, 82, 45],\n\tsilver: [192, 192, 192],\n\tskyblue: [135, 206, 235],\n\tslateblue: [106, 90, 205],\n\tslategray: [112, 128, 144],\n\tslategrey: [112, 128, 144],\n\tsnow: [255, 250, 250],\n\tspringgreen: [0, 255, 127],\n\tsteelblue: [70, 130, 180],\n\ttan: [210, 180, 140],\n\tteal: [0, 128, 128],\n\tthistle: [216, 191, 216],\n\ttomato: [255, 99, 71],\n\tturquoise: [64, 224, 208],\n\tviolet: [238, 130, 238],\n\twheat: [245, 222, 179],\n\twhite: [255, 255, 255],\n\twhitesmoke: [245, 245, 245],\n\tyellow: [255, 255, 0],\n\tyellowgreen: [154, 205, 50]\n}\n","import colorNames from 'color-name';\n\nconst reverseNames = Object.create(null);\n\n// Create a list of reverse color names\nfor (const name in colorNames) {\n\tif (Object.hasOwn(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nconst cs = {\n\tto: {},\n\tget: {},\n};\n\ncs.get = function (string) {\n\tconst prefix = string.slice(0, 3).toLowerCase();\n\tlet value;\n\tlet model;\n\tswitch (prefix) {\n\t\tcase 'hsl': {\n\t\t\tvalue = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'hwb': {\n\t\t\tvalue = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\t}\n\n\t\tdefault: {\n\t\t\tvalue = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!value) {\n\t\treturn null;\n\t}\n\n\treturn {model, value};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tconst abbr = /^#([a-f\\d]{3,4})$/i;\n\tconst hex = /^#([a-f\\d]{6})([a-f\\d]{2})?$/i;\n\tconst rgba = /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|/]\\s*([+-]?[\\d.]+)(%?)\\s*)?\\)$/;\n\tconst per = /^rgba?\\(\\s*([+-]?[\\d.]+)%\\s*,?\\s*([+-]?[\\d.]+)%\\s*,?\\s*([+-]?[\\d.]+)%\\s*(?:[,|/]\\s*([+-]?[\\d.]+)(%?)\\s*)?\\)$/;\n\tconst keyword = /^(\\w+)$/;\n\n\tlet rgb = [0, 0, 0, 1];\n\tlet match;\n\tlet i;\n\tlet hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tconst i2 = i * 2;\n\t\t\trgb[i] = Number.parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = Number.parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Number.parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = Number.parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Number.parseInt(match[i + 1], 10);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\trgb[3] = match[5] ? Number.parseFloat(match[4]) * 0.01 : Number.parseFloat(match[4]);\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(Number.parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\trgb[3] = match[5] ? Number.parseFloat(match[4]) * 0.01 : Number.parseFloat(match[4]);\n\t\t}\n\t} else if (match = string.match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!Object.hasOwn(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\trgb = colorNames[match[1]];\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tconst hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d.]+)%\\s*,?\\s*([+-]?[\\d.]+)%\\s*(?:[,|/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tconst match = string.match(hsl);\n\n\tif (match) {\n\t\tconst alpha = Number.parseFloat(match[4]);\n\t\tconst h = ((Number.parseFloat(match[1]) % 360) + 360) % 360;\n\t\tconst s = clamp(Number.parseFloat(match[2]), 0, 100);\n\t\tconst l = clamp(Number.parseFloat(match[3]), 0, 100);\n\t\tconst a = clamp(Number.isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tconst hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d.]+)%\\s*,\\s*([+-]?[\\d.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tconst match = string.match(hwb);\n\n\tif (match) {\n\t\tconst alpha = Number.parseFloat(match[4]);\n\t\tconst h = ((Number.parseFloat(match[1]) % 360) + 360) % 360;\n\t\tconst w = clamp(Number.parseFloat(match[2]), 0, 100);\n\t\tconst b = clamp(Number.parseFloat(match[3]), 0, 100);\n\t\tconst a = clamp(Number.isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function (...rgba) {\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function (...rgba) {\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function (...rgba) {\n\tconst r = Math.round(rgba[0] / 255 * 100);\n\tconst g = Math.round(rgba[1] / 255 * 100);\n\tconst b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function (...hsla) {\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// Hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function (...hwba) {\n\tlet a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (...rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// Helpers\nfunction clamp(number_, min, max) {\n\treturn Math.min(Math.max(min, number_), max);\n}\n\nfunction hexDouble(number_) {\n\tconst string_ = Math.round(number_).toString(16).toUpperCase();\n\treturn (string_.length < 2) ? '0' + string_ : string_;\n}\n\nexport default cs;\n","/* MIT license */\n/* eslint-disable no-mixed-operators */\nimport cssKeywords from 'color-name';\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\toklab: {channels: 3, labels: ['okl', 'oka', 'okb']},\n\tlch: {channels: 3, labels: 'lch'},\n\toklch: {channels: 3, labels: ['okl', 'okc', 'okh']},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']},\n};\n\nexport default convert;\n\n// LAB f(t) constant\nconst LAB_FT = (6 / 29) ** 3;\n\n// SRGB non-linear transform functions\nfunction srgbNonlinearTransform(c) {\n\tconst cc = c > 0.003_130_8\n\t\t? ((1.055 * (c ** (1 / 2.4))) - 0.055)\n\t\t: c * 12.92;\n\treturn Math.min(Math.max(0, cc), 1);\n}\n\nfunction srgbNonlinearTransformInv(c) {\n\treturn c > 0.040_45 ? (((c + 0.055) / 1.055) ** 2.4) : (c / 12.92);\n}\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tswitch (max) {\n\t\tcase min: {\n\t\t\th = 0;\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase r: {\n\t\t\th = (g - b) / delta;\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase g: {\n\t\t\th = 2 + (b - r) / delta;\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase b: {\n\t\t\th = 4 + (r - g) / delta;\n\n\t\t\tbreak;\n\t\t}\n\t// No default\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tswitch (v) {\n\t\t\tcase r: {\n\t\t\t\th = bdif - gdif;\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase g: {\n\t\t\t\th = (1 / 3) + rdif - bdif;\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase b: {\n\t\t\t\th = (2 / 3) + gdif - rdif;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t// No default\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100,\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.oklab = function (rgb) {\n\t// Assume sRGB\n\tconst r = srgbNonlinearTransformInv(rgb[0] / 255);\n\tconst g = srgbNonlinearTransformInv(rgb[1] / 255);\n\tconst b = srgbNonlinearTransformInv(rgb[2] / 255);\n\n\tconst lp = Math.cbrt(0.412_221_470_8 * r + 0.536_332_536_3 * g + 0.051_445_992_9 * b);\n\tconst mp = Math.cbrt(0.211_903_498_2 * r + 0.680_699_545_1 * g + 0.107_396_956_6 * b);\n\tconst sp = Math.cbrt(0.088_302_461_9 * r + 0.281_718_837_6 * g + 0.629_978_700_5 * b);\n\n\tconst l = 0.210_454_255_3 * lp + 0.793_617_785 * mp - 0.004_072_046_8 * sp;\n\tconst aa = 1.977_998_495_1 * lp - 2.428_592_205 * mp + 0.450_593_709_9 * sp;\n\tconst bb = 0.025_904_037_1 * lp + 0.782_771_766_2 * mp - 0.808_675_766 * sp;\n\n\treturn [l * 100, aa * 100, bb * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Number.POSITIVE_INFINITY;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\t// Assume sRGB\n\tconst r = srgbNonlinearTransformInv(rgb[0] / 255);\n\tconst g = srgbNonlinearTransformInv(rgb[1] / 255);\n\tconst b = srgbNonlinearTransformInv(rgb[2] / 255);\n\n\tconst x = (r * 0.412_456_4) + (g * 0.357_576_1) + (b * 0.180_437_5);\n\tconst y = (r * 0.212_672_9) + (g * 0.715_152_2) + (b * 0.072_175);\n\tconst z = (r * 0.019_333_9) + (g * 0.119_192) + (b * 0.950_304_1);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > LAB_FT ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > LAB_FT ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > LAB_FT ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t3;\n\tlet value;\n\n\tif (s === 0) {\n\t\tvalue = l * 255;\n\t\treturn [value, value, value];\n\t}\n\n\tconst t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tvalue = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tvalue = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tvalue = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tvalue = t1;\n\t\t}\n\n\t\trgb[i] = value * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0: {\n\t\t\treturn [v, t, p];\n\t\t}\n\n\t\tcase 1: {\n\t\t\treturn [q, v, p];\n\t\t}\n\n\t\tcase 2: {\n\t\t\treturn [p, v, t];\n\t\t}\n\n\t\tcase 3: {\n\t\t\treturn [p, q, v];\n\t\t}\n\n\t\tcase 4: {\n\t\t\treturn [t, p, v];\n\t\t}\n\n\t\tcase 5: {\n\t\t\treturn [v, p, q];\n\t\t}\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\t// eslint-disable-next-line no-bitwise\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces, default-case-last */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: { r = v; g = n; b = wh; break;\n\t\t}\n\n\t\tcase 1: { r = n; g = v; b = wh; break;\n\t\t}\n\n\t\tcase 2: { r = wh; g = v; b = n; break;\n\t\t}\n\n\t\tcase 3: { r = wh; g = n; b = v; break;\n\t\t}\n\n\t\tcase 4: { r = n; g = wh; b = v; break;\n\t\t}\n\n\t\tcase 5: { r = v; g = wh; b = n; break;\n\t\t}\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces, default-case-last */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.240_454_2) + (y * -1.537_138_5) + (z * -0.498_531_4);\n\tg = (x * -0.969_266) + (y * 1.876_010_8) + (z * 0.041_556);\n\tb = (x * 0.055_643_4) + (y * -0.204_025_9) + (z * 1.057_225_2);\n\n\t// Assume sRGB\n\tr = srgbNonlinearTransform(r);\n\tg = srgbNonlinearTransform(g);\n\tb = srgbNonlinearTransform(b);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > LAB_FT ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > LAB_FT ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > LAB_FT ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.xyz.oklab = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\n\tconst lp = Math.cbrt(0.818_933_010_1 * x + 0.361_866_742_4 * y - 0.128_859_713_7 * z);\n\tconst mp = Math.cbrt(0.032_984_543_6 * x + 0.929_311_871_5 * y + 0.036_145_638_7 * z);\n\tconst sp = Math.cbrt(0.048_200_301_8 * x + 0.264_366_269_1 * y + 0.633_851_707 * z);\n\n\tconst l = 0.210_454_255_3 * lp + 0.793_617_785 * mp - 0.004_072_046_8 * sp;\n\tconst a = 1.977_998_495_1 * lp - 2.428_592_205 * mp + 0.450_593_709_9 * sp;\n\tconst b = 0.025_904_037_1 * lp + 0.782_771_766_2 * mp - 0.808_675_766 * sp;\n\n\treturn [l * 100, a * 100, b * 100];\n};\n\nconvert.oklab.oklch = function (oklab) {\n\treturn convert.lab.lch(oklab);\n};\n\nconvert.oklab.xyz = function (oklab) {\n\tconst ll = oklab[0] / 100;\n\tconst a = oklab[1] / 100;\n\tconst b = oklab[2] / 100;\n\n\tconst l = (0.999_999_998 * ll + 0.396_337_792 * a + 0.215_803_758 * b) ** 3;\n\tconst m = (1.000_000_008 * ll - 0.105_561_342 * a - 0.063_854_175 * b) ** 3;\n\tconst s = (1.000_000_055 * ll - 0.089_484_182 * a - 1.291_485_538 * b) ** 3;\n\n\tconst x = 1.227_013_851 * l - 0.557_799_98 * m + 0.281_256_149 * s;\n\tconst y = -0.040_580_178 * l + 1.112_256_87 * m - 0.071_676_679 * s;\n\tconst z = -0.076_381_285 * l - 0.421_481_978 * m + 1.586_163_22 * s;\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.oklab.rgb = function (oklab) {\n\tconst ll = oklab[0] / 100;\n\tconst aa = oklab[1] / 100;\n\tconst bb = oklab[2] / 100;\n\n\tconst l = (ll + 0.396_337_777_4 * aa + 0.215_803_757_3 * bb) ** 3;\n\tconst m = (ll - 0.105_561_345_8 * aa - 0.063_854_172_8 * bb) ** 3;\n\tconst s = (ll - 0.089_484_177_5 * aa - 1.291_485_548 * bb) ** 3;\n\n\t// Assume sRGB\n\tconst r = srgbNonlinearTransform(4.076_741_662_1 * l - 3.307_711_591_3 * m + 0.230_969_929_2 * s);\n\tconst g = srgbNonlinearTransform(-1.268_438_004_6 * l + 2.609_757_401_1 * m - 0.341_319_396_5 * s);\n\tconst b = srgbNonlinearTransform(-0.004_196_086_3 * l - 0.703_418_614_7 * m + 1.707_614_701 * s);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.oklch.oklab = function (oklch) {\n\treturn convert.lch.lab(oklch);\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > LAB_FT ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > LAB_FT ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > LAB_FT ? z2 : (z - 16 / 116) / 7.787;\n\n\t// Illuminant D65 XYZ Tristrimulus Values\n\t// https://en.wikipedia.org/wiki/CIE_1931_color_space\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t/* eslint-disable no-bitwise */\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\t\t/* eslint-enable no-bitwise */\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\t// eslint-disable-next-line no-bitwise\n\tif (r >> 4 === g >> 4 && g >> 4 === b >> 4) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\targs = args[0];\n\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (Math.trunc(args > 50) + 1) * 0.5;\n\t/* eslint-disable no-bitwise */\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\t/* eslint-enable no-bitwise */\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\targs = args[0];\n\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\t/* eslint-disable no-bitwise */\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\t/* eslint-enable no-bitwise */\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.slice(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f\\d]{6}|[a-f\\d]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = [...colorString].map(char => char + char).join('');\n\t}\n\n\tconst integer = Number.parseInt(colorString, 16);\n\t/* eslint-disable no-bitwise */\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\t/* eslint-enable no-bitwise */\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet hue;\n\n\tconst grayscale = chroma < 1 ? min / (1 - chroma) : 0;\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else if (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else if (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2 * s * l) : (2 * s * (1 - l));\n\n\tlet f = 0;\n\tif (c < 1) {\n\t\tf = (l - 0.5 * c) / (1 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0: {\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\t}\n\n\t\tcase 1: {\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\t}\n\n\t\tcase 2: {\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\t}\n\n\t\tcase 3: {\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\t}\n\n\t\tcase 4: {\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\t}\n\n\t\tdefault: {\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t\t}\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255,\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1 - c);\n\tlet f = 0;\n\n\tif (v > 0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else if (l >= 0.5 && l < 1) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65_535) * 255, (apple[1] / 65_535) * 255, (apple[2] / 65_535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65_535, (rgb[1] / 255) * 65_535, (rgb[2] / 255) * 65_535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\t/* eslint-disable no-bitwise */\n\tconst value = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (value << 16) + (value << 8) + value;\n\t/* eslint-enable no-bitwise */\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.slice(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst value = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [value / 255 * 100];\n};\n","import conversions from './conversions.js';\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let {length} = models, i = 0; i < length; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null,\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length > 0) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let {length} = adjacents, i = 0; i < length; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nfunction route(fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let {length} = models, i = 0; i < length; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n}\n\nexport default route;\n","import conversions from './conversions.js';\nimport route from './route.js';\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let {length} = result, i = 0; i < length; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfor (const fromModel of models) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\tfor (const toModel of routeModels) {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t}\n}\n\nexport default convert;\n","import colorString from 'color-string';\nimport convert from 'color-convert';\n\nconst skippedModels = [\n\t// To be honest, I don't really feel like keyword belongs in color convert, but eh.\n\t'keyword',\n\n\t// Gray conflicts with some method names, and has its own method defined.\n\t'gray',\n\n\t// Shouldn't really be in color-convert either...\n\t'hex',\n];\n\nconst hashedModelKeys = {};\nfor (const model of Object.keys(convert)) {\n\thashedModelKeys[[...convert[model].labels].sort().join('')] = model;\n}\n\nconst limiters = {};\n\nfunction Color(object, model) {\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(object, model);\n\t}\n\n\tif (model && model in skippedModels) {\n\t\tmodel = null;\n\t}\n\n\tif (model && !(model in convert)) {\n\t\tthrow new Error('Unknown model: ' + model);\n\t}\n\n\tlet i;\n\tlet channels;\n\n\tif (object == null) { // eslint-disable-line no-eq-null,eqeqeq\n\t\tthis.model = 'rgb';\n\t\tthis.color = [0, 0, 0];\n\t\tthis.valpha = 1;\n\t} else if (object instanceof Color) {\n\t\tthis.model = object.model;\n\t\tthis.color = [...object.color];\n\t\tthis.valpha = object.valpha;\n\t} else if (typeof object === 'string') {\n\t\tconst result = colorString.get(object);\n\t\tif (result === null) {\n\t\t\tthrow new Error('Unable to parse color from string: ' + object);\n\t\t}\n\n\t\tthis.model = result.model;\n\t\tchannels = convert[this.model].channels;\n\t\tthis.color = result.value.slice(0, channels);\n\t\tthis.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1;\n\t} else if (object.length > 0) {\n\t\tthis.model = model || 'rgb';\n\t\tchannels = convert[this.model].channels;\n\t\tconst newArray = Array.prototype.slice.call(object, 0, channels);\n\t\tthis.color = zeroArray(newArray, channels);\n\t\tthis.valpha = typeof object[channels] === 'number' ? object[channels] : 1;\n\t} else if (typeof object === 'number') {\n\t\t// This is always RGB - can be converted later on.\n\t\tthis.model = 'rgb';\n\t\tthis.color = [\n\t\t\t(object >> 16) & 0xFF,\n\t\t\t(object >> 8) & 0xFF,\n\t\t\tobject & 0xFF,\n\t\t];\n\t\tthis.valpha = 1;\n\t} else {\n\t\tthis.valpha = 1;\n\n\t\tconst keys = Object.keys(object);\n\t\tif ('alpha' in object) {\n\t\t\tkeys.splice(keys.indexOf('alpha'), 1);\n\t\t\tthis.valpha = typeof object.alpha === 'number' ? object.alpha : 0;\n\t\t}\n\n\t\tconst hashedKeys = keys.sort().join('');\n\t\tif (!(hashedKeys in hashedModelKeys)) {\n\t\t\tthrow new Error('Unable to parse color from object: ' + JSON.stringify(object));\n\t\t}\n\n\t\tthis.model = hashedModelKeys[hashedKeys];\n\n\t\tconst {labels} = convert[this.model];\n\t\tconst color = [];\n\t\tfor (i = 0; i < labels.length; i++) {\n\t\t\tcolor.push(object[labels[i]]);\n\t\t}\n\n\t\tthis.color = zeroArray(color);\n\t}\n\n\t// Perform limitations (clamping, etc.)\n\tif (limiters[this.model]) {\n\t\tchannels = convert[this.model].channels;\n\t\tfor (i = 0; i < channels; i++) {\n\t\t\tconst limit = limiters[this.model][i];\n\t\t\tif (limit) {\n\t\t\t\tthis.color[i] = limit(this.color[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.valpha = Math.max(0, Math.min(1, this.valpha));\n\n\tif (Object.freeze) {\n\t\tObject.freeze(this);\n\t}\n}\n\nColor.prototype = {\n\ttoString() {\n\t\treturn this.string();\n\t},\n\n\ttoJSON() {\n\t\treturn this[this.model]();\n\t},\n\n\tstring(places) {\n\t\tlet self = this.model in colorString.to ? this : this.rgb();\n\t\tself = self.round(typeof places === 'number' ? places : 1);\n\t\tconst arguments_ = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to[self.model](...arguments_);\n\t},\n\n\tpercentString(places) {\n\t\tconst self = this.rgb().round(typeof places === 'number' ? places : 1);\n\t\tconst arguments_ = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to.rgb.percent(...arguments_);\n\t},\n\n\tarray() {\n\t\treturn this.valpha === 1 ? [...this.color] : [...this.color, this.valpha];\n\t},\n\n\tobject() {\n\t\tconst result = {};\n\t\tconst {channels} = convert[this.model];\n\t\tconst {labels} = convert[this.model];\n\n\t\tfor (let i = 0; i < channels; i++) {\n\t\t\tresult[labels[i]] = this.color[i];\n\t\t}\n\n\t\tif (this.valpha !== 1) {\n\t\t\tresult.alpha = this.valpha;\n\t\t}\n\n\t\treturn result;\n\t},\n\n\tunitArray() {\n\t\tconst rgb = this.rgb().color;\n\t\trgb[0] /= 255;\n\t\trgb[1] /= 255;\n\t\trgb[2] /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.push(this.valpha);\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tunitObject() {\n\t\tconst rgb = this.rgb().object();\n\t\trgb.r /= 255;\n\t\trgb.g /= 255;\n\t\trgb.b /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.alpha = this.valpha;\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tround(places) {\n\t\tplaces = Math.max(places || 0, 0);\n\t\treturn new Color([...this.color.map(roundToPlace(places)), this.valpha], this.model);\n\t},\n\n\talpha(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color([...this.color, Math.max(0, Math.min(1, value))], this.model);\n\t\t}\n\n\t\treturn this.valpha;\n\t},\n\n\t// Rgb\n\tred: getset('rgb', 0, maxfn(255)),\n\tgreen: getset('rgb', 1, maxfn(255)),\n\tblue: getset('rgb', 2, maxfn(255)),\n\n\thue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, value => ((value % 360) + 360) % 360),\n\n\tsaturationl: getset('hsl', 1, maxfn(100)),\n\tlightness: getset('hsl', 2, maxfn(100)),\n\n\tsaturationv: getset('hsv', 1, maxfn(100)),\n\tvalue: getset('hsv', 2, maxfn(100)),\n\n\tchroma: getset('hcg', 1, maxfn(100)),\n\tgray: getset('hcg', 2, maxfn(100)),\n\n\twhite: getset('hwb', 1, maxfn(100)),\n\twblack: getset('hwb', 2, maxfn(100)),\n\n\tcyan: getset('cmyk', 0, maxfn(100)),\n\tmagenta: getset('cmyk', 1, maxfn(100)),\n\tyellow: getset('cmyk', 2, maxfn(100)),\n\tblack: getset('cmyk', 3, maxfn(100)),\n\n\tx: getset('xyz', 0, maxfn(95.047)),\n\ty: getset('xyz', 1, maxfn(100)),\n\tz: getset('xyz', 2, maxfn(108.833)),\n\n\tl: getset('lab', 0, maxfn(100)),\n\ta: getset('lab', 1),\n\tb: getset('lab', 2),\n\n\tkeyword(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn convert[this.model].keyword(this.color);\n\t},\n\n\thex(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn colorString.to.hex(...this.rgb().round().color);\n\t},\n\n\thexa(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\tconst rgbArray = this.rgb().round().color;\n\n\t\tlet alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase();\n\t\tif (alphaHex.length === 1) {\n\t\t\talphaHex = '0' + alphaHex;\n\t\t}\n\n\t\treturn colorString.to.hex(...rgbArray) + alphaHex;\n\t},\n\n\trgbNumber() {\n\t\tconst rgb = this.rgb().color;\n\t\treturn ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);\n\t},\n\n\tluminosity() {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tconst rgb = this.rgb().color;\n\n\t\tconst lum = [];\n\t\tfor (const [i, element] of rgb.entries()) {\n\t\t\tconst chan = element / 255;\n\t\t\tlum[i] = (chan <= 0.04045) ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4;\n\t\t}\n\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast(color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tconst lum1 = this.luminosity();\n\t\tconst lum2 = color2.luminosity();\n\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel(color2) {\n\t\t// https://www.w3.org/TR/WCAG/#contrast-enhanced\n\t\tconst contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tisDark() {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tconst rgb = this.rgb().color;\n\t\tconst yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 10000;\n\t\treturn yiq < 128;\n\t},\n\n\tisLight() {\n\t\treturn !this.isDark();\n\t},\n\n\tnegate() {\n\t\tconst rgb = this.rgb();\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\trgb.color[i] = 255 - rgb.color[i];\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tlighten(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] += hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdarken(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] -= hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tsaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] += hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdesaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] -= hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\twhiten(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[1] += hwb.color[1] * ratio;\n\t\treturn hwb;\n\t},\n\n\tblacken(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[2] += hwb.color[2] * ratio;\n\t\treturn hwb;\n\t},\n\n\tgrayscale() {\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_colour_to_grayscale\n\t\tconst rgb = this.rgb().color;\n\t\tconst value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\treturn Color.rgb(value, value, value);\n\t},\n\n\tfade(ratio) {\n\t\treturn this.alpha(this.valpha - (this.valpha * ratio));\n\t},\n\n\topaquer(ratio) {\n\t\treturn this.alpha(this.valpha + (this.valpha * ratio));\n\t},\n\n\trotate(degrees) {\n\t\tconst hsl = this.hsl();\n\t\tlet hue = hsl.color[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\thsl.color[0] = hue;\n\t\treturn hsl;\n\t},\n\n\tmix(mixinColor, weight) {\n\t\t// Ported from sass implementation in C\n\t\t// https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t\tif (!mixinColor || !mixinColor.rgb) {\n\t\t\tthrow new Error('Argument to \"mix\" was not a Color instance, but rather an instance of ' + typeof mixinColor);\n\t\t}\n\n\t\tconst color1 = mixinColor.rgb();\n\t\tconst color2 = this.rgb();\n\t\tconst p = weight === undefined ? 0.5 : weight;\n\n\t\tconst w = 2 * p - 1;\n\t\tconst a = color1.alpha() - color2.alpha();\n\n\t\tconst w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2;\n\t\tconst w2 = 1 - w1;\n\n\t\treturn Color.rgb(\n\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\tw1 * color1.blue() + w2 * color2.blue(),\n\t\t\tcolor1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n};\n\n// Model conversion methods and static constructors\nfor (const model of Object.keys(convert)) {\n\tif (skippedModels.includes(model)) {\n\t\tcontinue;\n\t}\n\n\tconst {channels} = convert[model];\n\n\t// Conversion methods\n\tColor.prototype[model] = function (...arguments_) {\n\t\tif (this.model === model) {\n\t\t\treturn new Color(this);\n\t\t}\n\n\t\tif (arguments_.length > 0) {\n\t\t\treturn new Color(arguments_, model);\n\t\t}\n\n\t\treturn new Color([...assertArray(convert[this.model][model].raw(this.color)), this.valpha], model);\n\t};\n\n\t// 'static' construction methods\n\tColor[model] = function (...arguments_) {\n\t\tlet color = arguments_[0];\n\t\tif (typeof color === 'number') {\n\t\t\tcolor = zeroArray(arguments_, channels);\n\t\t}\n\n\t\treturn new Color(color, model);\n\t};\n}\n\nfunction roundTo(number, places) {\n\treturn Number(number.toFixed(places));\n}\n\nfunction roundToPlace(places) {\n\treturn function (number) {\n\t\treturn roundTo(number, places);\n\t};\n}\n\nfunction getset(model, channel, modifier) {\n\tmodel = Array.isArray(model) ? model : [model];\n\n\tfor (const m of model) {\n\t\t(limiters[m] ||= [])[channel] = modifier;\n\t}\n\n\tmodel = model[0];\n\n\treturn function (value) {\n\t\tlet result;\n\n\t\tif (value !== undefined) {\n\t\t\tif (modifier) {\n\t\t\t\tvalue = modifier(value);\n\t\t\t}\n\n\t\t\tresult = this[model]();\n\t\t\tresult.color[channel] = value;\n\t\t\treturn result;\n\t\t}\n\n\t\tresult = this[model]().color[channel];\n\t\tif (modifier) {\n\t\t\tresult = modifier(result);\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\nfunction maxfn(max) {\n\treturn function (v) {\n\t\treturn Math.max(0, Math.min(max, v));\n\t};\n}\n\nfunction assertArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\n\nfunction zeroArray(array, length) {\n\tfor (let i = 0; i < length; i++) {\n\t\tif (typeof array[i] !== 'number') {\n\t\t\tarray[i] = 0;\n\t\t}\n\t}\n\n\treturn array;\n}\n\nexport default Color;\n","export type RGBArray = [number, number, number];\n\nfunction isColorDescription(elem: unknown): boolean {\n if (\n typeof elem === \"string\" &&\n (elem.startsWith(\"#\") ||\n elem.startsWith(\"rgb(\") ||\n elem.startsWith(\"rgba(\") ||\n elem.startsWith(\"hsl(\") ||\n elem.startsWith(\"hwb(\"))\n ) {\n return true;\n }\n\n return false;\n}\n\nexport function findColor(data: unknown, modifier: (color: string) => string) {\n // We deal with strings but only from their parent perspective\n // so that we can change the value from the ref\n if (\n typeof data === \"string\" ||\n typeof data === \"number\" ||\n typeof data === \"boolean\" ||\n data === null ||\n data === undefined\n ) {\n return;\n }\n\n if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i += 1) {\n const elem = data[i];\n\n if (isColorDescription(elem)) {\n data[i] = modifier(elem);\n continue;\n }\n findColor(elem, modifier);\n }\n } else if (typeof data === \"object\") {\n const dataAsRecord = data as Record<string, unknown>;\n const keys = Object.keys(data);\n\n for (const k of keys) {\n const elem = dataAsRecord[k];\n\n if (isColorDescription(elem)) {\n dataAsRecord[k] = modifier(elem as string);\n continue;\n }\n\n findColor(elem, modifier);\n }\n }\n}\n\nexport function applyBrightnessSingle(input: number, brightness: number): number {\n const normalized = input / 255;\n const adjusted = normalized + (1 - normalized) * normalized * brightness;\n return Math.max(0, Math.min(255, adjusted * 255));\n}\n\nexport function applyBrightnessRGB(input: RGBArray, brightness: number): RGBArray {\n return input.map((chan) => applyBrightnessSingle(chan, brightness)) as RGBArray;\n}\n\nexport function applyContrastSingle(input: number, contrast: number, midpoint = 127): number {\n const boundedContrast = Math.max(-0.99, Math.min(0.99, contrast));\n const steepness = boundedContrast < 0 ? boundedContrast + 1 : 1 / (1 - boundedContrast);\n const adjusted = midpoint + steepness * (input - midpoint);\n\n // Clamp to valid range\n return Math.round(Math.max(0, Math.min(255, adjusted)));\n}\n\nexport function applyContrastRGB(input: RGBArray, contrast: number, midpoint = 127): RGBArray {\n return input.map((chan) => applyContrastSingle(chan, contrast, midpoint)) as RGBArray;\n}\n\nexport function applyMultiplicationSingle(input1: number, input2: number, ratio = 1): number {\n return 255 * (input1 / 255) * (input2 / 255) * ratio + (input1 / 255) * (1 - ratio) * 255;\n}\n\nexport function applyMultiplicationRGB(input1: RGBArray, input2: RGBArray, ratio = 1): RGBArray {\n return input1.map((_chan, i) => applyMultiplicationSingle(input1[i], input2[i], ratio)) as RGBArray;\n}\n","export default \"[\\n {\\n \\\"id\\\": \\\"background\\\",\\n \\\"type\\\": \\\"background\\\",\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"background-color\\\": \\\"#cccccc\\\"}\\n },\\n {\\n \\\"id\\\": \\\"earth\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"earth\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"$type\\\", \\\"Polygon\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#fcf5e3\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landcover\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landcover\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\n \\\"in\\\",\\n \\\"kind\\\",\\n \\\"grassland\\\",\\n \\\"barren\\\",\\n \\\"urban_area\\\",\\n \\\"farmland\\\",\\n \\\"glacier\\\",\\n \\\"scrub\\\"\\n ]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"fill-color\\\": [\\n \\\"match\\\",\\n [\\\"get\\\", \\\"kind\\\"],\\n \\\"grassland\\\",\\n \\\"#cee6b5\\\",\\n \\\"barren\\\",\\n \\\"#fff0d4\\\",\\n \\\"urban_area\\\",\\n \\\"rgba(230, 230, 230, 1)\\\",\\n \\\"farmland\\\",\\n \\\"rgba(192, 222, 160, 0.3)\\\",\\n \\\"glacier\\\",\\n \\\"#e6ffff\\\",\\n \\\"scrub\\\",\\n \\\"#cee6b5\\\",\\n \\\"#ff0000\\\"\\n ],\\n \\\"fill-opacity\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 0,\\n 1,\\n 7,\\n 0.8,\\n 8,\\n 0\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_residential\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"==\\\", \\\"kind\\\", \\\"residential\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"fill-opacity\\\": [\\\"interpolate\\\", [\\\"linear\\\"], [\\\"zoom\\\"], 8, 0, 12, 1],\\n \\\"fill-color\\\": \\\"#f7f3e9\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_urban_green\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"allotments\\\", \\\"village_green\\\", \\\"playground\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#9cd3b4\\\", \\\"fill-opacity\\\": 0.7}\\n },\\n {\\n \\\"id\\\": \\\"landuse-sand\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"==\\\", \\\"kind\\\", \\\"sand\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"fill-opacity\\\": [\\\"interpolate\\\", [\\\"linear\\\"], [\\\"zoom\\\"], 0, 1, 20, 0],\\n \\\"fill-color\\\": \\\"rgba(240, 226, 199, 1)\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_bare_rock\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"in\\\", \\\"kind\\\", \\\"bare_rock\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"rgb(221, 226, 226)\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landuse_park\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\n \\\"in\\\",\\n \\\"kind\\\",\\n \\\"meadow\\\",\\n \\\"park\\\",\\n \\\"glacier\\\",\\n \\\"cemetery\\\",\\n \\\"golf_course\\\",\\n \\\"scrub\\\",\\n \\\"grassland\\\",\\n \\\"grass\\\",\\n \\\"naval_base\\\",\\n \\\"airfield\\\"\\n ]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"fill-opacity\\\": 1,\\n \\\"fill-color\\\": [\\n \\\"case\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"grass\\\"]]],\\n \\\"#a5e87d\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"park\\\", \\\"golf_course\\\"]]],\\n \\\"#b6e996\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"park\\\", \\\"meadow\\\"]]],\\n \\\"#a6e085\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"scrub\\\", \\\"grassland\\\"]]],\\n \\\"#cee6b5\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"glacier\\\"]]],\\n \\\"#e6ffff\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"cemetery\\\"]]],\\n \\\"#ccdbc5\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"sand\\\"]]],\\n \\\"#fff3d5\\\",\\n [\\n \\\"in\\\",\\n [\\\"get\\\", \\\"kind\\\"],\\n [\\\"literal\\\", [\\\"military\\\", \\\"naval_base\\\", \\\"airfield\\\"]]\\n ],\\n \\\"#d1dede\\\",\\n \\\"#e2dfda\\\"\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_farmland\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"==\\\", \\\"kind\\\", \\\"farmland\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"rgba(185, 255, 152, 1)\\\", \\\"fill-opacity\\\": 0.2}\\n },\\n {\\n \\\"id\\\": \\\"landuse_pitch\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"==\\\", \\\"kind\\\", \\\"pitch\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"rgba(81, 201, 70, 1)\\\", \\\"fill-opacity\\\": 0.2}\\n },\\n {\\n \\\"id\\\": \\\"landuse_military\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"==\\\", \\\"kind\\\", \\\"military\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"rgba(145, 145, 145, 1)\\\", \\\"fill-opacity\\\": 0.2}\\n },\\n {\\n \\\"id\\\": \\\"landuse_wood-forest\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"in\\\", \\\"kind\\\", \\\"forest\\\", \\\"wood\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"fill-opacity\\\": [\\\"interpolate\\\", [\\\"linear\\\"], [\\\"zoom\\\"], 0, 1, 7, 1],\\n \\\"fill-color\\\": \\\"rgb(184, 224, 173)\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_hospital\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"hospital\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#e4dad9\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landuse_industrial\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"industrial\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#d1dde1\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landuse_school\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"school\\\", \\\"university\\\", \\\"college\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#e4ded7\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landuse_zoo\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"zoo\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#c6dcdc\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landuse_aerodrome\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"aerodrome\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#dadbdf\\\"}\\n },\\n {\\n \\\"id\\\": \\\"roads_runway\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind_detail\\\", \\\"runway\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e9e9ed\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 10,\\n 0,\\n 12,\\n 4,\\n 18,\\n 30\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_taxiway\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 13,\\n \\\"filter\\\": [\\\"==\\\", \\\"kind_detail\\\", \\\"taxiway\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e9e9ed\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1,\\n 15,\\n 6\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_runway\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"any\\\", [\\\"in\\\", \\\"kind\\\", \\\"runway\\\", \\\"taxiway\\\"]],\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#e9e9ed\\\"}\\n },\\n {\\n \\\"id\\\": \\\"water\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"water\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"$type\\\", \\\"Polygon\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"rgb(135, 199, 236)\\\"}\\n },\\n {\\n \\\"id\\\": \\\"water_stream\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"water\\\",\\n \\\"minzoom\\\": 14,\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"stream\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"line-width\\\": 0.5, \\\"line-color\\\": \\\"rgba(18, 157, 222, 1)\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landuse_beach\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"beach\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#fff0d4\\\"}\\n },\\n {\\n \\\"id\\\": \\\"water_river\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"water\\\",\\n \\\"minzoom\\\": 9,\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"river\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 9,\\n 0,\\n 9.5,\\n 1,\\n 18,\\n 12\\n ],\\n \\\"line-color\\\": \\\"#C4EAFF\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_wetland\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"==\\\", \\\"kind\\\", \\\"wetland\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"rgba(43, 63, 131, 0.07)\\\"}\\n },\\n {\\n \\\"id\\\": \\\"ferry\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"==\\\", \\\"kind\\\", \\\"ferry\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-dasharray\\\": [1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3],\\n \\\"line-opacity\\\": 0.5,\\n \\\"line-color\\\": \\\"rgba(76, 154, 205, 1)\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 6,\\n 1,\\n 18,\\n 3\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"landuse_pedestrian\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"pedestrian\\\", \\\"dam\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#e3e0d4\\\"}\\n },\\n {\\n \\\"id\\\": \\\"landuse_pier\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"landuse\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"pier\\\"],\\n \\\"paint\\\": {\\\"fill-color\\\": \\\"#e0e0e0\\\"}\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_other_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_tunnel\\\"], [\\\"in\\\", \\\"kind\\\", \\\"other\\\", \\\"path\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 14,\\n 0,\\n 20,\\n 7\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_minor_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_tunnel\\\"], [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-dasharray\\\": [3, 2],\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 11,\\n 0,\\n 12.5,\\n 0.5,\\n 15,\\n 2,\\n 18,\\n 11\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 12,\\n 0,\\n 12.5,\\n 1\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_link_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_tunnel\\\"], [\\\"has\\\", \\\"is_link\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-dasharray\\\": [3, 2],\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1,\\n 18,\\n 11\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 12,\\n 0,\\n 12.5,\\n 1\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_major_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"major_road\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-dasharray\\\": [3, 2],\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 7,\\n 0,\\n 7.5,\\n 0.5,\\n 18,\\n 13\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 9,\\n 0,\\n 9.5,\\n 1\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_highway_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"highway\\\"],\\n [\\\"!has\\\", \\\"is_link\\\"]\\n ],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-dasharray\\\": [6, 0.5],\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 3.5,\\n 0.5,\\n 18,\\n 15\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 7,\\n 0,\\n 7.5,\\n 1,\\n 20,\\n 15\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_other\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_tunnel\\\"], [\\\"in\\\", \\\"kind\\\", \\\"other\\\", \\\"path\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#d5d5d5\\\",\\n \\\"line-dasharray\\\": [4.5, 0.5],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 14,\\n 0,\\n 20,\\n 7\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_minor\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_tunnel\\\"], [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#d5d5d5\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 11,\\n 0,\\n 12.5,\\n 0.5,\\n 15,\\n 2,\\n 18,\\n 11\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_link\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_tunnel\\\"], [\\\"has\\\", \\\"is_link\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#d5d5d5\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1,\\n 18,\\n 11\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_major\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_tunnel\\\"], [\\\"==\\\", \\\"kind\\\", \\\"major_road\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#d5d5d5\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 6,\\n 0,\\n 12,\\n 1.6,\\n 15,\\n 3,\\n 18,\\n 13\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_tunnels_highway\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"has\\\", \\\"is_tunnel\\\"],\\n [\\\"==\\\", [\\\"get\\\", \\\"kind\\\"], \\\"highway\\\"],\\n [\\\"!\\\", [\\\"has\\\", \\\"is_link\\\"]]\\n ],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#d5d5d5\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 6,\\n 1.1,\\n 12,\\n 1.6,\\n 15,\\n 5,\\n 18,\\n 15\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"buildings\\\",\\n \\\"type\\\": \\\"fill\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"buildings\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"building\\\", \\\"building_part\\\"],\\n \\\"paint\\\": {\\\"fill-opacity\\\": 0.3, \\\"fill-color\\\": \\\"#c2beba\\\"}\\n },\\n {\\n \\\"id\\\": \\\"roads_pier\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind_detail\\\", \\\"pier\\\"],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 12,\\n 0,\\n 12.5,\\n 0.5,\\n 20,\\n 16\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_minor_service_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 13,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"],\\n [\\\"==\\\", \\\"kind_detail\\\", \\\"service\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 18,\\n 8\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 0.8\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_minor_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"],\\n [\\\"!=\\\", \\\"kind_detail\\\", \\\"service\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 11,\\n 0,\\n 12.5,\\n 0.5,\\n 15,\\n 2,\\n 18,\\n 11\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 12,\\n 0,\\n 12.5,\\n 1,\\n 17,\\n 1.25\\n ],\\n \\\"line-color\\\": \\\"#D1CFC7\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_link_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 13,\\n \\\"filter\\\": [\\\"has\\\", \\\"is_link\\\"],\\n \\\"paint\\\": {\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1,\\n 18,\\n 11\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1.5\\n ],\\n \\\"line-color\\\": \\\"#D1CFC7\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_major_casing_late\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"major_road\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 6,\\n 0,\\n 12,\\n 1.6,\\n 15,\\n 3,\\n 18,\\n 13\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 9,\\n 0,\\n 9.5,\\n 1,\\n 15,\\n 1.5\\n ],\\n \\\"line-color\\\": \\\"#D1CFC7\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_highway_casing_late\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"highway\\\"],\\n [\\\"!has\\\", \\\"is_link\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 3.5,\\n 0.5,\\n 18,\\n 15\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 7,\\n 0,\\n 7.5,\\n 1,\\n 20,\\n 15\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_other-bg\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 13,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"in\\\", \\\"kind\\\", \\\"other\\\", \\\"path\\\"],\\n [\\\"!=\\\", \\\"kind_detail\\\", \\\"pier\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 14,\\n 0.75,\\n 20,\\n 6\\n ],\\n \\\"line-color\\\": \\\"rgba(0, 0, 0, 0.15)\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_other\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 13,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"in\\\", \\\"kind\\\", \\\"other\\\", \\\"path\\\"],\\n [\\\"!=\\\", \\\"kind_detail\\\", \\\"pier\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-dasharray\\\": [2, 2],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 14,\\n 1.5,\\n 20,\\n 9\\n ],\\n \\\"line-color\\\": \\\"rgba(249, 247, 241, 1)\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_link\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"has\\\", \\\"is_link\\\"],\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1,\\n 18,\\n 11\\n ],\\n \\\"line-color\\\": \\\"#E7E5DE\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_minor_service\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"],\\n [\\\"==\\\", \\\"kind_detail\\\", \\\"service\\\"]\\n ],\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 18,\\n 8\\n ],\\n \\\"line-color\\\": \\\"#E7E5DE\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_minor\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"],\\n [\\\"!=\\\", \\\"kind_detail\\\", \\\"service\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 11,\\n 0,\\n 12.5,\\n 0.5,\\n 15,\\n 2,\\n 18,\\n 11\\n ],\\n \\\"line-color\\\": \\\"#E7E5DE\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_major_casing_early\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"maxzoom\\\": 12,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"major_road\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"rgba(194, 194, 194, 1)\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 7,\\n 0,\\n 7.5,\\n 0.5,\\n 18,\\n 13\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 9,\\n 0,\\n 9.5,\\n 1\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_major\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"major_road\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 6,\\n 0,\\n 12,\\n 1.6,\\n 15,\\n 3,\\n 18,\\n 13\\n ],\\n \\\"line-color\\\": \\\"#E7E5DE\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_highway_casing_early\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"maxzoom\\\": 12,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"highway\\\"],\\n [\\\"!has\\\", \\\"is_link\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"rgba(214, 213, 213, 1)\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 3.5,\\n 0.5,\\n 18,\\n 15\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 6,\\n 1.8,\\n 12,\\n 2.2,\\n 15,\\n 5,\\n 18,\\n 15\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_highway\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"!has\\\", \\\"is_tunnel\\\"],\\n [\\\"!has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"highway\\\"],\\n [\\\"!has\\\", \\\"is_link\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 6,\\n 1.1,\\n 12,\\n 1.6,\\n 15,\\n 5,\\n 18,\\n 15\\n ],\\n \\\"line-color\\\": \\\"#E7E5DE\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_rail\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"rail\\\"],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-dasharray\\\": [0.3, 0.75],\\n \\\"line-opacity\\\": 0.5,\\n \\\"line-color\\\": \\\"rgba(97, 116, 129, 1)\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 6,\\n 0.15,\\n 18,\\n 6\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"boundaries_country_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"boundaries\\\",\\n \\\"minzoom\\\": 3,\\n \\\"filter\\\": [\\\"<=\\\", \\\"kind_detail\\\", 2],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"rgba(0, 0, 0, 1)\\\",\\n \\\"line-opacity\\\": 0.1,\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 0,\\n 2,\\n 8,\\n 7,\\n 15,\\n 20\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"boundaries_country\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"boundaries\\\",\\n \\\"filter\\\": [\\\"<=\\\", \\\"kind_detail\\\", 2],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"rgba(0, 0, 0, 1)\\\",\\n \\\"line-dasharray\\\": [\\n \\\"step\\\",\\n [\\\"zoom\\\"],\\n [\\\"literal\\\", [2]],\\n 4,\\n [\\\"literal\\\", [2, 1]]\\n ],\\n \\\"line-opacity\\\": 0.3,\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 0,\\n 1,\\n 8,\\n 1.5,\\n 15,\\n 3\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"boundaries\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"boundaries\\\",\\n \\\"filter\\\": [\\\">\\\", \\\"kind_detail\\\", 2],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#adadad\\\",\\n \\\"line-width\\\": 0.4,\\n \\\"line-dasharray\\\": [\\n \\\"step\\\",\\n [\\\"zoom\\\"],\\n [\\\"literal\\\", [2]],\\n 4,\\n [\\\"literal\\\", [2, 1]]\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_other_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"in\\\", \\\"kind\\\", \\\"other\\\", \\\"path\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 14,\\n 0,\\n 20,\\n 7\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_link_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"has\\\", \\\"is_link\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1,\\n 18,\\n 11\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 12,\\n 0,\\n 12.5,\\n 1.5\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_minor_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 11,\\n 0,\\n 12.5,\\n 0.5,\\n 15,\\n 2,\\n 18,\\n 11\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 0.8\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_major_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"==\\\", \\\"kind\\\", \\\"major_road\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 7,\\n 0,\\n 7.5,\\n 0.5,\\n 18,\\n 10\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 9,\\n 0,\\n 9.5,\\n 1.5\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_other\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"in\\\", \\\"kind\\\", \\\"other\\\", \\\"path\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#ebebeb\\\",\\n \\\"line-dasharray\\\": [2, 1],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 14,\\n 0,\\n 20,\\n 7\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_minor\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"==\\\", \\\"kind\\\", \\\"minor_road\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#ffffff\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 11,\\n 0,\\n 12.5,\\n 0.5,\\n 15,\\n 2,\\n 18,\\n 11\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_link\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"has\\\", \\\"is_link\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#ffffff\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 13,\\n 0,\\n 13.5,\\n 1,\\n 18,\\n 11\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_major\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\\"all\\\", [\\\"has\\\", \\\"is_bridge\\\"], [\\\"==\\\", \\\"kind\\\", \\\"major_road\\\"]],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#f5f5f5\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 6,\\n 0,\\n 12,\\n 1.6,\\n 15,\\n 3,\\n 18,\\n 13\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"cycleway_bg\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"any\\\", [\\\"==\\\", \\\"kind_detail\\\", \\\"cycleway\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 12.5,\\n 0.9,\\n 15,\\n 1.9,\\n 18,\\n 3.9\\n ],\\n \\\"line-dasharray\\\": [2],\\n \\\"line-color\\\": \\\"#ffffff\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"cycleway\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\\"any\\\", [\\\"==\\\", \\\"kind_detail\\\", \\\"cycleway\\\"]],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"visible\\\"},\\n \\\"paint\\\": {\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 12.5,\\n 1,\\n 15,\\n 2,\\n 18,\\n 4\\n ],\\n \\\"line-color\\\": \\\"rgba(20, 116, 0, 1)\\\",\\n \\\"line-dasharray\\\": [2, 1.5]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_highway_casing\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 12,\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"highway\\\"],\\n [\\\"!has\\\", \\\"is_link\\\"]\\n ],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#e0e0e0\\\",\\n \\\"line-gap-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 3.5,\\n 0.5,\\n 18,\\n 15\\n ],\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 7,\\n 0,\\n 7.5,\\n 1,\\n 20,\\n 15\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"roads_bridges_highway\\\",\\n \\\"type\\\": \\\"line\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\\"has\\\", \\\"is_bridge\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"highway\\\"],\\n [\\\"!has\\\", \\\"is_link\\\"]\\n ],\\n \\\"paint\\\": {\\n \\\"line-color\\\": \\\"#ffffff\\\",\\n \\\"line-width\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.6],\\n [\\\"zoom\\\"],\\n 3,\\n 0,\\n 6,\\n 1.1,\\n 12,\\n 1.6,\\n 15,\\n 5,\\n 18,\\n 15\\n ]\\n }\\n },\\n {\\n \\\"id\\\": \\\"address_label\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"buildings\\\",\\n \\\"minzoom\\\": 18,\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"address\\\"],\\n \\\"layout\\\": {\\n \\\"symbol-placement\\\": \\\"point\\\",\\n \\\"text-font\\\": [\\\"Noto Sans Italic\\\"],\\n \\\"text-field\\\": [\\\"get\\\", \\\"addr_housenumber\\\"],\\n \\\"text-size\\\": 12\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"#91888b\\\",\\n \\\"text-halo-color\\\": \\\"#ffffff\\\",\\n \\\"text-halo-width\\\": 1\\n }\\n },\\n {\\n \\\"id\\\": \\\"water_waterway_label\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"water\\\",\\n \\\"minzoom\\\": 13,\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"river\\\", \\\"stream\\\"],\\n \\\"layout\\\": {\\n \\\"symbol-placement\\\": \\\"line\\\",\\n \\\"text-font\\\": [\\\"Noto Sans Italic\\\"],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-size\\\": 12,\\n \\\"text-letter-spacing\\\": 0.2\\n },\\n \\\"paint\\\": {\\\"text-color\\\": \\\"rgba(13, 117, 143, 0.64)\\\", \\\"text-halo-width\\\": 1}\\n },\\n {\\n \\\"id\\\": \\\"roads_labels_minor\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 15,\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"minor_road\\\", \\\"other\\\", \\\"path\\\"],\\n \\\"layout\\\": {\\n \\\"symbol-sort-key\\\": [\\\"get\\\", \\\"min_zoom\\\"],\\n \\\"symbol-placement\\\": \\\"line\\\",\\n \\\"text-font\\\": [\\\"Noto Sans Regular\\\"],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-size\\\": 12,\\n \\\"visibility\\\": \\\"visible\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"rgba(94, 88, 90, 1)\\\",\\n \\\"text-halo-color\\\": \\\"#ffffff\\\",\\n \\\"text-halo-width\\\": 1\\n }\\n },\\n {\\n \\\"id\\\": \\\"water_label_ocean\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"water\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"sea\\\", \\\"ocean\\\", \\\"bay\\\", \\\"strait\\\", \\\"fjord\\\"],\\n \\\"layout\\\": {\\n \\\"text-font\\\": [\\\"Noto Sans Italic\\\"],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-size\\\": [\\\"interpolate\\\", [\\\"linear\\\"], [\\\"zoom\\\"], 1, 12, 10, 12],\\n \\\"text-letter-spacing\\\": 0.1,\\n \\\"text-max-width\\\": 9,\\n \\\"text-transform\\\": \\\"uppercase\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"rgba(4, 69, 98, 0.64)\\\",\\n \\\"text-halo-width\\\": 1,\\n \\\"text-halo-color\\\": \\\"rgba(0, 0, 0, 0)\\\"\\n }\\n },\\n {\\n \\\"id\\\": \\\"earth_label_islands\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"earth\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"island\\\"],\\n \\\"layout\\\": {\\n \\\"text-font\\\": [\\\"Noto Sans Italic\\\"],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-size\\\": 10,\\n \\\"text-letter-spacing\\\": 0.1,\\n \\\"text-max-width\\\": 8\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"#8f8f8f\\\",\\n \\\"text-halo-color\\\": \\\"#e0e0e0\\\",\\n \\\"text-halo-width\\\": 1\\n }\\n },\\n {\\n \\\"id\\\": \\\"water_label_lakes\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"water\\\",\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"lake\\\", \\\"water\\\"],\\n \\\"layout\\\": {\\n \\\"text-font\\\": [\\\"Noto Sans Italic\\\"],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-size\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 3,\\n 10,\\n 6,\\n 12,\\n 10,\\n 12\\n ],\\n \\\"text-letter-spacing\\\": 0.1,\\n \\\"text-max-width\\\": 9\\n },\\n \\\"paint\\\": {\\\"text-color\\\": \\\"rgba(13, 117, 143, 0.64)\\\", \\\"text-halo-width\\\": 1}\\n },\\n {\\n \\\"id\\\": \\\"roads_labels_major\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"roads\\\",\\n \\\"minzoom\\\": 11,\\n \\\"filter\\\": [\\\"in\\\", \\\"kind\\\", \\\"highway\\\", \\\"major_road\\\"],\\n \\\"layout\\\": {\\n \\\"symbol-sort-key\\\": [\\\"get\\\", \\\"min_zoom\\\"],\\n \\\"symbol-placement\\\": \\\"line\\\",\\n \\\"text-font\\\": [\\\"Noto Sans Regular\\\"],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-size\\\": 12,\\n \\\"visibility\\\": \\\"visible\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"rgba(110, 104, 106, 1)\\\",\\n \\\"text-halo-color\\\": \\\"#ffffff\\\",\\n \\\"text-halo-width\\\": 1\\n }\\n },\\n {\\n \\\"id\\\": \\\"pois\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"pois\\\",\\n \\\"filter\\\": [\\n \\\"all\\\",\\n [\\n \\\"in\\\",\\n [\\\"get\\\", \\\"kind\\\"],\\n [\\n \\\"literal\\\",\\n [\\n \\\"beach\\\",\\n \\\"forest\\\",\\n \\\"marina\\\",\\n \\\"park\\\",\\n \\\"peak\\\",\\n \\\"zoo\\\",\\n \\\"garden\\\",\\n \\\"aerodrome\\\",\\n \\\"station\\\",\\n \\\"ferry_terminal\\\",\\n \\\"stadium\\\",\\n \\\"university\\\",\\n \\\"library\\\",\\n \\\"school\\\",\\n \\\"animal\\\",\\n \\\"toilet\\\",\\n \\\"drinking_water\\\",\\n \\\"viewpoint\\\",\\n \\\"attraction\\\",\\n \\\"camp_site\\\",\\n \\\"college\\\",\\n \\\"fishing\\\",\\n \\\"golf_course\\\",\\n \\\"hospital\\\",\\n \\\"information\\\",\\n \\\"landmark\\\",\\n \\\"military\\\",\\n \\\"national_park\\\",\\n \\\"nature_reserve\\\",\\n \\\"picnic_site\\\",\\n \\\"picnic_table\\\",\\n \\\"playground\\\",\\n \\\"railway\\\",\\n \\\"townhall\\\",\\n \\\"zoo\\\"\\n ]\\n ]\\n ],\\n [\\\">=\\\", [\\\"zoom\\\"], [\\\"+\\\", [\\\"get\\\", \\\"min_zoom\\\"], -2]]\\n ],\\n \\\"layout\\\": {\\n \\\"icon-image\\\": [\\n \\\"match\\\",\\n [\\\"get\\\", \\\"kind\\\"],\\n \\\"park\\\",\\n \\\"garden\\\",\\n [\\\"get\\\", \\\"kind\\\"]\\n ],\\n \\\"text-font\\\": [\\\"Noto Sans Regular\\\"],\\n \\\"text-justify\\\": \\\"auto\\\",\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-size\\\": [\\\"interpolate\\\", [\\\"linear\\\"], [\\\"zoom\\\"], 17, 11, 19, 14],\\n \\\"text-max-width\\\": 8,\\n \\\"text-offset\\\": [1.5, 0],\\n \\\"text-variable-anchor\\\": [\\\"left\\\", \\\"right\\\"],\\n \\\"visibility\\\": \\\"visible\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": [\\n \\\"case\\\",\\n [\\n \\\"in\\\",\\n [\\\"get\\\", \\\"kind\\\"],\\n [\\n \\\"literal\\\",\\n [\\n \\\"forest\\\",\\n \\\"park\\\",\\n \\\"peak\\\",\\n \\\"zoo\\\",\\n \\\"garden\\\",\\n \\\"bench\\\",\\n \\\"golf_course\\\",\\n \\\"national_park\\\",\\n \\\"nature_reserve\\\",\\n \\\"picnic_site\\\",\\n \\\"picnic_table\\\",\\n \\\"camp_site\\\"\\n ]\\n ]\\n ],\\n \\\"#076331\\\",\\n [\\n \\\"in\\\",\\n [\\\"get\\\", \\\"kind\\\"],\\n [\\\"literal\\\", [\\\"beach\\\", \\\"marina\\\", \\\"ferry_terminal\\\", \\\"fishing\\\"]]\\n ],\\n \\\"#634c00\\\",\\n [\\\"in\\\", [\\\"get\\\", \\\"kind\\\"], [\\\"literal\\\", [\\\"hospital\\\"]]],\\n \\\"#730303\\\",\\n \\\"#1f5fa3\\\"\\n ],\\n \\\"text-halo-color\\\": \\\"rgba(253, 252, 252, 1)\\\",\\n \\\"text-halo-width\\\": 1.5\\n }\\n },\\n {\\n \\\"id\\\": \\\"places_subplace\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"places\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"neighbourhood\\\"],\\n \\\"layout\\\": {\\n \\\"symbol-sort-key\\\": [\\n \\\"case\\\",\\n [\\\"has\\\", \\\"sort_key\\\"],\\n [\\\"get\\\", \\\"sort_key\\\"],\\n [\\\"get\\\", \\\"min_zoom\\\"]\\n ],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-font\\\": [\\\"Noto Sans Regular\\\"],\\n \\\"text-max-width\\\": 7,\\n \\\"text-letter-spacing\\\": 0.1,\\n \\\"text-padding\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 5,\\n 2,\\n 8,\\n 4,\\n 12,\\n 18,\\n 15,\\n 20\\n ],\\n \\\"text-size\\\": [\\n \\\"interpolate\\\",\\n [\\\"exponential\\\", 1.2],\\n [\\\"zoom\\\"],\\n 11,\\n 8,\\n 14,\\n 14,\\n 18,\\n 24\\n ],\\n \\\"text-transform\\\": \\\"uppercase\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"rgba(88, 72, 69, 1)\\\",\\n \\\"text-halo-color\\\": \\\"rgba(248, 241, 241, 1)\\\",\\n \\\"text-halo-width\\\": 1\\n }\\n },\\n {\\n \\\"id\\\": \\\"places_region\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"places\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"region\\\"],\\n \\\"layout\\\": {\\n \\\"symbol-sort-key\\\": [\\\"get\\\", \\\"sort_key\\\"],\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-font\\\": [\\\"Noto Sans Regular\\\"],\\n \\\"text-size\\\": [\\\"interpolate\\\", [\\\"linear\\\"], [\\\"zoom\\\"], 3, 11, 7, 16],\\n \\\"text-radial-offset\\\": 0.2,\\n \\\"text-anchor\\\": \\\"center\\\",\\n \\\"text-transform\\\": \\\"uppercase\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"rgba(127, 123, 120, 1)\\\",\\n \\\"text-halo-color\\\": \\\"rgba(246, 240, 240, 1)\\\",\\n \\\"text-halo-width\\\": 1\\n }\\n },\\n {\\n \\\"id\\\": \\\"places_locality\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"places\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"locality\\\"],\\n \\\"layout\\\": {\\n \\\"icon-image\\\": [\\\"step\\\", [\\\"zoom\\\"], \\\"townspot\\\", 8, \\\"\\\"],\\n \\\"icon-size\\\": 0.7,\\n \\\"text-field\\\": \\\"<LANG>\\\",\\n \\\"text-font\\\": [\\n \\\"case\\\",\\n [\\\"<=\\\", [\\\"get\\\", \\\"min_zoom\\\"], 5],\\n [\\\"literal\\\", [\\\"Noto Sans Medium\\\"]],\\n [\\\"literal\\\", [\\\"Noto Sans Regular\\\"]]\\n ],\\n \\\"symbol-sort-key\\\": [\\n \\\"case\\\",\\n [\\\"has\\\", \\\"sort_key\\\"],\\n [\\\"get\\\", \\\"sort_key\\\"],\\n [\\\"get\\\", \\\"min_zoom\\\"]\\n ],\\n \\\"text-padding\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 5,\\n 3,\\n 8,\\n 7,\\n 12,\\n 11\\n ],\\n \\\"text-size\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 2,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 13],\\n 8,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 13],\\n 13,\\n 0\\n ],\\n 4,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 13],\\n 12,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 13],\\n 17,\\n 0\\n ],\\n 6,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 12],\\n 13,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 12],\\n 18,\\n 0\\n ],\\n 8,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 11],\\n 11,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 11],\\n 18,\\n 0\\n ],\\n 10,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 9],\\n 12,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 9],\\n 20,\\n 0\\n ],\\n 15,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 8],\\n 12,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 8],\\n 22,\\n 0\\n ]\\n ],\\n \\\"icon-padding\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 0,\\n 0,\\n 8,\\n 6,\\n 10,\\n 8,\\n 12,\\n 6,\\n 22,\\n 2\\n ],\\n \\\"text-justify\\\": \\\"auto\\\",\\n \\\"text-variable-anchor\\\": [\\n \\\"step\\\",\\n [\\\"zoom\\\"],\\n [\\\"literal\\\", [\\\"bottom\\\", \\\"left\\\", \\\"right\\\", \\\"top\\\"]],\\n 8,\\n [\\\"literal\\\", [\\\"center\\\"]]\\n ],\\n \\\"text-radial-offset\\\": 0.3,\\n \\\"visibility\\\": \\\"visible\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"rgba(94, 68, 51, 1)\\\",\\n \\\"text-halo-color\\\": \\\"rgba(253, 250, 249, 1)\\\",\\n \\\"text-halo-width\\\": 1\\n }\\n },\\n {\\n \\\"id\\\": \\\"places_country\\\",\\n \\\"type\\\": \\\"symbol\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"places\\\",\\n \\\"filter\\\": [\\\"==\\\", \\\"kind\\\", \\\"country\\\"],\\n \\\"layout\\\": {\\n \\\"symbol-sort-key\\\": [\\n \\\"case\\\",\\n [\\\"has\\\", \\\"sort_key\\\"],\\n [\\\"get\\\", \\\"sort_key\\\"],\\n [\\\"get\\\", \\\"min_zoom\\\"]\\n ],\\n \\\"text-field\\\": \\\"<LANG_COUNTRY>\\\",\\n \\\"text-font\\\": [\\\"Noto Sans Medium\\\"],\\n \\\"text-size\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 2,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 10],\\n 12,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 10],\\n 15,\\n 0\\n ],\\n 6,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 9],\\n 11,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 8],\\n 18,\\n 0\\n ],\\n 8,\\n [\\n \\\"case\\\",\\n [\\\"<\\\", [\\\"get\\\", \\\"population_rank\\\"], 7],\\n 12,\\n [\\\">=\\\", [\\\"get\\\", \\\"population_rank\\\"], 7],\\n 20,\\n 0\\n ]\\n ],\\n \\\"icon-padding\\\": [\\n \\\"interpolate\\\",\\n [\\\"linear\\\"],\\n [\\\"zoom\\\"],\\n 0,\\n 2,\\n 14,\\n 2,\\n 16,\\n 20,\\n 17,\\n 2,\\n 22,\\n 2\\n ],\\n \\\"text-transform\\\": \\\"none\\\"\\n },\\n \\\"paint\\\": {\\n \\\"text-color\\\": \\\"rgba(84, 79, 73, 1)\\\",\\n \\\"text-halo-color\\\": \\\"rgba(255, 255, 255, 1)\\\",\\n \\\"text-halo-width\\\": 1.5\\n }\\n },\\n {\\n \\\"id\\\": \\\"building_extrusion\\\",\\n \\\"type\\\": \\\"fill-extrusion\\\",\\n \\\"source\\\": \\\"__protomaps_source\\\",\\n \\\"source-layer\\\": \\\"buildings\\\",\\n \\\"filter\\\": [\\n \\\"any\\\",\\n [\\\"==\\\", \\\"kind\\\", \\\"building_part\\\"],\\n [\\\"==\\\", \\\"kind\\\", \\\"building\\\"]\\n ],\\n \\\"layout\\\": {\\\"visibility\\\": \\\"none\\\"},\\n \\\"paint\\\": {\\n \\\"fill-extrusion-opacity\\\": 0.1,\\n \\\"fill-extrusion-height\\\": {\\\"type\\\": \\\"identity\\\", \\\"property\\\": \\\"height\\\"}\\n }\\n }\\n]\"","import { language_script_pairs } from \"@protomaps/basemaps\";\n\nexport function isLanguageSupported(lang: string, script: string | undefined): boolean {\n const candidates = language_script_pairs.filter((l) => l.lang === lang);\n\n if (candidates.length === 0) {\n throw new Error(\n `The language \"${lang}\". The languages available are: ${language_script_pairs.map((l) => l.lang).join(\", \")}.`,\n );\n }\n\n if (script) {\n const candidatesWithScript = candidates.filter((l) => l.script === script);\n\n if (candidatesWithScript.length) {\n return true;\n }\n\n throw new Error(\n `The script \"${script}\" for the language \"${lang}\" is unsupported. Script available for this language: ${candidates.map((l) => l.script).join(\", \")}.`,\n );\n }\n\n return true;\n}\n\nexport function getDefaultLanguage(): string {\n const systemLang = Intl.DateTimeFormat().resolvedOptions().locale.split(\"-\")[0];\n if (isLanguageSupported(systemLang, undefined)) {\n return systemLang;\n }\n return \"en\";\n}\n","import { get_country_name, get_multiline_name } from \"@protomaps/basemaps\";\nimport Color from \"color\";\nimport type { StyleSpecification, LayerSpecification, SymbolLayerSpecification } from \"maplibre-gl\";\nimport { applyBrightnessRGB, applyContrastRGB, applyMultiplicationRGB, findColor, type RGBArray } from \"./colorchange\";\nimport avenueLayersRaw from \"./assets/avenue-layers-raw.txt?raw\";\nimport { getDefaultLanguage, isLanguageSupported } from \"./language\";\n\nconst baseStyles = {\n avenue: avenueLayersRaw,\n} as const;\n\nconst stylePresets = {\n \"avenue-pop\": {\n baseStyle: \"avenue\",\n colorEdit: {\n negate: false,\n brightness: 0,\n brightnessShift: 0,\n exposure: 0,\n contrast: [0.4, 220],\n hueRotation: -8,\n saturation: -0.1,\n multiplyColor: [\"#ff0000\", 0],\n mixColor: [\"#ff0000\", 0.02],\n } as ColorEdit,\n },\n\n \"avenue-saturated\": {\n baseStyle: \"avenue\",\n colorEdit: {\n exposure: -1,\n saturation: 0.1,\n } as ColorEdit,\n },\n\n \"avenue-night\": {\n baseStyle: \"avenue\",\n colorEdit: {\n brightness: -0.3,\n saturation: -0.8,\n multiplyColor: [\"#171075\", 0.6],\n contrast: [0.8, 160],\n } as ColorEdit,\n },\n\n \"avenue-bright\": {\n baseStyle: \"avenue\",\n colorEdit: {\n exposure: 0.6,\n saturation: -0.25,\n hueRotation: 15,\n contrast: [0.4, 220],\n } as ColorEdit,\n },\n\n \"avenue-bnw\": {\n baseStyle: \"avenue\",\n colorEdit: {\n exposure: -1,\n saturation: -1,\n contrast: [0.6, 160],\n } as ColorEdit,\n },\n\n \"avenue-blueprint\": {\n baseStyle: \"avenue\",\n colorEdit: {\n exposure: -0.7,\n saturation: -1,\n contrast: [0.75, 160],\n mixColor: [\"#3355bb\", 0.15],\n } as ColorEdit,\n },\n\n \"avenue-warm\": {\n baseStyle: \"avenue\",\n colorEdit: {\n exposure: -0.7,\n mixColor: [\"#ff8800\", 0.1],\n contrast: [0.1, 200],\n } as ColorEdit,\n },\n\n \"avenue-vintage\": {\n baseStyle: \"avenue\",\n colorEdit: {\n exposure: -0.25,\n multiplyColor: [\"#ff8800\", 0.4],\n hueRotation: -5,\n contrast: [0.2, 200],\n } as ColorEdit,\n },\n} as const;\n\n/**\n * Options to modify colors of a base style\n */\nexport type ColorEdit = {\n /**\n * Invert the image color\n */\n negate?: boolean;\n\n /**\n * Ratio relative to current brightness.\n * Value in [-1, 1] but the range is actually open\n */\n brightness?: number;\n\n /**\n * Absolute brightness shift\n * Value in [-1, 1] but the range is actually open\n */\n brightnessShift?: number;\n\n /**\n * Exposure, like brightness but more preserving\n * Value in [-1, 1] but the range is actually open\n */\n exposure?: number;\n\n /**\n * Rotate the hue wheel\n * Value in [-180, 180] but the range is actually open\n */\n hueRotation?: number;\n\n /**\n * Modifiy color saturation\n * Value in [-1, 1] but the range is actually open\n */\n saturation?: number;\n\n /**\n * Multiply every color with the given one.\n */\n multiplyColor?: [\n /**\n * CSS color\n */\n string,\n /**\n * Mixing ratio in [0, 1], where 0 is fully the original color and 1 is fully the provided one.\n */\n number,\n ];\n\n /**\n * Mix every color with the given one.\n */\n mixColor?: [\n /**\n * CSS color\n */\n string,\n /**\n * Mixing ratio in [0, 1], where 0 is fully the original color and 1 is fully the one provided.\n */\n number,\n ];\n\n /**\n * Apply contrast, providing a contrast intensity and a mid (inflection) point\n */\n contrast?: [\n /**\n * Contrast intensity. Value in [-1, 1] but is actually an open range\n */\n number,\n /**\n * Color intensity mid point in the range [0, 255]\n */\n number,\n ];\n};\n\nexport type Lang =\n | \"ar\"\n | \"cs\"\n | \"bg\"\n | \"da\"\n | \"de\"\n | \"el\"\n | \"en\"\n | \"es\"\n | \"et\"\n | \"fa\"\n | \"fi\"\n | \"fr\"\n | \"ga\"\n | \"he\"\n | \"hi\"\n | \"hr\"\n | \"hu\"\n | \"id\"\n | \"it\"\n | \"ja\"\n | \"ko\"\n | \"lt\"\n | \"lv\"\n | \"ne\"\n | \"nl\"\n | \"no\"\n | \"mr\"\n | \"mt\"\n | \"pl\"\n | \"pt\"\n | \"ro\"\n | \"ru\"\n | \"sk\"\n | \"sl\"\n | \"sv\"\n | \"tr\"\n | \"uk\"\n | \"ur\"\n | \"vi\"\n | \"zh-Hans\"\n | \"zh-Hant\";\n\nexport type GetStyleOptions = {\n /**\n * The public URL of a pmtiles files. To use if sourcing tiles directly with\n * range-request using the `pmtiles`'s protocol. Alternatively, the option `tileJson` can be used and will take precedence.\n */\n pmtiles?: string;\n\n /**\n * The public URL to a tile JSON file. To use if classic z/x/y MVT tiles are served through\n * Maplibre's Martin or the pmtiles CLI. Will take precedence on the option `pmtiles` if both are provided.\n */\n tilejson?: string;\n\n /**\n * URL of the sprites\n */\n sprite?: string;\n\n /**\n * URL of the glyphs\n */\n glyphs: string;\n\n /**\n * Language to apply to the basemap. Leaving this undefined will set to auto mode and use the platform language of the end user.\n */\n lang?: Lang;\n\n /**\n * Language script to apply to the basemap\n */\n script?: string;\n\n /**\n * Points Of Interests are shown by default, requiring a sprite URL. Passing this option as `true` will remove the POIs layer\n * and make the `sprite` option unnecessary.\n */\n hidePOIs?: boolean;\n\n /**\n * Labels are shown by default, requiring a glyphs URL. Passing this options as `true` will remove the label layers and make the\n * `glyphs` option unnecessary.\n */\n hideLabels?: boolean;\n};\n\n/**\n * Options relative to building a style\n */\nexport type BuildStyleOptions = GetStyleOptions & {\n /**\n * Name of the style to start from\n */\n baseStyleName: string;\n\n /**\n * Optional color modification to apply to the provided style\n */\n colorEdit?: ColorEdit;\n};\n\n/**\n * Returns the list of styles available.\n */\nexport function getStyleList(): string[] {\n return Object.keys(baseStyles).concat(Object.keys(stylePresets));\n}\n\n/**\n * Get a style.\n */\nexport function getStyle(styleName: string, options: GetStyleOptions): StyleSpecification {\n // Check is style is raw\n if (styleName in baseStyles) {\n return buildStyle({\n ...options,\n baseStyleName: styleName,\n });\n }\n\n // Or if it's a preset\n if (styleName in stylePresets) {\n const presetInfo = stylePresets[styleName as keyof typeof stylePresets];\n return buildStyle({\n ...options,\n baseStyleName: presetInfo.baseStyle,\n colorEdit: presetInfo.colorEdit,\n });\n }\n\n throw new Error(`The style \"${styleName}\" does not exist as a base style, nor as a preset.`);\n}\n\n/**\n * Build your own style, using one of the base style as starting point.\n */\nexport function buildStyle(options: BuildStyleOptions): StyleSpecification {\n let countryTextField: string;\n let otherTranslatedTextField: string;\n const hideLabels = options.hideLabels ?? false;\n\n // Not displaying any label\n if (hideLabels) {\n countryTextField = '\"\"';\n otherTranslatedTextField = '\"\"';\n }\n\n // Displaying a label that is supported\n else if (typeof options.lang === \"string\" && isLanguageSupported(options.lang, options.script)) {\n countryTextField = JSON.stringify(get_country_name(options.lang, options.script));\n otherTranslatedTextField = JSON.stringify(get_multiline_name(options.lang, options.script));\n }\n\n // Not providing any language: using platform language\n else {\n const lang = getDefaultLanguage();\n countryTextField = JSON.stringify(get_country_name(lang));\n otherTranslatedTextField = JSON.stringify(get_multiline_name(lang));\n }\n\n if (!(options.baseStyleName in baseStyles)) {\n throw new Error(`The base style ${options.baseStyleName} does not exist.`);\n }\n\n const baseStyleLayers = baseStyles[options.baseStyleName as keyof typeof baseStyles];\n\n const translatedLayersStr = baseStyleLayers\n .replaceAll('\"<LANG>\"', otherTranslatedTextField)\n .replaceAll('\"<LANG_COUNTRY>\"', countryTextField);\n\n let sourceUrl: string;\n if (typeof options.tilejson === \"string\") {\n sourceUrl = options.tilejson;\n } else if (typeof options.pmtiles === \"string\") {\n sourceUrl = `pmtiles://${options.pmtiles}`;\n } else {\n throw new Error(`At least one option of \"tilejson\" or \"pmtiles\" must be provided as data source.`);\n }\n\n let layers = JSON.parse(translatedLayersStr) as unknown as LayerSpecification[];\n const hidePOIs = options.hidePOIs ?? false;\n\n if (hidePOIs) {\n layers = layers.filter((l) => l.id !== \"pois\");\n }\n\n if (hideLabels) {\n // Keeping the POI layer, yet removing the text field\n const poiLayers = layers.filter((l) => l.id === \"pois\");\n if (poiLayers.length) {\n const poiLayer = poiLayers[0] as SymbolLayerSpecification;\n if (poiLayer.layout !== undefined) {\n const layout = poiLayer.layout;\n if (layout[\"text-field\"] !== undefined) {\n layout[\"text-field\"] = \"\";\n }\n }\n }\n\n layers = layers.filter((layer) => {\n if (layer.id === \"pois\") {\n return true;\n }\n\n if (layer.type !== \"symbol\") {\n return true;\n }\n\n if (layer.layout !== undefined) {\n const layout = layer.layout;\n if (layout[\"text-field\"] !== undefined) {\n return false;\n }\n }\n return true;\n });\n }\n\n const colorOptions = options.colorEdit ?? {};\n const brightness = colorOptions.brightness ?? 0;\n const hueRotation = colorOptions.hueRotation ?? 0;\n const saturation = colorOptions.saturation ?? 0;\n const negate = colorOptions.negate ?? false;\n const brightnessShift = colorOptions.brightnessShift ?? 0;\n const exposure = colorOptions.exposure ?? 0;\n\n const shouldApplyColorTransform =\n brightness !== 0 ||\n hueRotation !== 0 ||\n saturation !== 0 ||\n negate === true ||\n colorOptions.multiplyColor !== undefined ||\n colorOptions.mixColor !== undefined ||\n brightnessShift !== 0 ||\n colorOptions.contrast !== undefined ||\n exposure !== 0;\n\n if (shouldApplyColorTransform) {\n findColor(layers, (color: string) => {\n if (color === \"#a6e085\") {\n console.log(\"#a6e085\");\n }\n\n // Using the Color lib for saturation and hue rotation\n let layerColor = Color(color);\n\n if (negate) {\n layerColor = layerColor.negate();\n }\n\n if (hueRotation !== 0) {\n layerColor = layerColor.rotate(hueRotation);\n }\n\n if (saturation !== 0) {\n layerColor = layerColor.saturate(saturation);\n }\n\n if (brightness > 0) {\n layerColor = layerColor.lighten(brightness);\n } else if (brightness < 0) {\n layerColor = layerColor.darken(brightness * -1);\n }\n\n if (brightnessShift !== 0) {\n const hsl = layerColor.hsl().array();\n hsl[2] += brightnessShift * 100;\n layerColor = Color.hsl(...hsl);\n }\n\n if (\n Array.isArray(colorOptions.mixColor) &&\n typeof colorOptions.mixColor[0] === \"string\" &&\n typeof colorOptions.mixColor[1] === \"number\" &&\n colorOptions.mixColor[1] !== 0\n ) {\n layerColor = layerColor.mix(Color(colorOptions.mixColor[0]), colorOptions.mixColor[1]);\n }\n\n const rgbColorInstance = layerColor.rgb();\n const alpha = rgbColorInstance.alpha();\n let rgbArr = [rgbColorInstance.red(), rgbColorInstance.green(), rgbColorInstance.blue()] as RGBArray;\n\n // Apply exposure\n if (exposure !== 0) {\n rgbArr = applyBrightnessRGB(rgbArr, exposure);\n }\n\n // Apply contrast\n if (\n Array.isArray(colorOptions.contrast) &&\n typeof colorOptions.contrast[0] === \"number\" &&\n typeof colorOptions.contrast[1] === \"number\" &&\n colorOptions.contrast[0] !== 0\n ) {\n rgbArr = applyContrastRGB(rgbArr, colorOptions.contrast[0], colorOptions.contrast[1]);\n }\n\n // Apply color multiplication\n if (\n Array.isArray(colorOptions.multiplyColor) &&\n typeof colorOptions.multiplyColor[0] === \"string\" &&\n typeof colorOptions.multiplyColor[1] === \"number\" &&\n colorOptions.multiplyColor[1] !== 0\n ) {\n const multiplyColor = Color(colorOptions.multiplyColor[0]);\n rgbArr = applyMultiplicationRGB(\n rgbArr,\n [multiplyColor.red(), multiplyColor.green(), multiplyColor.blue()],\n colorOptions.multiplyColor[1],\n );\n }\n\n // Back to Color lib format\n const outputColor = Color({ r: rgbArr[0], g: rgbArr[1], b: rgbArr[2], alpha: alpha });\n\n if (color.startsWith(\"rgba(\") || color.startsWith(\"rgb(\")) {\n return outputColor.rgb().toString();\n }\n\n if (color.startsWith(\"hsl(\") || color.startsWith(\"hsla(\")) {\n return outputColor.hsl().toString();\n }\n\n return outputColor.hexa();\n });\n }\n\n const style: StyleSpecification = {\n version: 8,\n ...(options.sprite && !hidePOIs ? { sprite: options.sprite } : {}),\n glyphs: options.glyphs,\n sources: {\n __protomaps_source: {\n type: \"vector\",\n url: sourceUrl,\n attribution: \"<a href='https://openstreetmap.org/copyright'>© OpenStreetMap Contributors</a>\",\n },\n },\n layers: layers,\n };\n\n return style;\n}\n"],"names":["cssKeywords","reverseNames","name","colorNames","cs","string","prefix","value","model","abbr","hex","rgba","per","keyword","rgb","match","i","hexAlpha","i2","clamp","hsl","alpha","h","s","l","hwb","w","b","hexDouble","r","g","hsla","hwba","a","number_","min","max","string_","reverseKeywords","key","convert","LAB_FT","srgbNonlinearTransform","c","cc","srgbNonlinearTransformInv","channels","labels","delta","rdif","gdif","bdif","v","diff","diffc","lp","mp","sp","aa","bb","k","m","y","comparativeDistance","x","reversed","currentClosestDistance","currentClosestKeyword","distance","z","xyz","t3","t2","t1","smin","lmin","sv","hsv","hi","f","p","q","t","vmin","sl","wh","bl","ratio","n","cmyk","oklab","ll","oklch","lab","y2","x2","z2","lch","hr","args","saturation","ansi","color","mult","rem","colorString","char","integer","chroma","hue","grayscale","hcg","pure","mg","apple","gray","buildGraph","graph","models","conversions","length","deriveBFS","fromModel","queue","current","adjacents","adjacent","node","link","from","to","wrapConversion","toModel","path","fn","cur","route","conversion","wrapRaw","wrappedFn","arg0","wrapRounded","result","routes","routeModels","skippedModels","hashedModelKeys","limiters","Color","object","newArray","zeroArray","keys","hashedKeys","limit","places","self","arguments_","roundToPlace","getset","maxfn","rgbArray","alphaHex","lum","element","chan","color2","lum1","lum2","contrastRatio","degrees","mixinColor","weight","color1","w1","w2","assertArray","roundTo","number","channel","modifier","array","isColorDescription","elem","findColor","data","dataAsRecord","applyBrightnessSingle","input","brightness","normalized","adjusted","applyBrightnessRGB","applyContrastSingle","contrast","midpoint","boundedContrast","steepness","applyContrastRGB","applyMultiplicationSingle","input1","input2","applyMultiplicationRGB","_chan","avenueLayersRaw","isLanguageSupported","lang","script","candidates","language_script_pairs","getDefaultLanguage","systemLang","baseStyles","stylePresets","getStyleList","getStyle","styleName","options","buildStyle","presetInfo","countryTextField","otherTranslatedTextField","hideLabels","get_country_name","get_multiline_name","translatedLayersStr","sourceUrl","layers","hidePOIs","poiLayers","poiLayer","layout","layer","colorOptions","hueRotation","negate","brightnessShift","exposure","layerColor","rgbColorInstance","rgbArr","multiplyColor","outputColor"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","x_google_ignoreList":[0,1,2,3,4,5]}